MS Teams中Bot发送的Adaptive Card如何实现复制粘贴功能
问题1:Bot直接发送的Adaptive Card添加Copy菜单按钮实现方案
Link Unfurling生成的卡片默认带Copy按钮是Teams对链接展开场景做的原生菜单注入,直接通过ConnectorClient.Conversations.SendToConversationAsync发送的原生Adaptive Card默认没有触发该菜单的配置,可通过以下两种方式实现:
- 方式一:在发送的Activity的
ChannelData中添加Teams专属配置,开启Copy支持并关联你已实现的Link Unfurling规则,示例代码如下:
var activity = MessageFactory.Attachment(adaptiveCardAttachment); activity.ChannelData = JObject.FromObject(new { teams = new { supportsCopy = true, // 此处填写和你Link Unfurling逻辑匹配的卡片关联链接 cardUnfurlUrl = "你的应用内卡片对应的专属展开链接" } }); await connectorClient.Conversations.SendToConversationAsync(activity);
配置完成后Teams会给你的卡片注入和Link Unfurling卡片一致的Copy菜单,复制后粘贴到其他会话也能正常触发你的Link Unfurling逻辑渲染卡片。
- 方式二:直接在Adaptive Card中添加原生复制操作按钮,使用
Action.CopyToClipboard类型,自定义要复制的内容(可以是卡片关联链接、结构化卡片Json等),点击即可直接复制到剪贴板,兼容性更强。
问题2:非Bot会话场景下转发卡片的操作有效性说明
你的判断是正确的:Adaptive Card中Action.Submit、Action.Execute这类需要和Bot交互的操作,转发到没有你的Bot参与的会话时,Teams没有对应的路由规则将操作请求发送到你的Bot,所以这类操作会直接失效,只有Action.OpenUrl这类纯跳转链接的操作可以正常使用。
对应的处理方案如下:
- 优先将所有核心交互操作改为带上下文参数的跳转链接,用户点击后跳转到你的Teams应用Tab或者网页端完成操作,不受会话场景限制。
- 如果必须保留Bot交互操作,可以在卡片上添加明确提示,告知用户转发后的卡片需要在安装了你的应用的会话中才能使用完整功能,也可以在操作按钮的
fallback属性中配置降级逻辑,无Bot上下文时自动改为跳转链接。 - 配置卡片转发后的默认降级规则,转发后的卡片自动渲染为仅带核心信息和跳转链接的预览样式,避免用户点击无效按钮出现报错。
内容的提问来源于stack exchange,提问作者imfantom
相关产品推荐
相关产品推荐

