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

如何检测来电者突然挂断时Twilio呼入电话的结束时间与状态

解决方案

当然可行,Twilio原生支持在通话生命周期的关键节点(包括来电者突然挂断时)触发状态回调,将通话结束时间、状态等核心参数通过POST请求发送到你指定的webhook地址。以下是具体操作步骤:

1. 配置Twilio号码的状态回调

  • 登录Twilio控制台,找到你的目标接收号码,进入号码配置页面。
  • 在页面中找到Status Callback字段,填入你的webhook服务地址(测试阶段可使用ngrok等工具暴露本地服务,确保地址能被公网访问)。
  • 确认请求方法设置为POST(Twilio默认选项,若已修改需改回)。
  • 保存配置,此时Twilio会在通话状态变化时向该地址发送请求。

2. 接收并解析回调参数

当来电者突然挂断时,Twilio会向你的webhook发送POST请求,携带以下核心参数:

  • CallStatus:通话状态,来电者挂断时该值为completed(正常结束的统一标识)。
  • EndTime:通话结束的ISO格式时间(例如2024-05-20T14:30:00Z),直接对应挂断时刻。
  • CallSid:唯一通话ID,用于关联该通话的所有记录。
  • CallDuration:通话持续时长(单位:秒),可辅助验证结束时间的准确性。

以下是一个简单的Node.js(Express)接收示例:

const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));

app.post('/twilio-status-callback', (req, res) => {
  // 提取关键参数
  const { CallStatus, EndTime, CallSid, CallDuration } = req.body;

  // 处理业务逻辑:比如写入数据库、触发通知等
  if (CallStatus === 'completed') {
    console.log(`通话 ${CallSid} 已挂断,结束时间:${EndTime},时长:${CallDuration}秒`);
  }

  // 必须返回200 OK给Twilio,否则会触发重试
  res.sendStatus(200);
});

app.listen(3000, () => console.log('服务运行在3000端口'));

3. 测试与验证

  • 使用测试号码拨打你的Twilio号码,接通后主动挂断,检查你的webhook服务是否收到POST请求。
  • 登录Twilio控制台,进入Logs > Calls,找到对应通话记录,查看Status Callback Events标签页,可确认请求的发送状态、参数详情及响应结果。

注意事项

  • Twilio的状态回调会在多个状态节点触发(如ringing、in-progress),需通过CallStatus === 'completed'过滤出挂断事件。
  • 确保你的webhook服务在15秒内返回响应,否则Twilio会重试请求(最多重试3次)。若业务逻辑复杂,建议先返回200,再异步处理后续操作。
  • 建议启用Twilio的请求签名验证,确保回调请求来自Twilio,避免伪造请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:35:07