通话记录
Voice > Legs 下的呼叫段日志列出工作区发起或接收的每条连接,按时间从新到旧排列。一次通话可以包含多个呼叫段,例如来电连接和转接连接。每条记录都是一条通话详单 (CDR),包括响铃超时或被拒绝的连接。用它来查看时长、最终的 SIP 响应和费用。
Bird 在呼叫段结束时写入每条记录,因此日志中的每个条目都有最终结果。旁边的 Live 标签页显示仍在进行中的呼叫段。
要查看完整交互,请打开 Voice > Calls。一次通话将相关的呼叫段和参与方分组在一起。在关联分析时使用 Call ID,在排查单条连接时使用 Leg ID;它们标识的是不同的记录。
通话列表
每行是一个呼叫段。一次通话包含多个呼叫段时,会显示多行:
| 列 | 显示内容 |
|---|---|
| Status | 呼叫段的结束方式(参见状态说明) |
| From | 主叫号码,即您的设备呈现的来电显示号码 |
| To | 被叫号码 |
| Direction | 您的设备发起的呼叫段为 Outbound,到达您号码的呼叫段为 Inbound |
| Duration | 呼叫段的总时长,从 Bird 接收到挂断 |
| Started | Bird 接收该呼叫段的时间 |
列表分页显示,每页 25 个呼叫段。选择任意行可打开呼叫段记录。
实时通话
Live 标签页列出当前正在进行的呼叫段,并显示计数,无需打开即可查看进行中的数量。正在进行的呼叫段有两种状态之一:
| 状态 | 当前状况 |
|---|---|
| Ringing | 一个正在进行的呼叫尝试正在等待接听;这并不确认目的地已振铃 |
| In progress | 对方已接听,通话已接通 |
列与呼叫段日志一致,但 Elapsed 替代了 Duration。已接通的呼叫段从接听时开始计时,正在振铃的呼叫段从开始时计时。标签页每隔几秒刷新一次。呼叫段结束后,会连同最终结果移入呼叫段日志。
搜索与筛选
页面顶部提供号码搜索和筛选条件,两者可组合使用:状态筛选加日期范围可缩小到同时匹配两者的呼叫段。
按号码搜索。 搜索框将号码与呼叫段的任一端进行匹配,一次查询即可找到拨入和拨出的呼叫段。
方向。 按呼出或呼入呼叫段筛选。
状态。 按 answered、no answer、failed、rejected 或 unknown 之一进行筛选。各状态的定义见状态说明。在 Live 标签页上,可选项为 ringing 和 in progress。
日期。 在通话记录中,选择预设范围(最近 24 小时、7 天或 30 天)或在日历上自定义范围。
本月用量
月度摘要包含三个卡片,统计当前 UTC 日历月的数据:
| 卡片 | 统计内容 |
|---|---|
| Legs | 当月已完成的呼叫段记录,包括未接听和被拒绝的 |
| Total duration | 每个呼叫段的完整时长累加,从 Bird 接收到挂断 |
| Billable time | 每个呼叫段的接听时长累加 |
总时长与计费时长之差即为未接听的振铃时间。未接听的呼叫段没有计费时长。
每个目的地费率会将计费时长按其计费增量取整。定价详情请参见费用与计费。
无论您如何筛选列表,这些卡片始终统计整个月的数据。
状态说明
日志中的呼叫段以下列结果之一结束:
| 状态 | 发生了什么 |
|---|---|
| Answered | 对方已接听。计费时长从接听到挂断 |
| No answer | 尝试超时且未获接听;这并不能证明目的地电话已振铃 |
| Rejected | 通话被拒绝,未接通 |
| Failed | 通话已尝试但未成功,SIP response 是返回的信息 |
| Unknown | 无法确定结果,例如始终没有收到最终响应 |
Rejected 涵盖两种拒绝情况,通过拒绝原因加以区分。一种是 Bird 在运营商介入之前拒绝了通话,此时原因会指明未通过的检查项;另一种是远端直接拒绝了通话,此时 SIP response 携带其应答且没有原因。来电被其所拨号码拒绝时同样显示为 Rejected 且无原因,因为它未触发任何检查:其 Inbound route 说明了该号码的设置。参见被拒绝的通话。
达到平台 4 小时通话时长上限的通话显示为 Answered,因为通话已接通,随后在达到上限时结束。计费时长从接听时算起,到 Bird 挂断时为止。如果通话执行了序列,其时间线会将呼叫段的结束原因显示为 Time limit reached。
Failed 不是拒绝。它表示通话已尝试但未成功:忙线号码显示为 Failed,运营商响应为 486;未分配的号码显示为 Failed,响应为 404。
如果您通过自己的工具读取这些值,请匹配您要处理的值,将其他值视为您未处理的状态而非错误。列表中还包含 busy 和 canceled,保留用于送达到您自有号码的来电。两者目前都未启用,相关结果均报告为 failed。
查看通话详情
打开一个呼叫段可查看 Bird 关于该连接的记录:
| 字段 | 说明 |
|---|---|
| Status | 呼叫段的结果(参见状态说明)。被 Bird 拒绝的呼叫段还会显示原因及处理方法 |
| SIP response | 呼叫段的最终 SIP 代码,例如 200 或 486。被 Bird 拒绝的呼叫段携带 503,无运营商参与 |
| From / To | 双方号码,均可复制 |
| Inbound route | 在来电中,为该号码选定的路由,例如中继、转发、序列或拒绝。可链接到该号码 |
| Trunk | 通话进入或送达的 SIP 中继,在多个站点共享一个工作区时很有用 |
| Started | Bird 接收该呼叫段的时间 |
| Answered | 呼叫段被接听的时间,或 Not answered |
| Ended | 呼叫段被拆除的时间 |
| Leg ID | 该连接记录自身的 ID(vcl_…)。可配合 GET /v1/voice/legs/{leg_id} 使用,也可在联系支持时引用。 |
| Call ID | 同一通话的所有呼叫段共享此 ID(vcs_…)。使用 call_id 筛选器查找相关呼叫段。转接的通话有两个呼叫段共享同一个 Call ID。 |
| Billing | 计费时长、总时长,以及呼叫段在计费后的费用 |
Inbound route 出现在来电上,记录所选的路由。被拒绝通话上的中继路由表示通话未到达有效的接听端。接收通话介绍了各路由方式及其各自记录的内容。
被拒绝的通话
被拒绝的通话是被拒绝而非接通的通话,由两种不同的情况导致。
Bird 在运营商介入之前拒绝了通话。 在外呼之前,Bird 会检查来电显示、目的地、账户限制和钱包余额,并拒绝未通过其中任何一项检查的通话。您的电话系统收到 SIP 503,而经过身份验证的通话记录则保存了具体原因。这可以防止未经身份验证的呼叫方获取账户详情。打开该通话可查看原因以及指向相关设置的链接。
被叫号码拒绝了呼叫。 如果来电拨打的号码设置为拒接,或该号码没有自己的路由而工作区默认路由也是拒接,则该呼叫被拒绝且不附带任何原因:它没有未通过我们的任何检查。Inbound route 字段会说明这一点。接收通话详细介绍了这些拒绝情况。
以下原因属于第一种情况。它们既适用于来电也适用于去电,因为账户限制和钱包在两种方向上都会被检查。
您可以修复的原因
| 原因 | 发生了什么 | 处理方式 |
|---|---|---|
source_not_allowed | 呼叫的来源地址不在中继的 IP 允许列表中 | 将您的电话系统发送呼叫时使用的地址添加到中继的 IP 允许列表中 |
caller_id_not_verified | From 头中的号码既不是符合条件的 Bird 号码,也不是此工作区中已验证的外部来电显示号码 | 使用符合条件的 Bird 号码,或验证外部号码 |
destination_not_enabled | 您的工作区未启用拨打该国家的功能 | 在目的地下启用该国家/地区 |
insufficient_balance | 您的钱包余额不足以支付该通话,因此 Bird 在发起前就拒绝了通话 | 充值或启用自动充值,避免余额不足中断通话 |
daily_spend_exceeded | 该通话会使工作区超出每日语音支出限额;如果是去电,也可能超出工作区为被叫国家/地区设置的限额 | 等待限额在下一个 UTC 日开始时重置,或在 Voice > Spend limit 下提高限额,也可在 Voice > Destinations 下提高该国家/地区的限额,但不能超过组织的上限 |
concurrent_calls_exceeded | 正在进行的通话数已达到账户允许的上限 | 等待某个通话结束,或在 Billing and payments 下升级 Voice 套餐以提高上限 |
calls_per_second_exceeded | 您发起新通话的速率超出了账户允许的上限 | 降低拨号速率后重试。立即重试会得到相同的响应。更高的 Voice 套餐可提高每秒呼叫数上限。 |
number_ownership_not_verified | 您已购买此号码,但号码所属国家尚未接受证明您拥有该号码的文件 | 按号码的 ownership 字段要求完成操作,然后重新发起通话 |
外呼活动拨号器可能在远未达到并发通话上限时就触发 calls_per_second_exceeded,因此在做任何更改之前请先确认您收到的是哪一种。
Bird 为您解决的原因
这些问题在 Bird 侧。请联系支持并提供记录中的 Leg ID:
| 原因 | 发生了什么 |
|---|---|
routing_not_configured | 工作区的路由仍在挂载中,这在新的语音配置完成之前属于正常现象 |
no_route_found | 路由已挂载,但未覆盖您拨打的号码。请携带 Leg ID 联系支持以检查路由 |
destination_blocked | Bird 的路由配置阻止了对该目的地的呼叫 |
call_not_permitted | Bird 无法为您的账户完成该呼叫,因此拒绝了呼叫,而非在未知条件下发起 |
拒绝详情解读
将状态与拒绝原因结合查看:
- Rejected 且有拒绝原因。 Bird 拒绝了通话,拒绝原因会指出未通过的检查项。
SIP response为您的电话系统收到的503。根据该原因对应的解决方法,处理账户或路由问题。对于去电,该503携带X-BIRD-CALL-ID头,其中包含记录的 Leg ID,因此无需匹配时间和号码即可将拒绝响应关联到对应记录。 - 无拒绝原因的 Rejected。 在去电中,远端直接拒绝了通话,
SIP response携带其代码。在来电中,被叫号码拒绝了通话,Inbound route 说明了该号码的设置。 - Failed。 通话已尝试但未成功,
SIP response包含返回的代码。486表示忙线,404表示号码未分配。这通常指向号码本身的问题,而非您的配置。
Bird 完全无法接受的通话会在记录创建之前就被拒绝,因此不会出现在日志中。语音故障排查介绍了这些通话的处理方式。
导出记录
在仪表盘之外使用这些记录的四种方式:
- 导出 CSV。 Leg log 标签页上的 Download CSV 可跨页导出符合当前筛选条件的记录,最多 10,000 个呼叫段。所选记录超过上限时会返回错误,不会生成文件;请缩小日期范围或调整筛选条件,分批导出。文件包含时长和计费时长,但不含费用列。可在用量、支出与账单中查看费用。
- 通过 API 读取记录。
GET /v1/voice/legs和GET /v1/voice/legs/{leg_id}用于读取单个呼叫段(GET /v1/voice/calls和GET /v1/voice/calls/{call_id}为仪表盘和 CLI 提供按通话分组的读取功能)。这些操作都需要具有voice范围和read级别权限的 API 密钥。其他 Voice 资源已发布的操作及其所需权限范围,请参见 API 参考文档。 - 从终端读取记录。 Bird CLI 提供
bird voice calls list、bird voice calls get、bird voice legs list、bird voice legs get和bird voice stats。MCP 服务器向智能体提供相同的读取功能。 - 订阅事件。 通话发生时,
voice_call.initiated、voice_call.answered和voice_call.ended会被推送到您的端点,因此您的系统无需轮询即可保持同步。参见语音事件。