SIP 客户端设置
任何能通过代理发起呼叫的 SIP 客户端都可以使用 Bird 中继。这包括 PBX、桌面软电话和命令行工具。本页将中继的连接详情映射到常见客户端字段和身份验证设置。
客户端需要什么
四个值,全部来自中继页面:
| 客户端字段 | 填写内容 |
|---|---|
| SIP server、domain、host 或 proxy | 中继的 SIP 域名 |
| 端口和传输协议 | 中继支持的端口之一 |
| Authentication user、auth user 或 login | bird |
| Password 或 secret | 中继上允许使用的 API 密钥的 secret |
仅使用 IP 允许列表的中继只需要前两项。凭据是 API 密钥身份验证额外添加的部分。
示例使用 YOUR_TRUNK_DOMAIN、YOUR_CALLER_ID 和 YOUR_API_KEY_SECRET。从中继页面复制完整域名。Bird 会在呼叫到达你的通话记录之前拒绝发往其他域名的呼叫。使用 Bird CLI 登录后,运行 bird voice tools test-call --dry-run 即可将这些值打印为 baresip 账户行。
将 realm 或 authentication domain 留空,让客户端使用 Bird 质询中的 realm。如果客户端要求填写值,使用不带 wsp_ 前缀的工作区 ID,后接 .sip.bird.com。工作区 realm 与中继的 SIP 域名不同。
无需注册即可拨打电话
Bird 通过中继的 IP 允许列表或密码质询对每个 INVITE 进行身份验证。客户端不需要向中继注册。
拨打电话前检查注册状态:
- 在 PBX 中,将 Bird 配置为中继并关闭注册。Asterisk 中表示不添加 type=registration 部分;FreeSWITCH 中表示在网关上设置 register=false;FreePBX 和 3CX 有注册模式,设为 none。
- 在软电话中,如果账户的高级设置提供该选项,请关闭注册。如果没有该选项,注册失败只是显示问题,拨号仍然正常,因为我们根据 INVITE 进行认证,而不是根据注册。
两个身份,两个字段
你的客户端必须发送两个不同的身份:
- 主叫号码放在 From 请求头中,必须是你已验证的号码,采用 E.164 格式:以 + 开头,后接国家代码和国内号码。在大多数客户端中,这是账户的 user 或 caller-ID 字段。
- Digest 用户名始终是 bird。在大多数客户端中,这是 authentication user 或 login 字段。
拨号也使用 E.164 格式,因为这是 Bird 路由和计费的依据。
软电话
软电话是在将生产流量指向新中继之前验证其是否正常工作的最快方式。
baresip
在 ~/.baresip/accounts 中添加一行,将你的主叫号码作为账户用户,bird 作为 auth user:
代码示例
<sip:YOUR_CALLER_ID@YOUR_TRUNK_DOMAIN>;auth_user=bird;auth_pass=YOUR_API_KEY_SECRET;regint=0;outbound="sip:YOUR_TRUNK_DOMAIN;transport=udp"regint=0 用于阻止 baresip 注册。启动后使用 /dial +31612345678 拨号。
Zoiper
手动添加一个 SIP 账户。将 Domain 设为中继的 SIP 域名,Username 设为你已验证的主叫号码,Password 设为 API 密钥的 secret。在高级设置中,将 Auth username 设为 bird,禁用启动时注册,并选择传输协议。
Linphone
添加一个账户,将 bird 设为 SIP 身份的 auth user,将你的主叫号码设为其 username,然后禁用该账户的注册。在 linphonerc 中,同一账户是一个 [proxy_N] 部分,包含 reg_sendregister=0。
MicroSIP
在 Account 下:SIP server 为中继的 SIP 域名,Username 为你已验证的主叫号码,Login 为 bird,Password 为 API 密钥的 secret。将 Domain 保持与 SIP server 相同。
PBX
Asterisk
在 pjsip.conf 中,一个带有出站认证且无注册部分的 endpoint:
代码示例
[bird-auth]
type=auth
auth_type=userpass
username=bird
password=YOUR_API_KEY_SECRET
[bird-aor]
type=aor
contact=sip:YOUR_TRUNK_DOMAIN:5060
[bird]
type=endpoint
context=from-internal
outbound_auth=bird-auth
aors=bird-aor
from_user=YOUR_CALLER_ID
from_domain=YOUR_TRUNK_DOMAINfrom_user 是 Bird 检查的主叫号码,因此必须是已验证的号码。使用 Dial(PJSIP/+31612345678@bird) 拨号。
FreePBX
在 Connectivity > Trunks 下,添加一个 SIP (chan_pjsip) 中继。在其 pjsip Settings 中,将 Username 设为 bird,Secret 设为 API 密钥的 secret,SIP Server 设为中继的 SIP 域名,Authentication 设为 outbound,Registration 设为 none。将中继的出站主叫号码设为已验证的号码。
FreeSWITCH
conf/sip_profiles/external/bird.xml 中的一个 gateway:
代码示例
<include>
<gateway name="bird">
<param name="proxy" value="YOUR_TRUNK_DOMAIN"/>
<param name="register" value="false"/>
<param name="username" value="bird"/>
<param name="password" value="YOUR_API_KEY_SECRET"/>
<param name="from-domain" value="YOUR_TRUNK_DOMAIN"/>
<param name="caller-id-in-from" value="true"/>
</gateway>
</include>设置 caller-id-in-from 后,该通话段的主叫号码变为 From 号码,因此在发起呼叫时将其设为已验证的号码。
3CX
添加一个通用 SIP 中继并禁用注册。将其 host 设为中继的 SIP 域名,authentication ID 设为 bird,password 设为 API 密钥的 secret。将出站主叫号码设为已验证的号码。
后续步骤
| 页面 | 涵盖内容 |
|---|---|
| 语音故障排查 | 根据症状诊断未接通的呼叫 |
| SIP 中继 | 连接详情、允许列表和 Digest 认证 |
| 发起呼叫 | Bird 对 INVITE 的要求,以及呼叫如何计费 |
| 主叫号码 | 注册号码并通过验证呼叫证明所有权 |
| 通话记录 | 确认呼叫已发出及其费用 |