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

Teams中Adaptive Card的Input.ChoiceSet在Action.Submit时不返回更新值

问题分析与解决方案

你的机器人在Microsoft Teams环境下,首次应用过滤能正常返回默认值,但二次修改过滤条件后无法获取选中值,而本地Bot Framework模拟器功能正常,核心原因是Teams与模拟器的卡片状态管理逻辑差异:模拟器会自动保留用户输入状态,但Teams不会,必须通过显式的卡片更新机制同步状态。

具体解决方案

1. 改用卡片更新机制,替换重复发送新卡片

当用户点击「Apply Filter」后,不要发送全新卡片,而是更新原有卡片的状态,确保Teams能识别最新的用户选择:

// 处理APPLY FILTER动作
if (context.activity.value.action === "APPLY FILTER") {
    // 直接从提交数据中获取用户选择的过滤值
    const userSelections = {
        id_1: context.activity.value.id_1 || [],
        id_2: context.activity.value.id_2 || [],
        id_3: context.activity.value.id_3 || [],
        id_4: context.activity.value.id_4 || []
    };

    // 复制原卡片模板并更新选中状态
    const updatedCard = JSON.parse(JSON.stringify(system_adaptive_card));
    
    // 更新每个ChoiceSet的选中值
    ["id_1", "id_2", "id_3", "id_4"].forEach(id => {
        const inputElement = updatedCard.body.find(item => item.id === id);
        if (inputElement) {
            inputElement.value = userSelections[id];
        }
    });

    // 更新原有卡片(而非发送新卡片)
    await context.updateActivity({
        id: context.activity.replyToId,
        attachments: [CardFactory.adaptiveCard(updatedCard)],
        attachmentLayout: "carousel"
    });
}

2. 移除Submit按钮中的手动数据绑定

原Submit按钮的data字段手动绑定{id_1.value}等值,在Teams中二次提交时可能无法同步最新状态。改为仅传递动作标识,所有输入值直接从context.activity.value中获取:

{
    "type": "Action.Submit",
    "title": "Apply Filter",
    "data": {
        "action": "APPLY FILTER"
    }
}

3. 同步控件可见性状态

更新卡片时,需保留当前控件的可见性状态(比如哪些过滤选项是展开的)。可以在对话状态中记录可见性信息,更新卡片时同步设置对应元素的isVisible属性。

4. 验证Teams的自适应卡片版本兼容性

虽然你使用的是1.5版本,但Teams对部分新特性的支持可能存在延迟,可尝试将卡片版本降级到1.4测试是否解决问题:

"version": "1.4"

核心逻辑说明

Teams不会自动维护卡片的输入状态,每次用户交互后,必须通过updateActivity方法将用户的选择同步回卡片,确保后续提交动作能获取到最新的选中值。而本地模拟器默认帮你处理了状态保留,因此不会出现该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:32:04