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

时间:2013-11-07 22:42:48

标签: sip voip asterisk twilio

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

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

2 个答案:

答案 0 :(得分:21)

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


这已经被弃用!!!你应该使用TWILIO自己的SIP TRUNKING ...... READ HERE

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

通过Twilio发出呼叫

它有三个步骤:

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

    创建域名

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

    作为语音网址,您应该将一个指向您的网络服务器的网址(是的,您需要一个...但它可以是一个便宜的网址)到一个可以处理其请求的网址。在第三步,我将向您展示它应该返回的内容。

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

    您需要做的第一件事是在 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的请求并返回TwiML

    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的电话

    接收来自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
    

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

    Making calls from home to twilio

    Receiving calls from twilio

答案 1 :(得分:7)

Twilio似乎现在提供SIP中继。