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

在Teams Toolkit C# Bot中如何捕获Action.Submit提交事件

处理自适应卡片Submit操作的捕获方法

在基于ICommandHandler的Teams Bot中,自适应卡片的Submit操作不会被ICommandHandler捕获——因为它不是文本命令,而是以InvokeActivity的形式发送给Bot的。你需要单独处理Invoke类型的请求,具体步骤如下:

  • 区分请求类型:在Bot的核心处理逻辑(比如OnTurnAsync方法)中,先判断Activity类型是否为ActivityTypes.Invoke,再进一步判断Invoke的名称是否为adaptiveCard/action,这就是自适应卡片Submit操作的标识。
  • 提取提交数据:从context.Activity.Value中获取卡片提交的JSON数据,可反序列化为自定义模型类来使用。
  • 返回响应:必须向Teams客户端返回InvokeResponse(状态码200),否则会触发提交失败的提示。

示例代码片段

public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
    // 先执行原有命令处理逻辑
    await base.OnTurnAsync(turnContext, cancellationToken);

    // 捕获自适应卡片Submit操作
    if (turnContext.Activity.Type == ActivityTypes.Invoke && 
        turnContext.Activity.Name == "adaptiveCard/action")
    {
        // 反序列化提交的数据(替换成你的卡片模型类)
        var cardSubmitData = JsonConvert.DeserializeObject<YourCardSubmitModel>(
            turnContext.Activity.Value.ToString());

        // 处理业务逻辑,比如回复用户确认
        await turnContext.SendActivityAsync(
            MessageFactory.Text($"已收到你的提交:{cardSubmitData.YourInputField}"), 
            cancellationToken);

        // 返回成功响应给Teams客户端
        await turnContext.SendActivityAsync(new Activity
        {
            Type = ActivityTypes.InvokeResponse,
            Value = new InvokeResponse
            {
                Status = 200,
                Body = new { Success = true, Message = "提交处理完成" }
            }
        }, cancellationToken);
    }
}

额外提示

如果你的Bot使用Teams Framework v4+,也可以通过注册IInvokeHandler的方式,将自适应卡片的处理逻辑单独抽离成一个类,让代码结构更清晰,避免在OnTurnAsync中堆积过多判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:22