You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:05:05