我有一个使用Twilio可编程语音的应用程序。
该应用基本上是一个呼叫中心。部署了多个实例,每个实例都有其自己的Twilio电话号码和一组可以接听来电的人工操作员。当从客户收到实例的Twilio电话号码的GSM呼叫时,Twilio会调用我们这边的WebHook,然后我们仅从池中找到一个可用的人并返回TwiML,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Say>Hello. Connecting you to the available operator.</Say>
<Dial callerId="{callCenterNumber}">{operatorNumber}</Dial>
</Response>
现在,客户已连接到应用程序实例池中的可用人员。到目前为止,一切都很好。
现在,我要处理在最初调用的应用程序实例的池中找不到可用的运算符的情况。在那种情况下,我希望原始应用程序实例连接到另一个实例的Twilio电话号码,并被视为该实例的客户,以便原始人类客户将连接到另一个实例池中的操作员。为此,实例A只需返回<Dial callerId="{callCenterNumber}">{anotherCallCenterNumber}</Dial>
(用anotherCallCenterNumber
代替上面示例中的operatorNumber
)。
因此,不是此连接:Customer => Call Center A => Operator from A's pool
,我具有Customer => Call Center A => Call Center B => Operator from B's pool
连接。
它也可以正常工作,我可以链接更多的呼叫中心实例,直到在某个地方找到可用的操作员为止。
问题是,我想使用SIP协议而不是GSM电话号码进行实例到实例通信,因为我需要在此过程中传递一些额外的数据(语言等),以便下一个实例知道如何处理呼叫并找到合适的接线员接听。 SIP标头看起来像是传递此数据的合适解决方案。其他所有内容将保持不变。
因此,我为每个应用程序实例配置了一个SIP终结点,并以类似于常规电话号码WebHook URL的方式设置了请求WebHook URL。现在,要通过SIP拨打另一个呼叫中心实例,我返回以下TwiML:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Hello. No available operators were found. Connecting you to Call Center B.</Say>
<Dial>
<Sip>sip:[email protected]?x-customHeader=customData</Sip>
</Dial>
</Response>
[目前,我希望Twilio将调用instanceB
SIP域的WebHook,以便我可以像处理普通电话号码WebHooks一样处理呼叫并路由它。
相反,该呼叫被立即挂断,在Twilio调试器中,我看到以下警告:
32009 - The user you tried to dial is not registered with the corresponding SIP Domain
[经过研究后,我意识到必须在callcenter
SIP域中注册instanceB.sip.us1.twilio.com
端点。但是,似乎唯一的方法是使用像X-Lite或Jitsi这样的软件电话客户端应用程序。我在本地安装了X-Lite,并添加了一个callcenter
帐户。现在,当呼叫中心A接到电话并指示Twilio拨打呼叫中心B(sip:[email protected]
)时,我的本地软件电话开始响铃,如果我接听,我将连接到呼叫呼叫中心A的客户。这不是我要!
而且,我发现如果我从软件电话呼叫any地址,甚至是未注册的地址,例如sip:[email protected]
,那么奇怪的是,Twilio will会调用instanceB
SIP Domain的WebHook而没有任何抱怨。但这也不是我所需要的。我需要通过SIP进行Twilio => Twilio连接,就像使用电话号码时一样。
所以,总结一下:
The user you tried to dial is not registered with the corresponding SIP Domain
,但同时从软件电话客户端拨打相同的未注册端点时,它没有返回该错误?] >我有一个使用Twilio可编程语音的应用程序。该应用程序基本上是一个呼叫中心。部署了多个实例,每个实例都有其自己的Twilio电话号码和可用池...
很遗憾,您无法通过SIP执行此操作。 Twilio不为您托管SIP终结点。