如何使用Twilio作为我的Asterisk的SIP中继来拨打和接听电话?

g3r*_*rv4 7 voip asterisk sip twilio

我有一个Twilio帐号,有一个号码(比方说8881231234),我有星号框.我想使用Twilio作为Asterisk主干,能够以他们的费率拨打电话,并在我的Asterisk接收来自该号码的电话.

我没有找到任何规格将Asterisk与Twilio互连.是否可以设置Asterisk,以便每个拨出的呼叫都通过Twilio路由,并在我的SIP电话上拨打8881231234号码呼叫?

g3r*_*rv4 21

正如下面已经指出的那样,Twilio现在可以作为SIP干线运行,您可以访问https://www.twilio.com/docs/sip-trunking了解更多信息.


这是折旧!!! 你应该使用TWILIO自己的SIP TRUNKING ......在这里阅读

Twilio不能用作SIP中继......它针对的是想要通过其服务构建应用程序的开发人员.但是,没有什么可以阻止您构建一个应用程序,让您通过Twilio发出传出呼叫并通过星号接收来自它们的呼叫.您将需要一个HTTP服务器来返回Twilio所需的XML.

通过Twilio发出呼叫

它有三个步骤:

  1. 在twilio创建一个域并设置用户
  2. 设置星号,以便在拨号时达到twilio
  3. 处理twilio的请求并返回TwiML (一种特殊的XML,在他们的网站上有很好的记录).他们几乎可以使用任何语言的SDK,但我会保持这种与语言无关的响应,并且只处理TwiML

在twilio创建一个域

这应该非常简单......假设您有一个twilio帐户,只需访问https://www.twilio.com/user/account/sip/domains并设置域名.我有一个动态IP,所以我使用了一个凭证列表(并将在第二步中使用它).如果您有静态IP,我会完全使用它.我假设你把你的域称为"示例",所以我将谈论域example.sip.twilio.com

作为语音URL,您应该将一个指向您的Web服务器的URL(是的,您需要一个......但它可以是一个便宜的URL)到一个可以处理其请求的URL.在第三步,我会告诉你它应该返回什么.

设置星号,以便在拨号时达到twilio

您需要做的第一件事是在sip.conf文件中添加一个设备

[twilio]
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
Run Code Online (Sandbox Code Playgroud)

然后,在您的extensions.conf上使用它(我使用前缀88表示twilio ...所以如果我拨打8818881231235它将通过twilio拨打(888)123-1235在美国)

exten => _88.,1,Dial(SIP/${EXTEN:2}@twilio)
Run Code Online (Sandbox Code Playgroud)

就是这样......当你拨打它时,你会达到twilio.

处理twilio的请求并返回TwiML

Twilio将调用您在第一步设置的URL.它做了一个HTTP POST,它有一个名为To的参数,带有你的Asterisk调用的URL ...所以,如果你拨打8818881231235,你会进入To参数

sip:18881231235@example.sip.twilio.com
Run Code Online (Sandbox Code Playgroud)

您应该获取该参数并提取数字,然后返回

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial callerId="+18881231234">
    <Number>18881231235</Number>
  </Dial>
</Response>
Run Code Online (Sandbox Code Playgroud)

如果你使用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>
Run Code Online (Sandbox Code Playgroud)

Aaaand就是这样,你现在正在使用Twilio作为主叫来拨打电话.

接收来自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
Run Code Online (Sandbox Code Playgroud)

您需要设置一个号码来呼叫您的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>
Run Code Online (Sandbox Code Playgroud)

你不需要使用服务器这个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就是这样......你应该在来自twilio的上下文中处理分机100处的来电.

更新:正如xinit在评论中所指出的,twilio可能会从任何IP呼叫你...甚至你的域名(example.sip.twilio.com)指向...所以你想要[twilio]通过添加来更新你的设备它是模板.现在看起来应该是这样的

[twilio](twiliocaller)
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
Run Code Online (Sandbox Code Playgroud)

如果您对我的工作方式感兴趣,请查看我所做的这些博客文章.从他们复制了很多来调整这个答案.

打电话从家到twilio

接收来自twilio的电话


小智 7

Twilio似乎现在提供SIP中继.