You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Twilio API外呼播放自定义音频并移除默认语音提示的问题

解决Twilio呼叫后播放默认语音邮件提示的问题

看起来你遇到的问题是因为TwiML里的<Dial>动词导致的——让我帮你拆解一下原因和解决方案:

问题根源

你当前的TwiML中包含<Dial>标签,它的作用是让Twilio把当前的呼叫转接给<Number>里指定的号码(也就是请求参数里的Caller号码)。当这个转接呼叫无法接通时,Twilio会触发默认的语音邮件提示流程,等这个流程结束后才会执行后面的<Play>动词,这就是你听到默认提示的原因。

而你的实际需求是呼叫目标用户后直接播放自定义音频,完全不需要转接操作,所以<Dial>在这里是多余的,甚至是错误的。

解决方案:移除<Dial>,直接返回<Play>

修改你生成TwiML的代码,删掉所有和<Dial>相关的逻辑,只保留<Play>动词即可:

// 初始化Play动词,指向你的自定义音频文件
Play play = new Play.Builder("demo-play.wav")
        .loop(1)
        .build();

// 直接构建包含Play的VoiceResponse
VoiceResponse twiml = new VoiceResponse.Builder()
        .play(play)
        .build();

return twiml.toXml();

修改后生成的TwiML会是这样:

<Response>
    <Play loop="1">https://aws.xxx.H1OAOec30bbc5-bc3a-4251-a27c-2e4e41b386061521208641292FOIZ1.wav</Play>
</Response>

这样调整后,当目标用户接听Twilio的呼叫时,会直接播放你指定的自定义音频,不会再出现默认的语音邮件提示。

如果你确实需要使用<Dial>(可选)

如果你的业务逻辑里确实需要转接呼叫,同时还要播放音频,那可以调整顺序:比如先播放音频,再执行转接。示例代码如下:

Play play = new Play.Builder("demo-play.wav")
        .loop(1)
        .build();

// 定义要转接的目标号码
Number number = new Number.Builder("要转接的号码")
        .build();

Dial dial = new Dial.Builder()
        .number(number)
        .build();

VoiceResponse twiml = new VoiceResponse.Builder()
        .play(play) // 先播放音频
        .dial(dial) // 再执行转接
        .build();

return twiml.toXml();

这种情况下,用户会先听到你的自定义音频,之后Twilio才会尝试转接呼叫,也不会触发默认提示。

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

火山引擎 最新活动