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

Bot Framework中重复使用Adaptive Card触发Input.ChoiceSet ID冲突问题

解决方案

问题根因

微软Teams客户端会在单一会话生命周期内缓存所有已渲染Adaptive Card的输入控件ID,即便是重新加载的同结构新卡片,重复使用相同ID的输入控件也会触发冲突校验报错。

可行解决方案(按实现成本从低到高排序)

方案1:新增唯一卡片标识(无需修改控件ID,推荐)

在返回卡片的Activity的ChannelData中添加唯一的cardId字段,让客户端将每次发送的卡片判定为独立实例,不会复用之前的ID缓存,修改代码如下:

// 原有创建reply代码之后新增
reply.ChannelData = new
{
    cardId = Guid.NewGuid().ToString()
};

return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions {Prompt = reply}, cancellationToken);

方案2:动态生成控件唯一ID

如果方案1不生效,可每次渲染卡片时给ChoiceSet生成唯一ID,提交时按前缀匹配取值即可:

var choiceSet = card.Body[1] as AdaptiveChoiceSetInput;
// 新增:给ID加唯一后缀
var uniqueSuffix = Guid.NewGuid().ToString("N").Substring(0, 8);
choiceSet.Id = $"substitution_{uniqueSuffix}";
choiceSet.Choices = adaptiveChoices;

后续接收提交结果时,遍历提交数据的键名,匹配前缀为substitution_的键即可拿到选择值,无需绑定固定ID。

方案3:替换为专用Adaptive Card提示器

普通TextPrompt对Adaptive Card提交的适配性较差,可改用Bot Framework官方的AdaptiveCardPrompt来接收卡片提交,内置了ID冲突规避和提交数据解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:48:03