我没有找到任何将Asterisk与Twilio连接的规格说明。是否可以设置Asterisk,使得每个外向呼叫都通过Twilio路由,并使我的SIP电话响铃接听我8881231234号码上的电话?
如下所述,Twilio现在可以作为SIP线路工作,您可以访问https://www.twilio.com/docs/sip-trunking了解更多信息。
此版本已废弃!!!您应该使用TWILIO自己的SIP TRUNKING...请单击此处阅读
Twilio不支持作为SIP线路工作... 它是面向想要基于其服务构建应用程序的开发人员。但是,并没有什么阻止您构建一个允许您通过Twilio拨出呼叫并在asterisk上从它们接收呼叫的应用程序。您需要一个HTTP服务器来返回Twilio要求的XMLs。
需要三个步骤:
这应该是非常直接的......假设您有一个Twilio帐户,只需转到https://www.twilio.com/user/account/sip/domains并设置一个域。我有一个动态IP,所以我使用了凭据列表(并将在第2步中使用)。如果您有静态IP, 可以直接使用。我假设您称呼域为“example”,所以我将讨论域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文件中使用它(我使用前缀88呼叫Twilio...所以如果我拨打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,您需要设置以下内容:
<Dial>
<Sip>sip:100@sip.example.com</Sip>
</Dial>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Sip>sip:100@sip.example.com</Sip>
</Dial>
</Response>
如果您使用Twilio提供的Twimlets,您不需要使用服务器来完成此操作...因此,使用回声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)指向的IP地址...所以您需要通过将其添加到模板来更新[twilio]
设备。现在它应该看起来像这样:
[twilio](twiliocaller)
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
如果您对我是如何得到这个答案感兴趣,可以查看我写的这些博客文章。 我从中复制了很多内容来调整这个答案。
从家里拨打 Twilio 电话
接收来自 Twilio 的电话