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

使用Twilio发起外呼时无法通过URL播放自定义MP3音频的解决方法

解决Twilio通话无法播放指定URL音频的问题

核心问题

你当前代码中url参数直接指向了MP3音频文件,但Twilio要求该URL返回TwiML指令(XML格式),用于告诉系统执行播放音频等操作,而非直接返回音频文件。这就是你听到默认语音的原因。

修复步骤

  • 替换URL为返回TwiML的端点
    你需要搭建一个HTTP服务端点,返回包含<Play>标签的TwiML。以下是用Express实现的示例:

    // 先安装依赖:npm install express twilio
    const express = require('express');
    const twilio = require('twilio');
    const app = express();
    
    // 解析Twilio的请求体
    app.use(express.urlencoded({ extended: false }));
    
    // 处理Twilio的呼叫请求,返回TwiML
    app.post('/handle-call', (req, res) => {
      const voiceResponse = new twilio.twiml.VoiceResponse();
      // 指定要播放的音频URL
      voiceResponse.play('https://demo.twilio.com/docs/classic.mp3');
      
      res.type('text/xml');
      res.send(voiceResponse.toString());
    });
    
    app.listen(3000, () => {
      console.log('服务运行在3000端口');
    });
    

    之后将client.calls.create中的url替换为该端点的公开HTTPS地址:

    const call = await client.calls.create({
        url: 'https://你的公开域名/handle-call', // 替换为实际端点地址
        to: number,
        from: process.env.TWILIO_NUMBER,
        timeout: 120
    });
    
  • 确保Twilio能访问你的端点

    • 必须使用公开可访问的HTTPS地址,Twilio不支持未加密的HTTP(本地测试可使用ngrok等工具临时暴露服务)。
    • 检查端点响应速度,确保在15秒内返回内容(Twilio对URL请求的超时时间默认是15秒,你设置的timeout:120是呼叫的超时时间,两者无关)。
    • 避免使用自签名SSL证书,Twilio只信任受CA机构颁发的有效证书。
  • 快速验证方案
    可以使用Twilio控制台的「TwiML Bin」功能创建一个简单的TwiML:

    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
      <Play>https://demo.twilio.com/docs/classic.mp3</Play>
    </Response>
    

    将TwiML Bin生成的URL填入client.calls.create的url参数中,测试是否能正常播放音频,以此排除自身服务的问题。

内容的提问来源于stack exchange,提问作者DevMan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:15:18