使用TeamsInfo.sendMessageToTeamsChannel发送含文本和附件活动时报错求助
解决TeamsInfo.sendMessageToTeamsChannel发送文本+附件时的"Activity resulted into multiple skype activities"错误
问题分析
使用TeamsInfo.sendMessageToTeamsChannel同时发送文本和附件时,该方法内部逻辑会将文本与附件拆分为多个独立活动,进而触发Activity resulted into multiple skype activities错误。仅发送附件时功能正常,说明附件格式本身无问题,核心冲突在于文本与附件的合并处理逻辑。
解决方案
方案1:改用对话上下文直接发送活动
你已经通过createConversationAsync获取了对话上下文(context),无需再调用TeamsInfo.sendMessageToTeamsChannel,直接使用context.sendActivity即可将文本和附件作为单个活动发送,避免拆分问题。
修改后的代码示例:
let activity = { type: ActivityTypes.Message }; activity.text = displaymessage; activity.attachments = [attachments]; await this.adapter.createConversationAsync(MICROSOFT_APP_ID, channelId, process.env.MICROSOFT_SERVICE_URL, 'https://api.botframework.com', conversationParameters, async (context) => { await context.sendActivity(activity); });
方案2:将文本嵌入附件(如需保留TeamsInfo方法)
如果必须使用TeamsInfo.sendMessageToTeamsChannel,可以将文本内容嵌入到附件中(比如自适应卡片的文本块),仅发送附件对象,不单独设置activity.text:
// 示例:将文本嵌入自适应卡片附件 const adaptiveCardAttachment = { contentType: 'application/vnd.microsoft.card.adaptive', content: { type: 'AdaptiveCard', version: '1.0', body: [ { type: 'TextBlock', text: displaymessage }, // 其他卡片内容... ] } }; let activity = { type: ActivityTypes.Message }; activity.attachments = [adaptiveCardAttachment]; await this.adapter.createConversationAsync(MICROSOFT_APP_ID, channelId, process.env.MICROSOFT_SERVICE_URL, 'https://api.botframework.com', conversationParameters, async (context) => { const teamsChannelId = teamsGetChannelId(context.activity) || channelId; await TeamsInfo.sendMessageToTeamsChannel(context, activity, teamsChannelId, MICROSOFT_APP_ID); });
注意事项
- 确保附件对象符合Bot Framework规范,包含
contentType、content或contentUrl等必填字段,且contentType为Teams支持的类型(如自适应卡片、图片、文件等)。 createConversationAsync已完成对话创建,上下文context已关联目标频道,直接使用context.sendActivity是更简洁且符合设计逻辑的方式。
内容的提问来源于stack exchange,提问作者shakya-abhi
相关产品推荐
相关产品推荐

