Microsoft Teams外呼钩子需求:读取号码并调用API验证
Teams外呼钩子实现:拦截呼叫并验证密钥方案
针对你需要在Teams用户发起外呼时触发钩子、提取号码密钥验证并控制呼叫的需求,Graph API和Azure Bot确实无法直接满足——Graph API侧重呼叫的管理而非拦截触发,Bot则主要用于呼叫中的交互逻辑,而非初始呼叫的路由控制。亲测可行的方案是基于**Direct Routing + 自定义Web服务(如Azure Functions)**来实现,具体步骤如下:
核心实现路径
Direct Routing是Teams提供的自定义呼叫路由机制,允许你将Teams的呼叫流量导向自己的服务,从而在呼叫发起阶段介入逻辑处理。
1. 配置Direct Routing基础环境
- 在Teams Admin Center中创建Trunk(中继),将Trunk的呼叫控制端点指向你的自定义Web服务地址(比如Azure Functions的HTTP触发器URL)。
- 配置语音路由策略,将需要拦截的外呼号码范围关联到这个Trunk,确保目标外呼流量会流经你的服务。
2. 拦截呼叫请求并提取密钥
当用户发起外呼时,你的Web服务会收到来自Teams的SIP INVITE请求,请求中的To头或Request-URI字段会包含完整的目标号码(如555-555-5555#123456)。你可以通过以下逻辑提取密钥:
# 示例:Python中提取#后的密钥 full_number = "555-555-5555#123456" if "#" in full_number: target_number, key = full_number.split("#", 1) else: # 无密钥的情况,可根据业务逻辑处理 target_number = full_number key = None
3. 验证密钥并控制呼叫路由
- 调用你的验证API,传入提取到的密钥。
- 如果验证通过:将SIP请求转发到真实的目标号码(即去掉#和密钥的部分),可以通过向Teams返回SIP 302 Redirect响应,指定正确的目标URI。
- 如果验证失败:返回SIP 403 Forbidden响应,同时可以通过Teams Graph API向发起呼叫的用户发送错误提示消息:
# 示例:Graph API发送错误消息(POST请求) POST https://graph.microsoft.com/v1.0/users/{userId}/chats/{chatId}/messages Content-Type: application/json { "body": { "content": "呼叫验证失败:密钥无效,请检查后重试。" } }
4. 优化用户体验
除了返回SIP错误,还可以在自定义Teams应用中监听呼叫失败事件,弹出内嵌的错误提示卡片,让用户更直观地了解失败原因。
关键注意事项
- 实时性要求:验证API的响应必须在500ms内完成,否则会导致Teams呼叫超时。
- SIP兼容性:部分场景下号码中的#可能会被转义为
%23,解析时需要处理这种编码情况。 - 权限配置:Direct Routing需要全局管理员权限配置,Graph API发送消息需要
ChatMessage.Send应用权限。
内容的提问来源于stack exchange,提问作者Jay Williams
相关产品推荐
相关产品推荐

