通用操作模型代码示例 - 费用审批
此示例演示适用于自适应卡片 1.4 或更高版本的通用操作模型实现。
先决条件
- Outlook/OWA 客户端可用,并且你有一个帐户。
- 有效的 Azure 子密码。
- 了解 Azure Bot Framework。
机器人设置
- 按照此处的说明向 Azure 机器人服务注册机器人。
- 确保已启用 Outlook 频道。
- 在Azure 门户中打开机器人资源。
- 打开“ 通道 ”窗格。
- 在“可用频道”部分选择 Outlook 频道。
- 在“ 可操作邮件 ”选项卡下,单击“ 应用 ”,然后 在此处注册。
- 填写注册表单以请求访问权限。 有关详细信息,请参阅向可操作的电子邮件开发人员仪表板注册服务。
- 按照 此处的说明使用 Bot Framework SDK 创建机器人。
步骤 1:确保自适应卡有效负载准备就绪
对于审批方案,可 在此处找到 JSON 有效负载。 下面,可以在移动和桌面屏幕中看到有效负载呈现。
对于“通用操作”,需要使用Action.Execute
收集输入字段并将类型adaptiveCard/action
为的活动发送到Invoke
目标机器人。 目标机器人可以使用 字段识别完成 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:发送可操作消息
可以发送由通用操作支持的可操作消息,类似于任何其他可操作消息。 有关详细信息,请参阅 通过电子邮件发送可操作邮件。