如何在Twilio中精准捕获<Dial>号码接听后的语音通话时长?
实现指定号码接听后的通话时长统计方案
当然有可行的方案啦!针对你想要只统计
1. 修改TwiML,给目标号码添加专属状态回调
你需要给statusCallback属性,这样Twilio只会在这个特定号码的呼叫状态变化时,向你指定的URL发送通知。同时别忘了指定要监听的事件:answered(接听时)和completed(挂断时),这两个事件是我们计算时长的关键。
修改后的TwiML代码示例:
<Response> <Dial> <Number statusCallback="https://your-public-server.com/number-call-status" statusCallbackEvent="answered completed" >+01234567890</Number> </Dial> </Response>
2. 后端处理回调请求,计算时长
当Twilio向你的回调URL发送请求时,会携带一堆有用的参数,我们重点关注这几个:
CallStatus:呼叫状态,answered代表这个号码刚接听,completed代表通话结束StartTime:当状态是answered时,这个值就是该号码接听的UTC时间EndTime:当状态是completed时,这个值是通话结束的UTC时间CallSid:这个号码对应的呼叫唯一ID,用来关联接听和挂断事件
后端逻辑可以这么写:
- 收到
CallStatus=answered的请求时,把CallSid和对应的StartTime存到你的数据库或者缓存(比如Redis)里 - 收到
CallStatus=completed的请求时,用CallSid找到之前存的StartTime,用EndTime减去StartTime,得到的就是这个指定号码接听后的精准通话时长
3. 额外注意事项
- 你的回调URL必须是公网可访问的,不然Twilio发不了请求哦
- Twilio返回的时间是UTC时区,记得根据你的需求转换为本地时区
- 如果
里有多个 ,可以给每个号码设置不同的回调,或者在同一个回调里通过 To参数(就是号码本身)区分,这样就能分别统计每个号码的接听时长啦
这样就能精准捕获到你指定的那个号码接听后的通话时长,完全不会被其他设备的接听事件干扰~
内容的提问来源于stack exchange,提问作者S De Silva
相关产品推荐
相关产品推荐

