如何检测来电者突然挂断时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
相关产品推荐
相关产品推荐

