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
相关产品推荐
相关产品推荐

