如何在Twilio未接/失败通话时发送与语音邮件相同的消息?
实现Twilio未接听/失败通话时发送语音邮件内容的消息
嘿,这个需求完全可以搞定!结合Twilio的通话状态回调和消息API就能轻松实现,下面是具体的实现思路和代码示例:
核心思路
当通话结束时,Twilio会向你预先设置的状态回调URL发送请求,携带通话的状态信息。我们可以在这个回调接口里判断通话是否是未接听、失败或占线状态,然后调用Twilio的消息API,把语音邮件对应的文本内容发送给目标号码。
具体步骤
1. 设置通话的状态回调URL
在你发起语音通话的代码里,指定StatusCallback参数,告诉Twilio通话结束后要通知哪个接口:
// 示例:发起通话时指定状态回调 const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN); client.calls.create({ url: 'http://your-server.com/voice', // 你的语音处理逻辑URL(比如播放语音邮件) to: '+1234567890', from: '+0987654321', statusCallback: 'http://your-server.com/call-status', // 状态回调URL statusCallbackMethod: 'POST' }) .then(call => console.log(call.sid));
2. 编写状态回调接口处理逻辑
在你的服务器上创建一个接口,接收Twilio的状态通知,判断通话状态后发送消息:
const express = require('express'); const twilio = require('twilio'); const app = express(); app.use(express.urlencoded({ extended: true })); // 处理通话状态回调 app.post('/call-status', (req, res) => { const callStatus = req.body.CallStatus; const targetNumber = req.body.To; // 替换成你的语音邮件对应的文本内容 const voicemailContent = "嗨,我是你的联系人,没能及时接到你的电话。如果有急事可以给我发消息,或者稍后再打过来哦!"; // 匹配需要发送消息的通话状态:未接听、失败、占线 const triggerStatuses = ['no-answer', 'failed', 'busy']; if (triggerStatuses.includes(callStatus)) { // 初始化Twilio客户端 const twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN); // 发送短信(也可以换成WhatsApp等其他渠道) twilioClient.messages.create({ body: voicemailContent, from: process.env.TWILIO_PHONE_NUMBER, to: targetNumber }) .then(msg => console.log(`消息已发送,SID: ${msg.sid}`)) .catch(err => console.error('发送消息出错:', err)); } // 给Twilio返回200确认接收 res.sendStatus(200); }); app.listen(3000, () => console.log('服务器运行在端口3000'));
3. 额外优化:动态获取语音邮件内容
如果你的语音邮件是用户录制的,还可以用Twilio的语音转文字功能,把录音转换成文本再发送:
// 在回调接口里,如果有录音SID,可以获取转写内容 if (req.body.RecordingSid) { twilioClient.recordings(req.body.RecordingSid) .fetch({Transcribe: true}) .then(recording => { const transcribedText = recording.TranscriptionText; // 用转写的文本发送消息 twilioClient.messages.create({ body: `刚才的语音邮件内容:${transcribedText}`, from: process.env.TWILIO_PHONE_NUMBER, to: targetNumber }); }); }
注意事项
- 确保你的Twilio号码拥有发送对应消息渠道的权限(比如短信、WhatsApp)
- 通话状态的完整取值可以参考Twilio官方定义,除了上面的几个,还有
completed(已接听)等,按需调整判断逻辑 - 状态回调接口需要公网可访问,本地开发可以用ngrok之类的工具做内网穿透
内容的提问来源于stack exchange,提问作者Ayyappan Subramanian
相关产品推荐
相关产品推荐

