按主叫来源和号码路由呼入的中继呼叫
SIP 中继的 Inbound routing 可以根据主叫方是谁以及所拨号码,以不同方式处理呼叫。规则检查每通呼叫的属性,例如主叫的线路类型或国家/地区,并决定如何处理:将呼叫发送到一组网关、更改您的设备收到的号码、拒绝呼叫或转接呼叫。本页提供最常见场景的可用配置。
开始之前
- 一个已开启呼入、网关至少位于一个组中、且您的号码已指向它的 SIP 中继。设置 SIP 中继 涵盖这三项。
- 打开 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 时,可使用此设置。
- 在 Groups 中为每个目的地创建一个组,例如包含手机 SBC 的
mobile和包含另一个 SBC 的landline。 - 在 Rules 中选择 Add rule,并将其命名为 Mobile callers。将 When 设为 Line type,值为
LINE_MOBILE。 - 将 Then 设为 Route to group,并选择
mobile。 - 将 Default route 设为 Route to group,并选择
landline。所有未匹配该规则的呼叫都走这条路由。 - 选择 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。
有两种等效的设置方式。
每种来源一条规则
如果希望每种来源在编辑器中显示为单独的条目,或者不同来源除了前缀还有其他差异(例如使用不同的组),请使用这种方式。
- 在 Rules 中选择 Add rule,命名为 Landline,并将 When 设为 Line type,值为
LINE_FIXED。 - 将 Then 设为 Route to group,在 Group 下选择你的组,然后选择 Override R-URI user part。输入
801,再用 Insert 在其后添加dest.digits。 - 对 Mobile 重复上述步骤(
LINE_MOBILE,前缀802)。 - 将 Default route 设为 Route to group,用户部分为
800后接dest.digits。 - 选择 Review and save,然后确认。
单个表达式
如果只有前缀不同,请使用此方式。将 Rules 留空,把 Default route 设为 Route to group 并选择你的组,选择 Override R-URI user part,插入以下表达式,并在其后添加 dest.digits:
orig.line_type == LINE_FIXED ? "801" : orig.line_type == LINE_MOBILE ? "802" : "800"两种设置发送的 INVITE 相同。网关自身的 R-URI user part 只接受被叫号码前后的固定文本,因此如果前缀取决于主叫方,请像上文那样在规则或默认路由中设置。
检查设置
- Review and save 会检查每个条件和模板,并列出错误及其位置。修复所有错误之前,不会保存任何内容。
- 分别用手机、固定电话以及隐藏号码的方式拨打你的一个号码。在 SBC 上,将收到的每个
INVITE的 Request-URI 与预期值进行比较。 - 在 Voice > Legs 下打开每通呼叫,并使用其 SIP Call-ID 在 SBC 日志中找到同一通呼叫。