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

如何在Microsoft Teams机器人中获取Adaptive Card提交的反馈数据

实现方案

你不需要大幅修改现有自适应卡片的结构,提交时自适应卡片中所有Input控件的内容都会自动携带在提交 payload 里,我们只需要在Bot侧做对应处理即可:

  • 第一步:调整自适应卡片提交动作(可选优化,方便你识别是反馈提交请求)
    你可以给现有的Action.Submit加一个自定义的动作标识字段,方便后续在Bot的逻辑里快速判断这是反馈提交的请求,修改后的提交动作代码如下:
{
    "type": "Action.Submit",
    "title": "Submit Feedback",
    "data": {
        "actionType": "feedbackSubmit", // 新增自定义标识
        "msteams": {
            "type": "imBack",
            "value": "Feedback Submitted."
        }
    },
    "style": "positive"
}
  • 第二步:在Bot的消息处理逻辑中捕获提交事件
    当用户点击提交按钮后,Teams会把自适应卡片所有输入框的id和对应值封装到Activity.Value属性里传给你的Bot,你只需要读取这个属性即可。

C# SDK 示例代码:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // 判断是否是自适应卡片的提交请求
    if (turnContext.Activity.Value != null)
    {
        var feedbackData = turnContext.Activity.Value as JObject;
        // 判断是否是反馈提交动作
        if (feedbackData?["actionType"]?.ToString() == "feedbackSubmit")
        {
            // 提取三个输入框的内容,只有用户选中显示的那个会有值
            string question = feedbackData["Question"]?.ToString() ?? string.Empty;
            string suggestion = feedbackData["Suggestion"]?.ToString() ?? string.Empty;
            string comments = feedbackData["Comments"]?.ToString() ?? string.Empty;

            string feedbackType = string.Empty;
            string feedbackContent = string.Empty;

            if (!string.IsNullOrEmpty(question))
            {
                feedbackType = "问题";
                feedbackContent = question;
            }
            else if (!string.IsNullOrEmpty(suggestion))
            {
                feedbackType = "建议";
                feedbackContent = suggestion;
            }
            else if (!string.IsNullOrEmpty(comments))
            {
                feedbackType = "留言";
                feedbackContent = comments;
            }

            // 回传给用户的消息
            string replyText = $"已收到你提交的{feedbackType}:{feedbackContent},感谢你的反馈!";
            await turnContext.SendActivityAsync(MessageFactory.Text(replyText), cancellationToken);
            return;
        }
    }
    // 其他消息处理逻辑
    await base.OnMessageActivityAsync(turnContext, cancellationToken);
}

Node.js SDK 示例代码:

this.onMessage(async (context, next) => {
    if (context.activity.value) {
        const feedbackData = context.activity.value;
        if (feedbackData.actionType === 'feedbackSubmit') {
            const question = feedbackData.Question || '';
            const suggestion = feedbackData.Suggestion || '';
            const comments = feedbackData.Comments || '';

            let feedbackType = '';
            let feedbackContent = '';

            if (question) {
                feedbackType = '问题';
                feedbackContent = question;
            } else if (suggestion) {
                feedbackType = '建议';
                feedbackContent = suggestion;
            } else if (comments) {
                feedbackType = '留言';
                feedbackContent = comments;
            }

            const replyText = `已收到你提交的${feedbackType}:${feedbackContent},感谢你的反馈!`;
            await context.sendActivity(replyText);
            await next();
            return;
        }
    }
    // 其他消息处理逻辑
    await next();
});
  • 第三步:空值校验(可选优化)
    你可以在提取内容后加一层判断,如果用户没有填写内容就提交,可以提示用户请输入反馈内容后再提交,避免空数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:03