我有一个 Twilio 帐户,它有一个数字(比如说 8881231234),我有一个星号框。我想将 Twilio 用作 Asterisk 中继,以便能够以他们的费率拨打电话并在我的 Asterisk 上接听来自该号码的电话。
我还没有找到任何将 Asterisk 与 Twilio 互连的规范。是否可以设置 Asterisk,以便每个拨出呼叫都通过 Twilio 路由,并让我的 8881231234 号码上的呼叫在我的 SIP 电话上响铃?
正如下面明确指出的,Twilio 现在可以作为 SIP 中继工作,您可以访问https://www.twilio.com/docs/sip-trunking了解更多信息。
这已弃用!!!您应该使用 TWILIO 自己的 SIP 中继……阅读此处
Twilio 不能用作 SIP 中继……它面向希望在其服务上构建应用程序的开发人员。但是,没有什么能阻止您构建一个应用程序,该应用程序允许您通过 Twilio 拨打电话并在星号上接听他们的电话。您将需要一个 HTTP 服务器来返回 Twilio 所需的 XML。
它分为三个步骤:
这应该很简单......假设您有一个 twilio 帐户,只需转到https://www.twilio.com/user/account/sip/domains并设置一个域。我有一个动态 ip,所以我使用了一个凭证列表(并将在第二步中使用它)。如果你有静态IP,我会完全使用它。我将假设您将您的域称为“示例”,所以我将讨论域example.sip.twilio.com
作为语音 URL,您应该将指向您的 Web 服务器的 URL(是的,您需要一个......但它可以是一个便宜的)到一个可以处理他们请求的 URL。在第三步中,我将向您展示它应该返回的确切内容。
您需要做的第一件事是在sip.conf文件中添加一个设备
[twilio]
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
然后,在您的extensions.conf上使用它(我为 twilio 使用前缀 88 ......所以如果我拨打 8818881231235,它将通过 twilio 在美国拨打 (888) 123-1235)
exten => _88.,1,Dial(SIP/${EXTEN:2}@twilio)
就是这样...当您拨打该电话时,您会到达 twilio。
Twilio 将调用您在第一步中设置的 url。它会执行一个 HTTP POST,其中包含一个名为To的参数以及 Asterisk 调用的 URL……所以,如果您拨打 8818881231235,您将进入To参数
sip:18881231235@example.sip.twilio.com
您应该获取该参数并提取数字,然后返回
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial callerId="+18881231234">
<Number>18881231235</Number>
</Dial>
</Response>
如果你使用 PHP,你可以做这样的事情
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial callerId="+18881231234">
<Number><?php preg_match('/:([0-9]+)@/', $_POST['To'], $matches); echo $matches[1]; ?></Number>
</Dial>
</Response>
就是这样,您现在使用 Twilio 作为中继来拨打电话。
接收来自 Twilio 的电话更容易(当您弄清楚一些事情时)。首先,您应该为他们要求您加入白名单的每个 IP 设置一个设备,因此您应该在sip.conf 中添加
[twiliocaller](!)
context = fromtwilio
type = peer
qualify=no
allowguest=yes
[twilioip-1](twiliocaller)
host=107.21.222.153
[twilioip-2](twiliocaller)
host=107.21.211.20
[twilioip-3](twiliocaller)
host=107.21.231.147
[twilioip-4](twiliocaller)
host=54.236.81.101
[twilioip-5](twiliocaller)
host=54.236.96.128
[twilioip-6](twiliocaller)
host=54.236.97.29
[twilioip-7](twiliocaller)
host=54.236.97.135
[twilioip-8](twiliocaller)
host=54.232.85.81
[twilioip-9](twiliocaller)
host=54.232.85.82
[twilioip-10](twiliocaller)
host=54.232.85.84
[twilioip-11](twiliocaller)
host=54.232.85.85
[twilioip-12](twiliocaller)
host=54.228.219.168
[twilioip-13](twiliocaller)
host=54.228.233.229
[twilioip-14](twiliocaller)
host=176.34.236.224
[twilioip-15](twiliocaller)
host=176.34.236.247
[twilioip-16](twiliocaller)
host=46.137.219.1
[twilioip-17](twiliocaller)
host=46.137.219.3
[twilioip-18](twiliocaller)
host=46.137.219.35
[twilioip-19](twiliocaller)
host=46.137.219.135
[twilioip-20](twiliocaller)
host=54.249.244.21
[twilioip-21](twiliocaller)
host=54.249.244.24
[twilioip-22](twiliocaller)
host=54.249.244.27
[twilioip-23](twiliocaller)
host=54.249.244.28
您需要设置一个号码来呼叫您的 Asterisk。假设您的 Asterisk 的域是 sip.example.com 并且您希望 twilio 响铃分机 100,您需要返回的东西
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Sip>sip:100@sip.example.com</Sip>
</Dial>
</Response>
你不需要使用服务器,因为这个 b/c twilio 有 twimlets...所以,使用 echo twimlet,你可以设置你的号码指向http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3CResponse%3E%3CDial%3E%3CSip%3Esip%3A100%40sip.example.com%3C%2FSip%3E%3C%2FDial%3E%3C%2FResponse%3E&
就是这样……您应该在 fromtwilio 的上下文中处理分机 100 的来电。
更新:正如xinit在评论中指出的那样,twilio 可能会从任何 ip 给您打电话……甚至是您的域(example.sip.twilio.com)指向的那个……所以您想[twilio]
通过添加来更新您的设备它是模板。现在应该是这样的
[twilio](twiliocaller)
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
如果您对我如何做到这一点感兴趣,请查看我所做的这些博客文章。从他们那里复制了很多来调整这个答案。
Twilio 似乎现在提供 SIP 中继。