Twilio 未响应 SIP 邀请

Twilio not responding to SIP invite

我有一个使用 Twilio 的弹性 SIP 中继的 freeSwitch 实现。在大多数情况下,这是完美无缺的。我可以接收从 PSTN 到我的 SIP 中继的传入呼叫,然后再转到我的 freeswitch PBX。我也可以毫无问题地在终端中继上发起呼叫。

当我的 FollowMe 功能尝试通过 Termination SIP 中继拨出呼叫我的手机时,我遇到了问题 phone。

我已经使用 FS_CLI 监控与 Twilio 的通信,并且可以看到 SIP 邀请消息 - 但 Twilio 没有回复。

我什至(在大多数情况下)比较了我从分机呼叫 PSTN 和 freeSwitch 尝试使用 FollowMe 呼叫之间的请求。他们看起来很相似。我已经在下面提供了请求,如果有人看到奇怪的东西,请告诉我。这个请求只是重复自己并最终放弃——没有来自 Twilio 的响应,也没有在调试器或主干日志中记录它。 (我已经 XXXX 了我的号码)

 send 1506 bytes to udp/[54.172.60.1]:5060 at 16:47:51.442983:
   ------------------------------------------------------------------------
   INVITE sip:+1XXXXXXXXX6@XXXXXX.pstn.twilio.com SIP/2.0
   Via: SIP/2.0/UDP XX.XX.XX.XX;rport;branch=z9hG4bKe92m35UyNXe2a
   Max-Forwards: 59
   From: "+1XXXXXXXXX0" <sip:+1XXXXXXXXX0@XXXXXX.oxigenx.com>;tag=3UHvjrXHmUyXp
   To: <sip:+1XXXXXXXXX6@XXXXXX.pstn.twilio.com>
   Call-ID: a369c6b9-82af-1235-e490-0050561ee798
   CSeq: 104375771 INVITE
   Contact: <sip:gw+a741d1e8-2e0a-4527-b18d-518edbe57d73@XX.XX.XX.XX:5060;transport=udp;gw=a741d1e8-2e0a-4527-b18d-518edbe57d73>
   User-Agent: FreeSWITCH
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Type: application/sdp
   Content-Disposition: session
   Content-Length: 246
   Diversion: <sip:+1XXXXXXXXX6@public-vip.us1.twilio.com>;reason=unconditional
   X-Twilio-AccountSid: XXXXXXXXXXX
   X-Twilio-CallSid: CA05acdaaae18a720113ab2e78cbd1db63
   X-accountcode: admin1.oxigenx.com
   X-FS-Support: update_display,send_info
   Remote-Party-ID: "+1XXXXXXXXX0" <sip:+1XXXXXXXXX0@XXXXXX.oxigenx.com>;party=calling;screen=yes;privacy=off

   v=0
   o=FreeSWITCH 1489394171 1489394172 IN IP4 XX.XX.XX.XX
   s=FreeSWITCH
   c=IN IP4 XX.XX.XX.XX
   t=0 0
   m=audio 29500 RTP/AVP 0 101 13
   a=rtpmap:0 PCMU/8000
   a=rtpmap:101 telephone-event/8000
   a=fmtp:101 0-16
   a=rtpmap:13 CN/8000
   a=ptime:20
   ------------------------------------------------------------------------

我想通了。 Twilio 不喜欢作为 INVITE 的一部分发送的 Remote-Party-ID 参数。我通过启用 "caller-id-type" 到 "none" 在 SIP 配置中关闭了 RPID。

为此,请进入 "Advanced" 菜单下的 "SIP Profiles"。从那里,select 您需要禁用 RPID 的 SIP 配置文件。向下滚动列表以找到 "caller-id-type",值为 "none"。单击它并将 Enabled 设置为 TRUE。从 CLI 保存并重启 Sofia。

这里是 Twilio 开发人员布道者。

我只是传递我根据这个问题在内部收集的信息,我不是 SIP 专家。但是,它可能会有所帮助。

基于 UDP 的 SIP 的 MTU(最大转换单元)为 1500 字节。该规范建议 SIP 消息应小于 1300 字节以允许 headers 等,或者消息应通过 TCP 发送。

根据日志的顶部,您似乎发送了 1506 个字节,删除 Remote-Party-ID 会将消息的大小推到 1500 以下。实际上,删除任何 non-essential 参数都会已经做了同样的事情,所以并不是 Twilio 不喜欢 Remote-Party-ID 参数,而是你的消息因为太大而被丢弃了。我们找不到 INVITE 的日志,这就是为什么您也看不到任何日志的原因。

在这种情况下 Remote-Party-ID 并没有真正被 Twilio 使用,特别是在调用者 ID 与 From 相同并且相当长 header 的情况下。所以你的解决方案可能是最好的。

您也可以删除与 Twilio 不支持的 SUBSCRIBE 方法有关的 Allow-Events header。