在Microsoft Teams应用/选项卡中代表用户创建并控制通话的方案咨询
解决方案:在Teams应用/选项卡中代表用户发起并控制通话
可行方案1:使用Microsoft Graph API发起并控制Teams原生通话
- 发起通话:通过Graph API的
POST /communications/calls端点,以用户委托权限(需申请Calls.Initiate.All、Calls.InitiateGroupCall.All等权限)发起两个用户之间的直接通话,请求体中指定两个用户的ID或UPN,通话发起后无第三方参与者,完全是用户间的原生Teams通话。 - 通话控制:利用Graph API的通话管理端点,比如
POST /communications/calls/{callId}/mute(静音)、POST /communications/calls/{callId}/hold(保持)、POST /communications/calls/{callId}/transfer(转接)等,通过获取到的通话ID执行各类控制操作。 - 注意:必须使用用户授权的access token调用接口,不能用应用权限,否则无法代表用户发起通话;需在Azure AD中注册应用并配置对应的委托权限,同时完成OAuth 2.0授权流程获取用户令牌。
可行方案2:Teams深层链接+Graph API组合实现
- 发起通话:在Teams选项卡中调用
microsoftTeams.executeDeepLink()方法,传入Teams通话深层链接格式:https://teams.microsoft.com/l/call/0/0?users=<user1_upn>,<user2_upn>,直接唤起Teams客户端发起用户间通话,这种方式无需额外后端逻辑,用户体验更贴近原生Teams操作。 - 通话控制:通过Graph API的
GET /communications/calls端点,根据用户身份筛选出当前通话的ID,再调用控制接口完成静音、保持等操作。需要确保应用已获取用户的通话读取权限(Calls.Read.All)。
你之前方案的局限说明
- 机器人发起通话:机器人作为通话的创建者和参与者,必然会留在通话中,且本质是机器人呼叫用户,而非用户间的直接呼叫,不符合需求。
- Teams SDK原生方法:Teams JS SDK的
startCall等方法仅能唤起通话界面,没有提供直接控制通话状态的API,无法实现静音、保持等操作。 - Azure Communications Service:ACS是独立的通信平台,所有通话都在ACS服务器上托管,不属于Teams原生通话体系,因此不符合你的托管需求。
如果以上方案仍无法满足你的场景,目前Teams生态中确实没有其他原生方案能完全匹配“代表用户发起Teams原生通话+全量控制”且无需依赖第三方托管的需求。
内容的提问来源于stack exchange,提问作者Daan Zwarthoed
相关产品推荐
相关产品推荐

