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

Twilio非手机号码语音信箱设置异常:20秒后收到空回拨

Twilio语音信箱无内容回拨问题排查及后续自愈情况

我最近在给一个非Twilio手机号的Twilio号码配置语音信箱,整体功能都能正常运行——可以拨打、留语音留言,之后也能收到带转录内容和录音链接的短信/邮件通知,但有个奇怪的问题:每次留完言挂断后大约20秒,我会收到一个无内容的空回拨,这个回拨没有任何语音提示,过10-15秒后才会收到正常的通知。

我按照以下流程做了测试:

  • 用我的手机拨打这个Twilio号码
  • 手机拒接来电(虽然TWIML里设置了timeout=1,但呼叫并没有停止)
  • 留语音留言
  • 挂断或按按键结束留言
  • 约20秒后收到空回拨
  • 10-15秒后正常收到短信/邮件通知

我怀疑问题出在TWIML 1或TWIML 2的配置里,但一直没定位到具体原因。


相关配置代码

TWIML 1(呼叫转接逻辑)

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial action="https://-->TWIML 2" timeout="1" callerId="{{To}}" >
<Number>##CELL##</Number>
</Dial>
</Response>

TWIML 2(语音留言逻辑)

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say> Please leave a message </Say>
<Record action="https://TWIML 3" method="POST" maxLength="120" playBeep="false" trim="do-not-trim" transcribe="true" transcribeCallback="https://FUNCTION 1" />
<Say>I did not receive a recording.</Say>
</Response>

TWIML 3(留言结束提示)

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Bi</Say>
</Response>

FUNCTION 1(通知发送逻辑)

exports.handler = function(context, event, callback) { 
var client = context.getTwilioClient(); 
const mailgun = require('mailgun-js')({apiKey: context.MG_KEY, domain:context.MG_DOMAIN}); 
var async = require('async'); 
var sendSMS = function(callback){ 
let dataSMS = { to: '##CELL##', from: event.To, body: 'Voicemail from:\n ' + event.From + '\n\nText:\n' + event.TranscriptionText + '\n\n---MSG Recording---\n' + event.RecordingUrl }; 
client.messages.create(dataSMS).then(function(response){ 
console.log('N [T1]: ' + response.status); 
return callback(null, response); 
}).catch(function(err){ 
console.log('T2: ' + err); 
}); 
}; 
var sendEmail = function(callback){ 
let dataMG = { to: '@@TO@@', from: '@@FROM@@', subject: 'Voicemail: ' + event.From, text: event.TranscriptionText + '\n\n--- MSG Recording --->\n' + event.RecordingUrl }; 
console.log('-------- Sending Mail (Mailgun API)---->' + dataMG.to); 
mailgun.messages().send(dataMG, function (error, body) { 
console.log('N [MB] Mailgun Body :' + body); 
return callback(null, body); 
}); 
}; 
var waitTime = function(callback){ 
setTimeout(function() { return callback(200); }, 1000); 
}; 
var asyncTasks = [sendSMS, sendEmail, waitTime]; 
async.parallel(asyncTasks, function(err, result){ 
console.log('--------------------------DONE--------------------------' + result[0] + result[1]); 
callback(null, 200); 
}); 
}; 

问题解决情况

让人意外的是,没有修改任何配置的情况下,几天后这个空回拨的问题自行消失了,语音信箱的所有功能都正常运行,不再出现异常回拨。


配置细节说明

这个语音信箱系统的功能和注意点整理如下:

  • 核心功能:将语音留言转录为文本,同时发送包含录音链接的短信(MMS),并通过Mailgun发送邮件副本
  • 付费提示:Twilio的语音转录服务需要额外付费,使用前请确认计费规则
  • 运维注意:录音文件需要定期清理,避免占用过多存储空间或产生额外费用
  • 参数说明:TWIML 1中的timeout参数控制的是呼叫转接时的响铃时长,这里设置为1秒
  • 依赖说明:FUNCTION 1依赖async库来并行执行短信、邮件发送和等待任务,可根据需求调整任务逻辑或依赖库

内容的提问来源于stack exchange,提问作者Who's there... Me

火山引擎 最新活动