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

Teams搜索消息扩展Select Item事件触发后无法返回Adaptive Card问题求助

排查方案

1. 确认选中事件参数匹配性

你当前从obj.name取值匹配item.ID,需先校验搜索结果列表中每个项的点击动作配置是否正确传递了ID:

  • 搜索结果返回时,每个项的preview卡片点击Action.Invoke的value字段是否将ID存入了name属性,如果实际存入的是id等其他字段,会导致find返回undefined,后续卡片生成逻辑报错无返回。
  • 可在方法开头增加空判断避免报错:
public async handleTeamsMessagingExtensionSelectItem(
  context: TurnContext,
  obj: any
): Promise<any> {
  const item = this.response.find(e => e.ID == obj.name);
  // 空值兜底,避免未匹配到时逻辑崩溃
  if (!item) {
    const testCard = CardFactory.adaptiveCard({
      "type": "AdaptiveCard",
      "body": [{"type": "TextBlock", "text": "测试卡片"}],
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "version": "1.2"
    });
    // 必须加预览卡片,否则Teams不渲染
    testCard.preview = CardFactory.thumbnailCard('测试', '测试预览');
    return {
      composeExtension: {
        type: "result",
        attachmentLayout: "list",
        attachments: [testCard],
      },
    };
  }
  const card = AccountResultCard.getCard(item);
  // 补充预览卡片配置
  const accountDetail = item.Code ? item.Code + ' - '  + item.Description : '';
  const accountcontextinfo1 = item.ContextInfo[1] ? item.ContextInfo[1] : '';
  card.preview = CardFactory.thumbnailCard(accountDetail, accountcontextinfo1);
  return {
    composeExtension: {
      type: "result",
      attachmentLayout: "list",
      attachments: [card],
    },
  };
}

2. 补充附件预览字段

Teams消息扩展返回的Adaptive Card必须携带preview属性(格式为缩略卡),否则会直接忽略不渲染,这是最常见的踩坑点,你之前的代码缺失了该配置。

3. 确认事件正确触发

可在方法开头加日志确认逻辑是否被执行:

  • 如果未触发,检查应用清单(manifest)中composeExtensions.commands配置是否开启了选中结果的响应,fetchTask需设为false(直接返回结果无需弹出任务模块)
  • 也可使用网页版Teams测试,避免客户端缓存导致的逻辑不生效。

4. 校验this.response有效性

this.response如果是全局/类实例属性,需确认在选中事件触发时该属性仍有值,部分场景下搜索请求结束后实例属性会被重置,导致find无结果,建议将选中结果需要的字段直接通过点击事件的value传递,不要依赖全局存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:15:03