---
title: "设置 SIP 中继以接听和拨打电话"
description: "按顺序将您的 PBX 或 SBC 连接到 Bird：创建中继，将呼入电话送达您的网关，开通呼出功能，并测试两个方向。"
canonical: "https://bird.com/zh-sg/wendang/guides/voice/sip-trunk-setup"
---

# 设置 SIP 中继以接听和拨打电话

本页按控制台所需的顺序介绍完整的中继设置。如果跳过某一步骤会出现可见的症状，该步骤会注明这一症状，因此测试呼叫失败时，您也可以将本页用作检查清单。各项设置的含义请参阅 [SIP 中继](/docs/guides/voice/sip-trunks)、[接听电话](/docs/guides/voice/receiving-calls)和[拨打电话](/docs/guides/voice/placing-calls)。

## 开始之前

- 一个 Bird 工作区。呼叫、号码和中继都属于同一个工作区，因此请在同一个工作区中完成所有步骤。
- 您设备的公网地址：Bird 应将呼叫送达的主机，以及您的设备发送 SIP 所用的地址。
- 接听电话需要该工作区中的一个 Bird 号码。拨打电话需要一个主叫号码：可以是工作区中的 Bird 号码，也可以是您已[验证](/docs/guides/voice/caller-ids)的号码。
- 一个 `status` 为 `active` 的 Bird 号码。仍在等待所有权文件或注册的号码无法接听或拨打电话：请参阅[提交号码的所有权文件](/docs/guides/numbers/ownership-paperwork)。

## 1. 创建中继

