通用操作模型代码示例 - 费用审批

此示例演示适用于自适应卡片 1.4 或更高版本的通用操作模型实现。

先决条件

  • Outlook/OWA 客户端可用,并且你有一个帐户。
  • 有效的 Azure 子密码。
  • 了解 Azure Bot Framework

机器人设置

步骤 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:发送可操作消息

可以发送由通用操作支持的可操作消息,类似于任何其他可操作消息。 有关详细信息,请参阅 通过电子邮件发送可操作邮件