You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Microsoft Bot Framework获取MS Teams中Adaptive Card Action.Submit的用户响应

基于Microsoft Bot Framework v4捕获Teams渠道Adaptive Card提交响应方案

你当前的Adaptive Card配置逻辑符合Teams兼容标准,仅需在后端Bot逻辑中添加对应提交事件的处理逻辑即可捕获用户点击响应,具体实现步骤如下:

  • 第一步:定位Bot主处理类
    你的Bot逻辑入口一般为继承自ActivityHandler/TeamsActivityHandler的自定义类,所有Teams端推送的事件都会流经该类的对应处理方法。

  • 第二步:添加提交事件处理逻辑
    Teams端Adaptive Card的Action.Submit/Action.Execute动作都会以特定格式推送到后端,你可以任选以下两种方式处理:

方式1:通用Message活动处理(兼容所有版本场景)

Action.Submit和降级后的Action.Execute都会以Message类型活动推送,你只需要重写OnMessageActivityAsync方法解析Activity.Value字段即可:

// 可选:先定义和卡片data字段匹配的强类型模型,方便后续业务调用
public class SurveySubmitPayload
{
    public bool Key1 { get; set; }
    public string Key2 { get; set; }
    public string Verb { get; set; }
    public string Id { get; set; }
}

// 重写消息处理方法
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Activity.Value不为空即为Adaptive Card提交请求
    if (turnContext.Activity.Value != null)
    {
        var submitData = turnContext.Activity.Value as JObject;
        // 强类型转换写法:var payload = submitData.ToObject<SurveySubmitPayload>();

        // 读取自定义字段判断用户点击选项
        bool userSelectedYes = submitData.Value<bool>("key1");
        string replyContent = userSelectedYes ? "感谢您的认可!" : "很抱歉没能满足您的需求,我们会持续优化内容。";

        // 此处添加你的业务处理逻辑,比如存储反馈、更新卡片等
        await turnContext.SendActivityAsync(MessageFactory.Text(replyContent), cancellationToken);
        return;
    }

    // 其他普通消息的处理逻辑
    await base.OnMessageActivityAsync(turnContext, cancellationToken);
}

方式2:Adaptive Card专属Invoke处理(适配高版本Teams通用动作)

如果你的Bot启用了Teams自适应卡片通用动作能力,Action.Execute会以Invoke类型活动推送,你可以重写OnAdaptiveCardInvokeAsync方法处理,支持直接返回新的卡片内容:

protected override async Task<AdaptiveCardInvokeResponse> OnAdaptiveCardInvokeAsync(ITurnContext<IInvokeActivity> turnContext, AdaptiveCardInvokeValue invokeValue, CancellationToken cancellationToken)
{
    var submitData = invokeValue.Action.Data as JObject;
    bool userSelectedYes = submitData.Value<bool>("key1");

    // 业务逻辑处理
    // 如需返回新卡片直接填充Value字段即可,不需要返回卡片也可以返回200状态码表示处理成功
    return new AdaptiveCardInvokeResponse
    {
        StatusCode = 200,
        Type = "application/vnd.microsoft.activity.message",
        Value = userSelectedYes ? "感谢您的认可!" : "很抱歉没能满足您的需求,我们会持续优化内容。"
    };
}
  • 优化建议
    你当前卡片的fallback节点未携带自定义data字段,建议补充对应配置,避免低版本Teams用户点击按钮后后端拿不到自定义参数:
"fallback": {
  "type": "Action.Submit",
  "title": "Yes",
  "data":{
    "key1": true,
    "key2":"okay"
  }
}

内容的提问来源于stack exchange,提问作者MarsRoverII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:06:02