---
title: "按主叫来源和号码路由呼入的中继呼叫"
description: "使用 SIP 中继路由规则，将移动和固定电话主叫发送到不同网关、按主叫国家/地区路由，或按主叫来源添加前缀。"
canonical: "https://bird.com/zh-sg/wendang/guides/voice/trunk-routing-rules"
---

# 按主叫来源和号码路由呼入的中继呼叫

SIP 中继的 **Inbound routing** 可以根据主叫方是谁以及所拨号码，以不同方式处理呼叫。规则检查每通呼叫的属性，例如主叫的线路类型或国家/地区，并决定如何处理：将呼叫发送到一组网关、更改您的设备收到的号码、拒绝呼叫或转接呼叫。本页提供最常见场景的可用配置。

## 开始之前

- 一个已开启呼入、网关至少位于一个组中、且您的号码已指向它的 SIP 中继。[设置 SIP 中继](/docs/guides/voice/sip-trunk-setup) 涵盖这三项。
- 打开 **Voice** > [**SIP Trunks**](https://bird.com/dashboard/w/voice/sip-trunks)，打开该中继，然后进入 **Inbound routing** > **Rules**。

## 规则的工作方式

对于每通呼入，Bird 从上到下检查规则。第一条 **When** 匹配的规则决定该呼叫的处理方式；未匹配任何规则的呼叫使用 **Default route**（**No rule above matched**）。每条规则和默认路由都有一个 **Then**：**Route to group**、**Reject** 或 **Forward to number**。一个中继最多可包含 50 条规则。

**When** 是基于以下呼叫属性的条件。从列表中选择一个属性，或使用 **Edit expression** 自行编写条件。

| 属性              | 含义                                                                                               |
| ----------------- | -------------------------------------------------------------------------------------------------- |
| `orig.line_type`  | 主叫方的线路类型：`LINE_FIXED`、`LINE_MOBILE`、`LINE_TOLL_FREE`、`LINE_PAYPHONE` 或 `LINE_UNKNOWN` |
| `orig.country`    | 主叫方的两位字母国家代码，例如 `GB`。主叫方隐藏号码时为空                                          |
| `orig.anonymous`  | 主叫方隐藏号码时为 `true`                                                                          |
| `orig.number`     | E.164 格式的主叫号码，带 `+`                                                                       |
| `orig.digits`     | 去掉开头 `+` 的主叫号码                                                                            |
| `dest.number`     | E.164 格式的被叫号码，带 `+`                                                                       |
| `dest.digits`     | 被叫号码，不带开头的 `+`                                                                           |
| `call.local_hour` | 呼叫发生的小时，0 到 23，按路由的时区计算                                                          |
| `call.weekday`    | 呼叫发生的星期几，按路由的时区计算                                                                 |

线路类型请写成常量，例如 `orig.line_type == LINE_MOBILE`。未知的常量会在保存时报错，而拼写错误的字符串（例如 `"LINE_MOBLE"`）会被接受，但永远不会匹配。

## 将手机和固定电话来电发送到不同的网关

例如，当手机来电应接入一个 SBC、其他来电接入另一个 SBC 时，可使用此设置。

1. 在 **Groups** 中为每个目的地创建一个组，例如包含手机 SBC 的 `mobile` 和包含另一个 SBC 的 `landline`。
2. 在 **Rules** 中选择 **Add rule**，并将其命名为 _Mobile callers_。将 **When** 设为 **Line type**，值为 `LINE_MOBILE`。
3. 将 **Then** 设为 **Route to group**，并选择 `mobile`。
4. 将 **Default route** 设为 **Route to group**，并选择 `landline`。所有未匹配该规则的呼叫都走这条路由。
5. 选择 **Review and save**，然后确认。

按国家路由也用同样的方式：通过 **Edit expression** 将 **When** 设为 `orig.country == GB` 这样的条件。

## 按主叫来源添加前缀

你的 SBC 可能要求在被叫号码前加上表示主叫来源的前缀，例如固话为 `801`，手机为 `802`，其他为 `800`。Bird 会修改它发送给网关的 Request-URI 的用户部分，网关的主机和端口保持不变。这样，对于拨打 `+44 808 157 0123` 的呼叫，手机主叫到达时为 `sip:802448081570123@198.51.100.20`。

有两种等效的设置方式。

### 每种来源一条规则

如果希望每种来源在编辑器中显示为单独的条目，或者不同来源除了前缀还有其他差异（例如使用不同的组），请使用这种方式。

1. 在 **Rules** 中选择 **Add rule**，命名为 _Landline_，并将 **When** 设为 **Line type**，值为 `LINE_FIXED`。
2. 将 **Then** 设为 **Route to group**，在 **Group** 下选择你的组，然后选择 **Override R-URI user part**。输入 `801`，再用 **Insert** 在其后添加 `dest.digits`。
3. 对 _Mobile_ 重复上述步骤（`LINE_MOBILE`，前缀 `802`）。
4. 将 **Default route** 设为 **Route to group**，用户部分为 `800` 后接 `dest.digits`。
5. 选择 **Review and save**，然后确认。

### 单个表达式

如果只有前缀不同，请使用此方式。将 **Rules** 留空，把 **Default route** 设为 **Route to group** 并选择你的组，选择 **Override R-URI user part**，插入以下表达式，并在其后添加 `dest.digits`：

```text
orig.line_type == LINE_FIXED ? "801" : orig.line_type == LINE_MOBILE ? "802" : "800"
```

两种设置发送的 `INVITE` 相同。网关自身的 **R-URI user part** 只接受被叫号码前后的固定文本，因此如果前缀取决于主叫方，请像上文那样在规则或默认路由中设置。

## 检查设置

1. **Review and save** 会检查每个条件和模板，并列出错误及其位置。修复所有错误之前，不会保存任何内容。
2. 分别用手机、固定电话以及隐藏号码的方式拨打你的一个号码。在 SBC 上，将收到的每个 `INVITE` 的 Request-URI 与预期值进行比较。
3. 在 **Voice** > [**Legs**](https://bird.com/dashboard/w/voice/legs) 下打开每通呼叫，并使用其 **SIP Call-ID** 在 SBC 日志中找到同一通呼叫。

## 后续步骤

| 页面                                                | 涵盖内容                                  |
| --------------------------------------------------- | ----------------------------------------- |
| [接听呼叫](/docs/guides/voice/receiving-calls)      | 号码路由、组、默认路由和被拒绝的呼叫      |
| [设置 SIP 中继](/docs/guides/voice/sip-trunk-setup) | 按顺序完成整个中继设置，从创建到测试呼叫  |
| [拨打电话](/docs/guides/voice/placing-calls)        | Bird 对你的设备发送的 `INVITE` 有哪些要求 |

## 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)
