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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:38