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

如何获取Twilio外呼通话费用?解决子通话无费用问题

问题:如何可靠获取Twilio外呼子通话的费用?

背景与问题

我需要实现获取每通通话总费用的功能,目前遇到以下情况:

  • 通话完成后会生成费用,但外呼通话的状态回调中,仅父通话有费用数据,子通话无费用(已在Twilio中配置状态回调URL)
  • 呼入通话的处理逻辑可行:从状态响应体拿到Call SID后,通过client.calls(callId).fetch()获取父通话费用,再用client.calls.list({ parentCallSid: callId })获取子通话费用,最后计算总费用
  • 外呼场景存在问题:父、子通话均处于完成状态,但子通话始终无法获取到费用;测试发现1分钟后可能能拿到费用,但费用生成时机不确定,且不考虑未知时长的超时等待方案

请问项目中该如何处理这个问题?是否需要每日2-3次请求Twilio获取时段内所有通话费用?或者有没有特定的回调/webhook可以利用?


可行解决方案

1. 定时批量拉取(推荐方案)

  • 每日在业务低峰期(比如凌晨、上午)发起2-3次批量查询,调用Twilio的Calls API拉取指定时段内的所有通话记录
  • 使用client.calls.list({ startTimeAfter: '<起始时间戳>', startTimeBefore: '<结束时间戳>' })获取目标时段的通话,通过parentCallSid字段关联父子通话,统一汇总每通主通话的总费用
  • 优势:逻辑简单可靠,能覆盖所有实时回调中遗漏的子通话费用,避免依赖不确定的费用生成时机

2. 配置Twilio费用事件Webhook

  • 在Twilio控制台开启通话费用生成的事件通知Webhook,当子通话的费用计算完成后,Twilio会主动推送相关事件到你的回调URL
  • 收到Webhook通知后,根据Call SID关联对应的父通话,更新总费用数据
  • 优势:实时性较好,无需主动轮询,但需要额外配置Webhook,并且要处理重复通知、网络异常等边界情况

3. 回调+有限次数重试的混合方案

  • 针对外呼子通话,在状态回调触发时记录下子通话的Call SID,加入待查询队列
  • 对队列中的Call SID采用**固定短间隔(如30秒)、有限次数(如3次)**的重试机制,尝试调用client.calls(sid).fetch()获取费用
  • 若重试失败,则将该记录标记为待批量处理,后续由定时拉取任务统一处理
  • 优势:平衡实时性和可靠性,减少批量拉取的处理压力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:19