调用绑定Azure Function Webhook的Twilio号码时始终占线的问题
解决Twilio绑定Azure Function后拨打电话忙线的问题
核心排查与修复方向
Twilio返回忙线提示,本质是Webhook未返回符合要求的200 OK状态码+正确格式的TwiML响应。结合你从.NET Core 3.2升级到.NET 7/8的背景,重点处理以下几点:
1. 函数授权配置冲突
你的Function设置了AuthorizationLevel.Function,但Twilio发起的Webhook请求不会自动携带函数密钥,导致请求被拒绝(返回401/403),Twilio因此判定线路忙。
- 解决方案:将HttpTrigger的授权级别改为
AuthorizationLevel.Anonymous,或者在Twilio后台配置Webhook URL时追加函数密钥(格式:https://<你的函数域名>/api/AnswerPhone?code=<函数密钥>)
2. TwiML响应兼容问题
升级.NET版本后,原有的TwiMLResult封装可能存在序列化或响应头设置异常,导致Twilio无法解析响应。可以替换为手动构建响应,直接控制输出:
[Function("AnswerPhone")] public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req) { var voiceResponse = new VoiceResponse(); voiceResponse.Say("HELLO"); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/xml"); await response.WriteStringAsync(voiceResponse.ToString()); return response; }
3. 查看函数执行日志
登录Azure门户进入你的Function App,在监控->日志中确认:
- Twilio的请求是否正常进入函数
- 函数执行时是否抛出异常(如序列化错误、依赖缺失)
- 响应状态码是否为200
4. 直接验证函数响应
用Postman或curl发送POST请求到函数URL,检查返回结果:
- 状态码必须是200 OK
- 响应内容必须是标准TwiML格式:
<Response> <Say>HELLO</Say> </Response>
内容的提问来源于stack exchange,提问作者antland01
相关产品推荐
相关产品推荐

