Teams托管媒体Bot未调用Webhook及无法加入会议排查求助
Teams媒体Bot加入会议失败&Webhook未触发排查方案
一、Ngrok与域名配置校验
- 检查Ngrok转发状态:执行
ngrok status命令,确认tcp://0.tcp.in.ngrok.io:12345是否正常映射到localhost:8445,查看是否存在连接超时、转发中断的日志。 - 验证CNAME解析:用
nslookup 0.local.bot命令确认域名解析结果指向0.tcp.in.ngrok.io,避免解析延迟或配置错误导致Teams无法找到Bot服务。 - 核对证书匹配:当前openssl生成的
*.local.bot.example.com证书与实际使用的0.local.bot域名不匹配,会导致TLS握手失败,需重新生成包含*.local.bot的证书并导入MMC个人证书库。
二、Bot服务配置与权限校验
- 检查appsettings参数:确认
CallingEndpoint设置为https://0.local.bot:12345/api/calling(使用Ngrok的TCP端口而非本地8445),MicrosoftAppId、MicrosoftAppPassword与Azure AD应用配置完全一致。 - 确认API权限:确保已添加
OnlineMeetings.ReadWrite.All、Calls.JoinGroupCalls.All、Calls.AccessMedia.All权限,且完成管理员同意(租户级应用需此步骤)。 - 验证本地端口监听:执行
netstat -ano | findstr :8445,确认8445端口被你的Bot进程占用,避免端口冲突或服务未正常启动。
三、会议加入与Webhook触发排查
- 解析JoinCallAsync响应:不要仅依赖HTTP状态码,查看响应体中的
callId、meetingInfo字段,确认会议信息正确,是否包含隐藏的错误提示。 - 开启详细日志:在appsettings中设置
Logging.LogLevel.Default: Debug,查看Bot日志中是否有媒体协商失败、TLS握手错误、请求超时等记录,这是定位未加入会议的核心依据。 - 测试Webhook可达性:用Postman向
https://0.local.bot:12345/api/calling发送模拟的Teams呼叫Webhook请求(参考官方Webhook格式构造请求体),确认本地服务能接收并响应请求,排除Ngrok转发或防火墙拦截问题。 - 核对清单配置:除
supportsCalling: true外,确认devicePermissions包含microphone,validDomains添加0.local.bot,确保Teams客户端能正常与Bot交互。
四、音频获取的关键配置
- 会议加入时指定媒体权限:在
JoinCallAsync的请求体中,设置mediaSettings的audio参数为receiveAudio: true,明确请求接收参会者音频流。 - 检查媒体协商日志:查看Bot日志中的SDP交换记录,SDP参数不匹配会导致媒体流无法建立,即使Bot显示加入会议也无法获取音频。
内容的提问来源于stack exchange,提问作者Bibin
相关产品推荐
相关产品推荐

