ユニバーサル アクション モデルのコード サンプル - 経費の承認
このサンプルは、アダプティブ カード バージョン 1.4 以降で使用できるユニバーサル アクション モデルの実装を示しています。
前提条件
- Outlook/OWA クライアントを使用でき、アカウントを持っています。
- 有効な Azure サブシプション。
- Azure Bot Framework の理解。
ボットのセットアップ
- こちらの手順に従って、ボットを Azure Bot Serviceに登録します。
-
Outlook チャネルが有効になっていることを確認します。
- Azure portalでボット リソースを開きます。
- [ チャネル ] ウィンドウを開きます。
- [使用可能なチャネル] セクションで [Outlookチャネル] を 選択します。
- [ アクション可能なメッセージ ] タブの [ 適用 ] をクリックし、その後に 登録してください。
- アクセスを要求するには、登録フォームに入力します。 詳細については、「 アクション可能な電子メール開発者ダッシュボードにサービスを登録 する」を参照してください。
- こちらの手順に従って、Bot Framework SDK を使用してボットを作成 します。
手順 1: アダプティブ カード ペイロードの準備ができていることを確認する
承認シナリオについては、 こちらの JSON ペイロードを参照してください。 以下では、モバイル画面とデスクトップ画面でペイロードのレンダリングを確認できます。
ユニバーサル アクションの場合は、入力フィールドを収集し、型adaptiveCard/action
のアクティビティをInvoke
ターゲット ボットに送信する を使用Action.Execute
する必要があります。 ターゲット ボットは、 フィールドを使用して実行されたアクションを verb
識別できます。 フィールドを使用して、追加の入力を data
送信できます。
JSON ペイロード
承認のためのアクション シナリオのスニペットを次に示します。
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Execute",
"title": "Accept",
"verb": "approvalAccept",
"data": {},
"isPrimary": true,
"style": "positive"
},
{
"type": "Action.ShowCard",
"id": "e1487cbc-66b0-037e-cdc4-045fb7d8d0b8",
"title": "Reject",
"card": {
"type": "AdaptiveCard",
"body": [
{
"type": "Input.Text",
"id": "Comment",
"placeholder": "Add a comment",
"isMultiline": true
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.Execute",
"title": "Submit",
"verb": "approvalReject",
"data": {
"comment": "${Comment.value}"
}
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"fallbackText": "Unable to render the card",
"padding": "None"
}
}
],
"spacing": "None"
}
詳細については、「Action.Execute スキーマとプロパティ」を参照してください。
手順 2: 承認のためにボットにカスタム ビジネス ロジックを記述する
Azure ボットでは、OnAdaptiveCardInvokeAsync メソッドを使用して、フィールドを使用してアクションをverb
キャプチャし、ビジネス ロジックを追加し、更新カードを Outlook に送信できます。
protected override async Task<AdaptiveCardInvokeResponse> OnAdaptiveCardInvokeAsync(
ITurnContext<IInvokeActivity> turnContext,
AdaptiveCardInvokeValue invokeValue,
CancellationToken cancellationToken)
{
try
{
// Approval Scenario
if (invokeValue.Action.Verb == "approvalAccept")
{
// This function can contain your business logic
// to capture the approval and show the refresh card
return await ProcessApprovalAccepted();
}
else if (invokeValue.Action.Verb == "approvalReject")
{
// This function can contain you business logic
// to capture the rejection and show the refresh card
return await ProcessApprovalRejected();
}
else
{
throw new InvokeResponseException(HttpStatusCode.NotImplemented);
}
}
catch (AdaptiveCardActionException e)
{
throw new InvokeResponseException(HttpStatusCode.NotImplemented, e.Response);
}
}
ボットをローカルでテストすることも、 ボットを Azure にデプロイすることもできます。
手順 3: アクション可能なメッセージを送信する
ユニバーサル アクションに基づくアクション可能メッセージは、他のアクション可能メッセージと同様に送信できます。 詳細については、「 電子メールでアクション可能なメッセージを送信する」を参照してください。