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

MS Bot Framework V4开发Teams机器人点击Hero卡片出现Success通知问题

解决方案:消除Teams弹窗场景下Hero卡片按钮触发的多余Success通知

问题根因

该Success通知是Microsoft Teams对任务模块(即弹出窗口)中未做标准化配置的卡片按钮回传操作的默认反馈。你当前使用的Choice Prompt默认生成的按钮为postBack/imBack类型,仅适配普通对话窗口的交互,在任务模块场景下没有显式返回任务模块处理响应时,就会触发该默认提示。

修复步骤

1. 自定义Choice Prompt的卡片按钮动作类型

不要使用Choice Prompt默认生成的postBack类型按钮,手动为每个选项配置task/submit类型的动作:

// 以C# SDK为例,其他语言SDK逻辑一致
var popupChoices = new List<Choice>
{
    new Choice
    {
        Value = "选项1",
        // 显式指定按钮为任务模块提交类型
        Action = new CardAction
        {
            Type = ActionTypes.TaskSubmit,
            Title = "选项1",
            // 用结构化对象传递选项值,不要直接用字符串
            Value = new { selectedOption = "选项1" }
        }
    },
    // 其他选项同理配置
};

// 用自定义配置的选项初始化Choice Prompt
var choicePrompt = new ChoicePrompt(nameof(ChoicePrompt))
{
    Choices = popupChoices,
    Style = ListStyle.HeroCard
};

2. 处理任务模块提交的Invoke请求

点击task/submit类型的按钮后,Teams会向你的Bot发送invoke类型的活动,而非普通的消息活动,你需要专门处理该请求:

  1. 在Bot的活动处理逻辑中判断活动类型,如果是invoke且活动名称为task/submit,解析Value字段拿到用户选择的选项值
  2. 处理完业务逻辑后,返回标准化的任务模块响应,不要返回普通消息响应:
// 处理task/submit请求后的返回示例
var response = new InvokeResponse
{
    Status = 200,
    Body = new TaskModuleResponse
    {
        Task = new TaskModuleMessageResponse
        {
            // 指定关闭任务模块,不会触发默认Success提示
            Type = "close"
        }
    }
};
await turnContext.SendActivityAsync(Activity.CreateInvokeResponseActivity(response), cancellationToken);

3. 适配双场景交互

如果你的Hero卡片需要同时在普通对话窗口和弹窗中使用,可以通过上下文判断当前交互场景:

  • 普通对话场景下保持默认的postBack按钮类型即可,不会触发多余提示
  • 弹窗场景下切换为task/submit按钮类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:48:01