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

如何在Twilio中精准捕获<Dial>号码接听后的语音通话时长?

实现指定号码接听后的通话时长统计方案

当然有可行的方案啦!针对你想要只统计标签里指定接听后的通话时长(而非从首个设备接听就开始算)的需求,我们可以结合Twilio的**状态回调(Status Callback)**加一点后端逻辑来实现,具体操作如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:12:39