如何通过Graph API从自助终端应用发起Teams点对点视频通话?
解决Teams呼叫API发起视频通话无响应的问题
场景与已执行操作
开发自助终端/虚拟助手应用,核心需求:
- 终端页面列出安装Teams客户端的可用坐席
- 用户选择坐席后,直接发起视频通话,坐席在Teams内收到通知并加入
- 已排除会议API/动态会议方案,目标使用呼叫API实现类Teams原生联系人通话体验
已完成的配置步骤:
- 在Azure创建包含通信服务的应用
- 配置通信服务相关权限
- 创建并部署Teams机器人至Teams应用
- 调用API通过机器人发起视频通话,但无任何响应
核心排查方向
1. 权限配置验证
- 确认申请的是应用级权限(而非委派权限),必须包含
Calls.Initiate.All、Calls.AccessMedia.All,且已完成租户管理员同意 - 检查Azure AD应用的「API权限」页面,确保权限状态显示「已授予」,避免遗漏管理员审批步骤
2. API请求参数校验
targets字段必须使用坐席的Azure AD对象ID或UPN,不能用Teams昵称或其他非官方标识callbackUri必须是公网可访问的HTTPS地址(Teams服务依赖回调同步呼叫状态),可通过Postman测试地址的可达性,确保返回200 OKmediaConfig需指定为@odata.type: "#microsoft.graph.serviceHostedMediaConfig",避免自定义媒体配置导致的兼容性问题
3. 机器人状态与部署验证
- 确认机器人已在坐席的Teams客户端中完成安装(或已部署到坐席所在租户/团队),未安装的机器人无法向用户发起呼叫
- 检查机器人服务是否正常运行,能接收并处理Teams的事件通知(如
callStarted回调) - 验证API请求使用的应用令牌是否有效:通过
https://graph.microsoft.com/beta/me测试令牌权限,确保包含呼叫相关权限
4. 网络与日志排查
- 检查Azure通信服务的监控日志(Azure门户→通信服务→监控→日志),查看是否有呼叫初始化失败的错误记录
- 确认终端应用网络可访问
https://graph.microsoft.com/beta端点,无防火墙或代理拦截 - 测试
callbackUri是否能接收Teams的POST回调请求,部分场景下回调失败会导致呼叫无响应
5. 呼叫流程简化测试
先用最小化请求体发起纯音频呼叫,排除视频配置的干扰:
POST https://graph.microsoft.com/beta/app/calls Authorization: Bearer {应用级令牌} Content-Type: application/json { "@odata.type": "#microsoft.graph.call", "callbackUri": "https://your-public-callback-url.com/calls", "targets": [ { "@odata.type": "#microsoft.graph.invitationParticipantInfo", "identity": { "@odata.type": "#microsoft.graph.identitySet", "user": { "@odata.type": "#microsoft.graph.identity", "id": "坐席的Azure AD对象ID/UPN" } } } ], "mediaConfig": { "@odata.type": "#microsoft.graph.serviceHostedMediaConfig" }, "requestedModalities": ["audio"], "subject": "终端测试呼叫" }
内容的提问来源于stack exchange,提问作者santanu manna
相关产品推荐
相关产品推荐

