# 接收来电

您工作区持有的号码可以通过以下三种方式之一接听来电：将来电递送到您的某个 SIP 中继、转接到您已验证的号码，或拒绝来电。接听方式是号码上的一项设置，一个号码同一时间只能有一种接听方式。

每个号码默认设为拒绝，因此未经任何人配置的号码会拒绝来电者，而不是没有任何应答方式。

## 前提条件

在将号码指向某种接听方式之前：

- **能够接收来电的号码。** 打开 **Voice** > [**Numbers**](https://bird.com/dashboard/w/voice/numbers)，检查 **Directions** 列是否有入站标记。从其他运营商注册为主叫号码的号码不会在此接收来电：该运营商负责路由拨打到该号码的呼叫，因此它不携带任何接听方式。
- **递送到中继：** 一个已开启入站呼叫且至少有一个递送网关的 [SIP 中继](/docs/guides/voice/sip-trunks)。
- **转接：** 一个用于转接的[已验证主叫号码](/docs/guides/voice/caller-ids)。
- **通过 API 或 CLI 更改设置：** 一个持有 `voice_management` 作用域写入权限的 API 密钥。该作用域涵盖语音配置；`voice` 作用域涵盖呼叫流量和统计数据，因此读取通话记录需要另一个作用域。

## 将来电递送到 SIP 中继

递送会拨打您在中继上声明的地址来连接您自己的电话系统。请先开启该方向，因为号码只能指向已接受入站呼叫的中继。

1. 打开 **Voice** > [**SIP Trunks**](https://bird.com/dashboard/w/voice/sip-trunks)，打开该中继，在 **Inbound calling** 下选择 **Enable inbound**。
2. 在同一部分下添加至少一个网关。没有网关的中继会拒绝所有拨入其应答号码的来电。
3. 打开 **Voice** > [**Numbers**](https://bird.com/dashboard/w/voice/numbers)，打开该号码，在 **Inbound routing** 下选择 **Deliver to a SIP trunk**。
4. 选择中继并点击 **Save**。列表中只会显示已开启入站呼叫的中继。

**Numbers** 列表上的 **Used for** 列随后会显示该号码已递送到该中继，中继自身的页面也会列出它应答的号码。

### 网关需要什么

网关是来电被递送到的一个地址，以及对端希望呼叫中的两个号码如何呈现：

| 设置                   | 含义                                                                                                               |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------ |
| **SIP URI**            | 您电话系统的主机地址，可附带可选端口，如 `sip:pbx.example.com:5060`。只需提供主机部分：包含用户部分的 URI 会被拒绝 |
| **Priority**           | 网关的尝试顺序，数值最小的优先                                                                                     |
| **Destination format** | 被叫号码呈现给对端的格式。默认为 E.164                                                                             |
| **Origination format** | 主叫号码呈现给对端的格式，位于递送呼叫的 `P-Asserted-Identity` 请求头中。默认为 E.164                              |

优先级相同的网关平分来电，任何一个都可能在某次呼叫中被首先尝试。要在递送失败时切换到第二个地址，请为该网关设置更大的优先级数值：当第一个网关未应答时才会尝试它。

两种号码格式都是基于一个占位符 `{number}` 的模板，该占位符代表去掉前导 `+` 的号码。目的地格式被放置在 SIP URI 主机之前，因此 `1234#{number}` 会将拨往 `+31201234567` 的呼叫递送为 `sip:1234#31201234567@pbx.example.com:5060`。两者的默认值均为 `+{number}`，即 E.164。如果格式中完全不包含 `{number}`，则中继应答的每个号码都会被发送到同一个固定地址。

> **Warning:** turning inbound calling off on a trunk, or deleting the trunk, puts every number pointing at it back on reject. Turning inbound back on does not restore them, so each number has to be pointed at a trunk again.

## 将来电转接到另一个号码

转接会先接听来电，再向您已验证的号码发起第二个呼叫，然后将两者连接起来。

1. 打开 **Voice** > [**Numbers**](https://bird.com/dashboard/w/voice/numbers)，打开该号码，在 **Inbound routing** 下选择 **Forward to another number**。
2. 选择要转接到的号码。列表中显示的是您已验证的主叫号码，因为转接只能指向您已证明由您控制的号码。
3. 选择转接呼叫向被叫方显示哪个号码作为主叫方，然后点击 **Save**。

转接目标在您设置时和每次转接呼叫时都会被检查。您之后移除的主叫号码会导致转接停止而非继续进行，此后的来电将被拒绝。

转接呼叫会振铃 45 秒后放弃，比中继递送的振铃时间更长，因为远端通常是个人手机而非电话系统。

转接会发起一个呼叫，因此出站规则适用于第二段呼叫：转接到您未在[目的地](/docs/guides/voice/destinations)中开启的国家会被拒绝，并返回 `destination_not_enabled`。

### 一次转接，两条通话记录

一次转接呼叫会产生共享同一个 `session_id` 的两条记录：

| 记录       | 含义                                                                                             |
| ---------- | ------------------------------------------------------------------------------------------------ |
| 到达的呼叫 | `direction` 为 `inbound`，`route` 表明该号码被设为转接、转接到哪个号码，以及转接段呈现了哪个号码 |
| 转接的呼叫 | `direction` 为 `outbound`，从该段呈现的号码拨往您转接到的号码。它不携带自己的 `route`            |

按 `session_id` 分组即可查看完整的呼叫过程。到达记录是记录号码配置方式的那条。

## 选择转接呼叫向被叫方显示哪个号码作为主叫方

转接呼叫有两个号码可以向接听者呈现，该选择既影响对方看到的内容，也影响运营商干预该呼叫的可能性：

- **主叫号码**即来电者自己的号码，因此电话振铃时看起来就像对方直接拨打的一样，可以从通话记录中回拨。由于该号码不是您拥有的，一些运营商（最常见于美国和欧洲部分地区）会将此类呼叫标记为未验证、替换号码或进行筛选。
- **被叫号码**即来电者拨打的号码，是您的号码之一。接听者看到的是您的哪个号码被拨打，而非谁打来的。

没有默认值。通过 API 或 CLI 写入每个转接时都必须明确指定该选择。

您的工作区可以设置哪些值在号码本身的 `inbound_configuration` 的 `forward_as_options` 中声明。呈现被叫号码需要您的工作区获批从您向我们购买的号码发起呼叫，而该审批尚不可用，因此 `forward_as_options` 目前仅提供主叫号码选项，转接会呈现来电者自己的号码。在获批之前，设置被叫号码会被拒绝。

在读取时，`forward_as` 是呼叫实际携带的值，可能与上次写入的值不同。

## 查看号码对来电的处理方式

来电记录在状态旁携带一个 `route`，`route` 是处理该呼叫时号码所设定的方式。之后更改号码的设置不会改变其过去呼叫的记录内容。

| `route.type` | 号码的处理方式                                                 |
| ------------ | -------------------------------------------------------------- |
| `trunk`      | 呼叫被递送到 `trunk_id` 中指定的 SIP 中继                      |
| `forward`    | 呼叫被转接到 `forward_to` 中的号码，呈现 `forward_as` 中的号码 |
| `reject`     | 号码拒绝了该呼叫                                               |

`route` 表示号码被设定的处理方式，而非该方式是否成功。在未接通的呼叫上出现 `trunk` 路由，表示号码指向了一个未接受该呼叫的中继，呼叫的状态才是承载结果的字段。`route` 在出站呼叫和该字段存在之前记录的呼叫上不存在。

在仪表板中，从 **Voice** > [**Calls**](https://bird.com/dashboard/w/voice/calls) 打开该呼叫，查看 **Inbound route** 行，该行链接到做出处理决定的号码。通过 API，`route` 位于 [`GET /v1/voice/calls/{call_id}`](/docs/api/reference/get-voice-call) 和 [`GET /v1/voice/calls`](/docs/api/reference/list-voice-calls) 上，`direction` 可将列表筛选为来电。

## 诊断被拒绝的来电

被拒绝的来电会以状态 `rejected` 记录。有两种不同的原因会产生该状态，`rejection_reason` 是区分它们的依据：

- **无 `rejection_reason` 的拒绝。** 号码本身拒绝了该呼叫。该呼叫未触发我们的任何检查，因此没有原因，`route` 表示号码被设定的处理方式。`reject` 路由表示该号码未被指向任何地方，或被刻意设为拒绝。
- **有 `rejection_reason` 的拒绝。** 该呼叫在到达您的电话系统之前未通过我们的某项检查。原因中会标明是哪项检查。[被拒绝的呼叫](/docs/guides/voice/call-log#rejected-calls)列出了所有原因及其修复方法。

`failed` 是另一种状态，不代表被拒绝：它表示呼叫已尝试但未成功，`sip_response_code` 携带了返回的响应。

将 `route` 和 `rejection_reason` 放在一起查看，以区分不同的拒绝情况：

| `route` 和原因                       | 原因                                                                                                                       |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| `reject`，无原因                     | 号码未指向任何接听方式。删除中继或关闭其入站呼叫会将指向该中继的所有号码恢复到此状态，因此之前正常工作的号码也可能出现在此 |
| `trunk`，`no_route_found`            | 号码指向了一个中继，但该中继没有可用于递送呼叫的网关。请在中继页面添加一个                                                 |
| `forward`，无原因                    | 转接目标不再是已验证的主叫号码。请在[主叫号码](/docs/guides/voice/caller-ids)中重新验证，或转接到其他号码                  |
| `forward`，`destination_not_enabled` | 无法向转接目标所在的国家发起第二段呼叫。请在[目的地](/docs/guides/voice/destinations)中开启该国家                          |

账户限额同样适用于来电：超出钱包余额、组织的每日语音支出限额，或并发和每秒限额时，来电将以相应原因被拒绝。[语音概览](/docs/guides/voice/overview#limits)涵盖了这些限额本身。

## 查看接收来电的费用

接收来电是收费的。费率取决于接收来电号码的国家和类型，按国家发布在[语音定价页面](/pricing/voice)的 **Receiving calls** 下，与您拨出呼叫的费率并列。

转接按两次呼叫计费：到达的呼叫按接收费率计费，我们发起的呼叫段按您转接到的号码的出站费率计费。单次处理费按整个呼叫收取一次，而非按每段收取。

来电递送前会检查钱包余额，因此余额不足以支付时来电会被拒绝，而非事后向您收费。[费用与计费](/docs/guides/voice/placing-calls#cost-and-billing)涵盖了可计费时长、费率和钱包在双向呼叫中的工作方式。

## 后续步骤

| 页面                                               | 涵盖内容                             |
| -------------------------------------------------- | ------------------------------------ |
| [SIP 中继](/docs/guides/voice/sip-trunks)          | 创建中继、两个方向以及控制谁可以发送 |
| [主叫号码](/docs/guides/voice/caller-ids)          | 注册号码并证明您对其拥有控制权       |
| [通话记录](/docs/guides/voice/call-log)            | 通话记录上的每个字段以及每种拒绝原因 |
| [语音事件](/docs/guides/voice/events)              | 将呼叫结果推送到您自己的系统         |
| [语音故障排查](/docs/guides/voice/troubleshooting) | 根据症状诊断未接通的呼叫             |

## Related resources

- [What is a voice API?](/explained/voice/what-is-a-voice-api) (answer)
- [Voice](/products/voice) (product)

[Get an implementation brief](/learn/workspace?topic=voice)
