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

修改进行中的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:08:19