修改进行中的Twilio通话时出现资源未找到错误求助
解决Twilio AU1区域实时通话修改TWiML URL时的404错误
针对你遇到的「通话资源未找到」(错误码20404)问题,可从以下几个方向排查解决:
1. 验证API请求的区域路由正确性
虽然代码中指定了region: 'au1'和edge: 'sydney',但需确认Serverless函数的部署区域与通话所在的AU1区域匹配。若函数部署在其他区域,可能导致API请求被路由到错误的Twilio端点。
- 可直接构造AU1区域的API端点进行测试:向
https://au1.twilio.com/2010-04-01/Accounts/你的账户SID/Calls/目标通话SID.json发送PUT请求,携带Url和Method参数,确认是否能正常访问资源。
2. 核对Call SID的准确性
- 检查
event.callSID传递的值是否与通话日志中的SID完全一致,注意大小写和字符完整性,避免传递过程中出现截断或拼写错误。 - 确认该Call SID属于代码中指定的
accountSid对应的账户,禁止跨账户操作通话资源。
3. 确认通话状态与权限
- 目标通话必须处于**进行中(in-progress)**状态,已结束的通话无法修改TWiML URL,会直接返回404错误。
- 检查Serverless函数使用的Twilio凭证(Account SID和Auth Token)是否具备修改通话资源的权限,确保没有被权限策略限制。
4. 调整Twilio客户端初始化方式
尝试绕过context.getTwilioClient(),直接初始化客户端并明确指定区域配置,避免继承环境默认配置导致的路由错误:
exports.handler = function(context, event, callback) { const Twilio = require('twilio'); const client = new Twilio(context.ACCOUNT_SID, context.AUTH_TOKEN, { region: 'au1', edge: 'sydney' }); // 先打印Call SID确认正确性 console.log('Target Call SID:', event.callSID); client.calls(event.callSID) .update({method: "POST", url: "https://myservice-20xxx.twil.io/new-url"}) .then(call => { console.log('URL switching worked'); callback(null, true); }) .catch(err => { console.log('URL switching did not work', err); callback(err); }); };
注意:修改后的代码添加了Call SID打印步骤,同时将
callback放在异步操作的回调中,确保函数等待API请求完成后再返回结果,避免异步操作未完成就结束函数执行。
内容的提问来源于stack exchange,提问作者Santo
相关产品推荐
相关产品推荐

