Twilio顺序呼叫转接、录音发邮件、语音信箱集成实现咨询
Twilio 多号码顺序呼叫+录音邮件推送+语音信箱触发实现方案
实现逻辑
- 原静态TwiML会按顺序执行所有节点,无法判断前序呼叫是否接通,必须借助Twilio Function实现动态逻辑控制
- 每一轮呼叫通过*
标签的 action属性*指定回调地址,判断呼叫结果后决定后续走向 - 录音生成后通过邮件服务(推荐Twilio集成的SendGrid)将录音URL推送至指定邮箱
- 三个号码全部未接通时,直接重定向到你已开发完成的语音信箱Function即可
代码示例
主呼叫流程Function代码(Node.js)
exports.handler = function(context, event, callback) { const twiml = new Twilio.twiml.VoiceResponse(); // 配置参数 const targetNumbers = ['+1123456', '+1234567', '+1234587']; // 按顺序替换成你的A/B/C号码 const voicemailFunctionUrl = '你的语音信箱Function访问地址'; const notifyEmail = '指定接收录音的邮箱地址'; // 从回调参数获取当前呼叫到第几个号码,默认从第0个开始 const currentDialIndex = event.currentDialIndex ? parseInt(event.currentDialIndex) : 0; // 上一轮呼叫的结果 const dialCallStatus = event.DialCallStatus || ''; // 上一轮呼叫生成的录音URL const recordingUrl = event.RecordingUrl || ''; // 先处理上一轮呼叫的结果 if (dialCallStatus === 'completed' && recordingUrl) { // 上一轮呼叫已接通,触发邮件发送 sendEmail(notifyEmail, `通话录音(${new Date().toLocaleString()})`, `录音下载地址:${recordingUrl}.mp3`); twiml.hangup(); return callback(null, twiml); } // 所有号码都呼叫过了,跳转语音信箱 if (currentDialIndex >= targetNumbers.length) { twiml.redirect(voicemailFunctionUrl); return callback(null, twiml); } // 呼叫当前序号的号码 twiml.say(`正在转接至第${currentDialIndex+1}位联系人`); const dial = twiml.dial({ record: 'record-from-answer', timeout: 10, hangupOnStar: true, // 回调地址指向当前Function,带上当前呼叫序号参数 action: `/路径/当前Function名称?currentDialIndex=${currentDialIndex + 1}`, method: 'POST' }); dial.number(targetNumbers[currentDialIndex]); return callback(null, twiml); }; // 邮件发送方法,可根据你用的邮件服务修改 function sendEmail(to, subject, content) { // 这里以SendGrid为例,你也可以换成其他邮件服务的SDK const sgMail = require('@sendgrid/mail'); sgMail.setApiKey(process.env.SENDGRID_API_KEY); // 在Twilio Function环境变量中配置你的SendGrid密钥 const msg = { to: to, from: '发件人邮箱(需在SendGrid中验证)', subject: subject, text: content, }; sgMail.send(msg); }
语音信箱适配修改
你已开发的语音信箱Function只需在录音完成的回调逻辑中,复用上面的sendEmail方法,将语音信箱的录音URL发送到指定邮箱即可,原有留言流程无需修改。
注意事项
- 需要在Twilio控制台的Function配置中,添加
@sendgrid/mail依赖,以及配置SENDGRID_API_KEY环境变量 - 发件人邮箱需要先在SendGrid中完成域名或单邮箱验证,否则会发送失败
- 把Twilio号码的入呼 webhook 指向上面的主呼叫流程Function地址,请求方式选POST
内容的提问来源于stack exchange,提问作者Karthick Selvaraj
相关产品推荐
相关产品推荐