打开 **Voice** > [**SIP Trunks**](https://bird.com/dashboard/w/voice/sip-trunks)，选择 **Add new SIP trunk**，输入名称，然后选择 **Create trunk**。

新建的中继在您分别开启每个方向之前，不会承载任何方向的呼叫。

## 2. 开启呼入

在 **Inbound calling** 下，选择 **Enable inbound**。其下方会出现 **Inbound routing** 部分。

如果跳过这一步，就无法将号码指向该中继：号码的中继列表中不会出现该中继。

## 3. 添加网关

在 **Inbound routing** 中打开 **Gateways** 选项卡，为 Bird 需要投递呼叫的每个地址选择 **Add gateway**：

| 字段                   | 填写内容                                                                                           |
| ---------------------- | -------------------------------------------------------------------------------------------------- |
| **Name**               | 便于识别的标签，例如 `Primary SBC`                                                                 |
| **Host**               | 您设备的主机名或公网 IP 地址，不含 `sip:` 或用户部分                                               |
| **Port**               | 留空则使用该传输协议的默认端口，或填写您的设备监听的端口                                           |
| **Transport**          | UDP、TCP 或 TLS，与您的设备一致                                                                    |
| **R-URI user part**    | 被叫号码在 Request-URI 中的写法。默认为带 `+` 的 E.164 格式                                        |
| **Origination format** | 主叫号码的写法。默认为带 `+` 的 E.164 格式                                                         |
| **Priority**           | 该网关在 **All gateways (automatic)** 中的位置：数值越小越先振铃，数值相同的网关分担呼叫。默认为 0 |

如果您的设备要求号码不带开头的 `+`，请打开该格式的列表并选择 **Without the plus**，或选择 `00` 或 `011` 国际前缀。[网关需要什么](/docs/guides/voice/receiving-calls#what-a-gateway-needs)介绍了各种号码格式。

Bird 会按主叫方运营商发送时的原样透传 `To` 头。如果您的设备从 `To` 读取被叫号码，请选择 **Rewrite To user part**，并按照与 **R-URI user part** 相同的格式进行设置。之后，对于发往该网关的呼叫，Bird 会替换 `To` 的用户部分。

您的网关必须接受来自 Bird 的呼叫，且不发起 SIP Digest 质询，因为 Bird 不会响应此类质询。

## 4. 选择呼叫依次尝试的网关组

Bird 将呼叫投递给一组网关。每个网关都属于 **All gateways (automatic)**，该组按照网关在 **Gateways** 选项卡中的 **Priority** 依次尝试，数值最小的最先尝试。如需通过该组实现故障转移，请为备用网关设置比主网关更大的 **Priority** 数值。如果 **Groups** 选项卡中没有 **All gateways (automatic)**，说明该中继已保存的路由中用一个自建组取代了它，而 **Priority** 不决定该组的顺序；请参阅[使用自动组](/docs/guides/voice/hunt-groups#use-the-automatic-group)。

如果中继的路由从未保存过，在添加第一个网关时，控制台会将默认路由指向 **All gateways (automatic)**。

如需不同的振铃时长、权重，或只使用部分网关，请自建网关组：在 **Groups** 选项卡中选择 **Add group** 并为其命名，然后对每个网关使用 **Add gateway to group**。[故障转移与分配呼入呼叫](/docs/guides/voice/hunt-groups)介绍了每种顺序、振铃时长以及何时停止依次尝试网关。

## 5. 将默认路由指向该组

在 **Rules** 选项卡中，找到 **Default route**（**No rule above matched**）。将 **Then** 设为 **Route to group**，然后选择你的组。选择 **Review and save**，再确认。

默认路由处理所有未被任何规则匹配的呼叫，因此没有规则时，它会处理所有呼叫。如果它设为 **Reject**，即使组中有网关，这些呼叫也会在到达你的设备之前被拒绝。

在审核时，如果某个网关不在任何由规则或默认路由转发呼叫的组中，控制台会提示 **Calls never reach some gateways**。请在测试前解决该警告。

此默认路由属于中继。它与 **Numbers** 页面上的工作区设置 **Calls to numbers without their own route** 相互独立，后者决定没有自身路由的号码如何处理。

## 6. 将号码指向中继

打开 **Voice** > [**Numbers**](https://bird.com/dashboard/w/voice/numbers)，打开该号码，在 **Inbound routing** 下选择 **Deliver to a SIP trunk**。选择中继并保存。

没有自身路由的号码遵循工作区默认路由，该路由初始为拒绝。要一次性将所有此类号码发送到此中继，请将 **Calls to numbers without their own route** 设为该中继。请参阅[设置默认路由](/docs/guides/voice/receiving-calls#set-a-default-route)。

如果跳过此步骤，而工作区默认路由仍为拒绝，呼入呼叫会被拒绝，呼叫记录的 **Inbound route** 会显示 **Reject the leg**。

## 7. 开启呼出并指定允许发送的设备

在 **Outbound calling** 下，选择 **Enable outbound**。随后会出现 **Connection** 部分，其中显示中继的 **SIP domain**。Bird 通过此域名识别你的中继，因此请完整复制。

然后至少添加一种识别您设备的方式：

- **Allowed IP addresses**：您的设备发送 SIP 时使用的公网地址。如果设备位于 NAT 之后，请使用路由器的公网地址。
- **Allowed API keys**：适用于能响应 Digest 质询的设备，用户名为 `bird`，密码为 API 密钥的密文。

在开启出站呼叫之前，中继会拒绝所有外呼。在中继能够识别您的设备之前，呼叫会在生成呼叫记录之前就被拒绝。请参阅[控制谁可以发送呼叫](/docs/guides/voice/sip-trunks#controlling-who-may-send-calls)。

## 8. 配置您的 PBX 或 SBC

在您的 PBX 或 SBC 上：

- **将外呼发送到中继的 SIP 域名。** 将 SIP 域名填入 Request-URI 的主机部分。使用端口 `5060`（UDP 或 TCP）或 `5061`（TLS）。Request-URI 主机为其他名称的呼叫会被拒绝。
- **按国际格式拨号。** 在 Request-URI 的用户部分填写 `+` 加国家代码再加被叫号码，例如 `+442071234567`。不要添加技术前缀。请参阅 [Bird 对 INVITE 的要求](/docs/guides/voice/placing-calls#what-bird-expects-on-the-invite)。
- 在 `From` 头中**提供符合条件的主叫号码**。
- **提供 G.711**（A-law 或 µ-law）编解码，并以 RFC 4733 电话事件发送 DTMF。该页面的同一部分也介绍了媒体相关要求。
- **放行 Bird 的地址。** 如果您的防火墙或 SBC 只接受列表中的地址，请放行您的中继所在区域的信令地址和媒体地址，这些地址列在 [SIP 中继网络要求](/docs/guides/voice/network-requirements)中。

## 9. 开启您要呼叫的国家/地区

打开 **Voice** > [**Destinations**](https://bird.com/dashboard/w/voice/destinations)，勾选你要呼叫的每个国家，然后选择 **Save changes**。新工作区默认不启用任何国家，呼叫未启用的国家会被拒绝并返回 `destination_not_enabled`。请参阅[语音目的地](/docs/guides/voice/destinations)。

## 10. 测试双向呼叫

1. **呼入**：用普通电话拨打你的 Bird 号码，然后在同一工作区中打开 **Voice** > [**Legs**](https://bird.com/dashboard/w/voice/legs)。
2. **呼出**：从你的设备向已启用国家的任一可达号码发起呼叫，并以你的 Bird 号码或已验证号码作为主叫号码。此测试不需要第二个 Bird 号码。
3. 逐一打开每个呼叫段。**Inbound route** 显示该号码被设置的处理方式。被拒绝的呼叫会显示拒绝原因；如果需要修改你的某项设置，还会附上该设置的链接。成功的呼叫显示 **Answered**。联系支持团队时，请提供 **Leg ID**。

如果呼叫缺失、被拒绝或始终未到达你的设备，请按照[语音故障排查](/docs/guides/voice/troubleshooting)操作，该页面从故障现象入手。

## 后续步骤

| 页面                                               | 涵盖内容                               |
| -------------------------------------------------- | -------------------------------------- |
| [SIP 中继](/docs/guides/voice/sip-trunks)          | 所有中继设置、身份验证和 Digest        |
| [接听呼叫](/docs/guides/voice/receiving-calls)     | 号码路由、网关、网关组和工作区默认路由 |
| [拨打电话](/docs/guides/voice/placing-calls)       | Bird 对 `INVITE` 的要求                |
| [语音故障排查](/docs/guides/voice/troubleshooting) | 根据症状诊断通话问题                   |

## Related resources

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

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