如何通过 SIP 将一个 Twilio 应用程序实例连接到另一个?

How to connect one Twilio application instance to another via SIP?

我有一个使用 Twilio 可编程语音的应用程序。

该应用基本上是一个呼叫中心。部署了多个实例,每个实例都有自己的 Twilio phone 号码和一组可以接听来电的可用人工接线员。当收到客户对实例的 Twilio phone 号码的 GSM 呼叫时,Twilio 调用我们这边的 WebHook,然后我们只需从池中找到一个可用的人和 return 一个像这样的 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 phone 号码并被视为该实例的客户,以便原始人类客户将连接到另一个实例池中的操作员。为了实现这一点,实例 A 只需 returns <Dial callerId="{callCenterNumber}">{anotherCallCenterNumber}</Dial>(在上面的示例中拨打 anotherCallCenterNumber 而不是 operatorNumber)。

所以,我有 Customer => Call Center A => Call Center B => Operator from B's pool 连接,而不是这个连接:Customer => Call Center A => Operator from A's pool

它也工作正常,我可以链接更多的呼叫中心实例,直到在某处找到可用的接线员。

问题是,我想使用 SIP 协议进行 instance-to-instance 通信而不是 GSM phone 号码,因为我需要在此过程中传递一些额外的数据(语言等),所以下一个实例知道如何处理呼叫并找到合适的接线员来接听它。 SIP headers 看起来是传递此数据的合适解决方案。其他一切都将保持不变。

因此,我为每个应用程序实例配置了一个 SIP 端点,并以类似于常规 Phone Number WebHook URL 的方式设置请求 WebHook URL。现在,要通过 SIP 拨打另一个呼叫中心实例,我 return 以下 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:callcenter@instanceB.sip.us1.twilio.com?x-customHeader=customData</Sip>
    </Dial>
</Response>

此时,我预计 Twilio 将调用 instanceB SIP 域的 WebHook,因此我可以处理呼叫并按照我在常规 Phone Number WebHook 中使用的相同方式路由它。

取而代之的是,调用立即中断,在 Twilio 调试器中我看到以下警告:

32009 - The user you tried to dial is not registered with the corresponding SIP Domain

经过一些研究,我意识到 callcenter 端点必须在 instanceB.sip.us1.twilio.com SIP 域中注册。但是,似乎唯一的方法是使用像 X-Lite 或 Jitsi 这样的软 phone 客户端应用程序。我在本地安装了 X-Lite 并添加了一个 callcenter 帐户。现在,当呼叫中心 A 接到电话并指示 Twilio 拨打呼叫中心 B (sip:callcenter@instanceB.sip.us1.twilio.com) 时,我的本地软 phone 开始响铃,如果我接听,我将连接到呼叫呼叫的客户中心A,这根本不是我想要的!

此外,我发现如果我从 softphone 调用 any 地址,即使是 sip:unknown@instanceB.sip.us1.twilio.com 这样未注册的地址,那么奇怪的是 Twilio 调用 instanceB SIP 域的 WebHook 没有任何抱怨。但这也不是我需要的。我需要 Twilio => Twilio 通过 SIP 连接的方式与使用 Phone 号码时的方式相同。

所以,总结一下:

  1. 所描述的 Twilio-to-Twilio 通过 SIP 通信的场景是否完全可能,与 Twilio-to-Twilio 通过 Phone 号码的方式相同?
  2. 为什么 Twilio return 在收到指示其拨打未注册的 SIP 端点的 TwiML 时出现错误 The user you tried to dial is not registered with the corresponding SIP Domain,但同时它不会 return 该错误我正在从 softphone 客户端拨打相同的未注册端点?

很遗憾,您不能通过 SIP 执行此操作。 Twilio 不会为您托管 SIP 端点。