Bot Framework Teams环境下HeroCard的Call类型按钮无法正常显示
Teams Bot 对话中实现可触发呼叫按钮的落地方法
根因说明
Teams 客户端对 Bot Framework 定义的通用卡片动作存在兼容差异,原生 ActionTypes.Call 类型的卡片动作并未适配 Bot 消息的渲染逻辑,即使完全按照通用规范完成配置,也会出现按钮被直接过滤、不展示的情况,不属于代码编写错误导致的问题。
可落地的实现方案
- 通用拨号场景:使用
OpenUrl动作配合标准tel:协议触发系统呼叫
Teams 客户端对tel:开头链接的识别逻辑和 http/https 链接完全一致,点击后会自动唤起系统默认拨号应用,达到和原生 Call 动作完全相同的呼叫触发效果,且全端兼容。
调整后的代码示例:const buttons = [ { type: ActionTypes.OpenUrl, title: '1. Open URL', value: 'http://www.google.com' }, // 替换原Call类型按钮的配置 { type: ActionTypes.OpenUrl, title: '2. 拨打服务热线', value: 'tel:08001323333' }, { type: ActionTypes.ImBack, title: '3. Uploaded Attachment', value: '3' }, { type: ActionTypes.OpenUrl, title: '4. 拨打专属客服', value: 'tel:45456544' }, ]; const card = CardFactory.heroCard('', undefined, buttons, { text: 'Select your choices.', }); - Teams 内部呼叫场景:使用 Teams 专属的 invoke 动作唤起内置呼叫能力
如果需要不跳出 Teams 客户端、直接在组织内发起 Teams 语音呼叫,可以配置 Teams 专用的卡片调用动作,绑定 Teams 呼叫接口,点击后会直接在当前会话内发起和目标联系人/号码的 Teams 通话,体验更流畅。
配置注意事项
tel:号码串保持标准格式即可,不需要额外做 URL 编码,格式异常会导致链接识别失败- 配置卡片按钮时不要混入 Teams 不支持的动作类型,否则可能触发整组按钮的渲染异常
- 若使用 Teams 内置呼叫能力,需要确保目标号码、联系人在当前 Teams 租户的可访问通讯录范围内,否则会出现呼叫发起失败的提示
内容的提问来源于stack exchange,提问作者lucasm107
相关产品推荐
相关产品推荐

