跳到导航

FreePBX 和 Asterisk

通过 SIP 中继,将 FreePBX 或 Asterisk 电话系统的通话发送给接待员。

PBX 会保留运营商和号码,并通过 SIP 中继 将选定通话转发给 Reception.ai。需要在 PBX 上添加第二个指向 Reception.ai 的中继,然后将 DID、时间条件或 IVR 选项路由至该中继。

开始前

  • 可从互联网访问的 FreePBX 15 或更高版本,或使用 PJSIP 的 Asterisk。
  • PBX 的静态公网 IP 地址。Reception.ai 仅接受来自允许地址的通话。
  • 熟悉 PBX 中继、路由和防火墙的人员。

设置

1

在 Reception.ai 中添加 SIP 中继

前往 Integrations,选择 Add integration,然后选择 SIP Trunk。在 Inbound allowed addresses 下添加 PBX 的公网 IP 地址。如果还设置了入站用户名和密码,请在下方的 PBX 中继中使用相同凭据。

2

添加号码

前往 Receptionists,选择 Phone 卡片,输入来电者拨打的号码(含国家代码),然后选择 Add SIP Trunk number。Reception.ai 会显示要使用的 SIP 服务器主机和请求 URI。

3

在 FreePBX 中启用 TCP

Reception.ai 不接受 UDP。在 FreePBX 中,前往 Settings → Asterisk SIP Settings → SIP Settings [chan_pjsip],将 tcp 传输方式设为 Yes,然后选择 Submit 和 Apply Config。重启 Asterisk 以加载新的传输方式。如果已在 Certificate Management 中设置证书,也可使用 TLS。

4

创建通向 Reception.ai 的中继

前往 Connectivity → Trunks → Add Trunk → Add SIP (chan_pjsip) Trunk。在 General 标签页中输入 Trunk Name,例如 reception。将 CID Options 设为 Allow Any CID,以便接待员看到每位来电者自己的号码。在 pjsip Settings 标签页中:

字段值
注册None
身份验证None;如果在 Reception.ai 中设置了入站凭据,则选 Outbound 并填写 Username 和 Secret
SIP 服务器Reception.ai 的 SIP 服务器主机
SIP 服务器端口TCP 使用 5060,TLS 使用 5061
传输方式TCP(或 TLS)传输方式,例如 0.0.0.0-tcp
5

添加发送 +E.164 格式号码的出站路由

前往 Connectivity → Outbound Routes,添加名为 Reception 的路由,并且只使用 reception 中继。添加拨号模式:使用未使用的 prefix,例如 88;match pattern 设为 X.;prepend 设为 +。这样,拨打 8814155550123 时会以 +14155550123 的格式通过中继发送,这正是 Reception.ai 所需的格式。

6

将 DID 发送至 Reception.ai

前往 Applications → Misc Destinations,添加一个目标,拨打 88 后接不含 + 的 E.164 格式号码,例如 8814155550123。然后前往 Connectivity → Inbound Routes,打开 DID 的路由,并将其目标设为该杂项目标。也可以将它用作时间条件、振铃组故障转移或 IVR 选项的目标。

7

修复 NAT 和音频

前往 Settings → Asterisk SIP Settings → General SIP Settings。将 External Address 设为 PBX 的公网 IP,并在 Local Networks 下列出私有子网。在防火墙中开放该页面显示的 RTP Port Ranges(UDP,默认 10000–20000)。

8

测试

使用另一部电话拨打 DID,确认接待员能够接听。

原生 Asterisk

对于未使用 FreePBX 的 Asterisk,pjsip.conf 中的相同配置如下。将 SIP_SERVER 替换为 Reception.ai 显示的主机。

[transport-tcp]
type=transport
protocol=tcp
bind=0.0.0.0:5060
external_signaling_address=PBX_PUBLIC_IP
external_media_address=PBX_PUBLIC_IP
local_net=192.168.0.0/16
[reception]
type=aor
contact=sip:SIP_SERVER:5060;transport=tcp
[reception]
type=endpoint
transport=transport-tcp
aors=reception
context=from-reception
disallow=all
allow=ulaw,alaw

在拨号计划中,以 E.164 格式号码发送通话:

exten => YOUR_DID,1,Dial(PJSIP/+14155550123@reception)

如果在 Reception.ai 中设置了入站凭据,请添加包含这些凭据的 type=auth 部分,并在端点上通过 outbound_auth= 引用它。

限制

  • 转接。 接待员会通过向 Outbound SIP address 发起新通话来转接电话。请将其指向 SIP 运营商,并使用接受用户名和密码的运营商账户。此处未涵盖将转接路由回 PBX:Reception.ai 从不断变化的地址池发起通话,因此 PBX 无法通过 IP 将这些通话匹配到中继。
  • PBX 会承载每通电话两次:一次来自运营商,一次发送至 Reception.ai,因此每一段通话都需要一个空闲通道。

故障排除

问题检查项
电话在响铃前失败检查中继是否使用 TCP 或 TLS 传输方式而非 UDP,且端口是否匹配。
电话被拒绝将 PBX 的公网 IP 添加至 Inbound allowed addresses。在 Asterisk 控制台中检查 INVITE 的请求 URI 是否以 + 和国家代码开头。
接待员将 PBX 号码识别为来电者将 Reception.ai 中继的 CID Options 设为 Allow Any CID。
单向音频或无音频设置 External Address 和 Local Networks,并在防火墙中开放 RTP 端口范围。
接待员未接听确认号码已添加到接待员的 Phone 卡片,并与 PBX 发送的号码一致。