我有一个Twilio帐号有一个号码(比方说8881231234),我有星号框。我想使用Twilio作为Asterisk中继,以便能够以他们的费率拨打电话,并在我的Asterisk接收来自该号码的电话。
我没有找到任何规格将Asterisk与Twilio互连。是否可以设置Asterisk,以便每个拨出的呼叫都通过Twilio路由,并在我的SIP电话上拨打我的8881231234号码呼叫?
答案 0 :(得分:21)
正如下面已经指出的那样,Twilio现在可以作为SIP干线使用,您可以访问https://www.twilio.com/docs/sip-trunking获取更多信息。
这已经被弃用!!!你应该使用TWILIO自己的SIP TRUNKING ...... READ HERE
Twilio不能作为SIP干线工作......它的目标是那些想要通过其服务构建应用程序的开发人员。但是,没有什么可以阻止您构建一个应用程序,让您通过Twilio发出传出呼叫并通过星号接收来自它们的呼叫。您将需要一个HTTP服务器来返回Twilio所需的XML。
它有三个步骤:
这应该非常简单......假设您有一个twilio帐户,只需转到https://www.twilio.com/user/account/sip/domains并设置一个域名。我有一个动态IP,所以我使用了一个凭证列表(并将在第二步中使用它)。如果您有静态IP,我会完全使用它。我将假设您将您的域名称为“示例”,因此我将讨论域 example.sip.twilio.com
作为语音网址,您应该将一个指向您的网络服务器的网址(是的,您需要一个...但它可以是一个便宜的网址)到一个可以处理其请求的网址。在第三步,我将向您展示它应该返回的内容。
您需要做的第一件事是在 sip.conf 文件中添加设备
[twilio]
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
然后,在你的 extensions.conf 上使用它(我使用前缀88表示twilio ...所以如果我拨打8818881231235它将在美国拨打(888)123-1235通过twilio)
exten => _88.,1,Dial(SIP/${EXTEN:2}@twilio)
就是这样......当你拨打它时,你会达到twilio。
Twilio将调用您在第一步设置的网址。它执行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>
Aaaand就是这样,你现在正在使用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&
Aaand就是这样......你应该在上下文中处理来自分机100的来电。
更新:正如xinit在评论中所指出的,twilio可能会从任何IP ...甚至您的域名(example.sip.twilio.com)指向您到......所以你想要通过添加模板来更新你的[twilio]
设备。现在看起来应该是这样的
[twilio](twiliocaller)
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
如果您对我的工作方式感兴趣,请查看我所做的这些博客文章。从他们那里复制了很多来调整这个答案。
答案 1 :(得分:7)
Twilio似乎现在提供SIP中继。