Microsoft Teams标签页应用中PSTN号码拨打的替代方案咨询(原executeDeepLink已弃用且Web端失效)
我太懂你这种困扰了——之前靠executeDeepLink拨PSTN号码顺风顺水好多年,结果现在API不仅被弃用,Web端还直接跳首页完全没法用,试了app.openLink也是同样的坑,app.startCall又只认用户ID不认手机号,确实让人头大。
给你几个亲测可行的替代方案,你可以挨个试试:
优先用专门的拨号API:
microsoftTeams.dialer.beginDial()
这是Teams JS SDK里专门为拨打电话设计的API,完美支持PSTN号码,不管是客户端还是Web端都能正常工作。用法很简单,直接传入符合E.164格式的电话号码就行(必须带国家码,不能有空格、括号这类特殊字符):// 先确保已经初始化了Teams SDK microsoftTeams.initialize(); // 发起PSTN呼叫 microsoftTeams.dialer.beginDial({ phoneNumber: "+8613800138000" // 替换成你的目标号码 }) .then(() => { console.log("呼叫已成功发起"); }) .catch(error => { console.error("呼叫发起失败:", error); });另外要注意,你需要确保Teams SDK的版本是v2.x及以上,还有在你的应用manifest里要添加对应的拨号权限(
"devicePermissions": ["microphone", "dial"]),不然可能会有权限问题。调整Deep Link格式适配Web端
如果暂时不想换API,可以试试修改原来的Deep Link格式,给PSTN号码加上tel:前缀,同时确保号码是标准E.164格式,比如:const pstnUrl = "https://teams.microsoft.com/l/call/0/0?users=tel:+8613800138000"; microsoftTeams.app.openLink(pstnUrl);这个方法在部分Web端环境下可能修复跳转问题,但不如专门的拨号API稳定,还是更推荐第一个方案。
关于
startCall的变通思路(不推荐)
虽然startCall只接受用户ID,但如果你能把PSTN号码关联到一个Teams里的“联系人”对象,或许可以通过联系人ID来发起呼叫,但这个操作需要额外的联系人同步逻辑,步骤繁琐而且维护成本高,除非万不得已不建议这么做。
最后再提个关键注意点:所有方案里的电话号码都必须是标准E.164格式,比如+1(555)123-4567要改成+15551234567,不然Teams会识别失败。
内容来源于stack exchange

