我使用Twilio的Elastic SIP中继实现了freeSwitch实现。在大多数情况下,这是完美无瑕的。我可以接收来自PSTN的呼叫到我的SIP中继,然后再接收到我的freeswitch PBX。我也可以在没有问题的情况下在终端中继上发起呼叫。
当我的FollowMe功能尝试通过终端SIP干线拨出来拨打我的手机时,我遇到了问题。
我已经使用FS_CLI监控到Twilio的通信,并且可以看到SIP Invite消息 - 但Twilio没有回复。
我甚至比较(在大多数情况下)从我的分机呼叫PSTN和freeSwitch尝试呼叫FollowMe之间的请求。他们看起来很相似我在下面提供了请求,如果有人能看到奇怪的东西,请告诉我。这个请求只会重复并最终放弃 - Twilio没有响应,也没有在Debugger或Trunk日志中记录它。 (我有XXXX'ed我的号码)
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
------------------------------------------------------------------------
答案 0 :(得分:0)
我弄明白了这个问题。 Twilio不喜欢作为INVITE一部分发送的Remote-Party-ID参数。我通过启用“caller-id-type”为“none”来关闭SIP配置中的RPID。
要执行此操作,请转到“高级”菜单下的“SIP配置文件”。从那里,选择您需要禁用RPID的SIP配置文件。向下滚动列表以找到值为“none”的“caller-id-type”。单击它并将Enabled设置为TRUE。从CLI保存并重新启动Sofia。
答案 1 :(得分:0)
Twilio开发者传道者在这里。
我只是根据这个问题传递我内部提到的信息,我不是SIP专家。但是,它可能有所帮助。
SIP over UDP的MTU(最大转换单位)为1500字节。该规范建议SIP消息应小于1300字节以允许标头等,或者消息应通过TCP发送。
看起来你根据日志的顶部发送了1506个字节,删除Remote-Party-ID
会将消息的大小推到1500以下。实际上,删除任何非必要参数都会做同样的事情,所以不是Twilio不喜欢Remote-Party-ID
参数,但是你的消息因为太大而被丢弃了。我们找不到INVITE的日志,这也是您看不到任何日志的原因。
在这种情况下,Twilio并不真正使用Remote-Party-ID
,特别是在呼叫者ID与From
相同的情况下,并且是一个相当长的标头。所以你的解决方案可能是最好的。
你也可以删除Allow-Events
标题,这与Twilio不支持的SUBSCRIBE
方法有关。