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

如何使用Twilio作为我的Asterisk拨打和接听电话的SIP中继?,sip,voip,asterisk,twilio,Sip,Voip,Asterisk,Twilio,我有一个Twilio帐户,它有一个号码(比如8881231234),我有一个星号框。我想使用Twilio作为一个星号中继,以便能够以他们的费率拨打电话,并在我的星号上接收来自该号码的呼叫 我还没有找到任何将Asterisk与Twilio互连的规范。是否可以设置星号,以便每个传出呼叫都通过Twilio路由,并在我的SIP电话上挂上我的88812334号码环?正如下面所指出的,Twilio现在可以作为SIP中继,您可以访问了解更多信息 这是不推荐的!!!您应该使用TWILIO自己的SIP中继 Tw

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


我还没有找到任何将Asterisk与Twilio互连的规范。是否可以设置星号,以便每个传出呼叫都通过Twilio路由,并在我的SIP电话上挂上我的88812334号码环?

正如下面所指出的,Twilio现在可以作为SIP中继,您可以访问了解更多信息


这是不推荐的!!!您应该使用TWILIO自己的SIP中继

Twilio不起SIP中继的作用。。。它的目标是希望在其服务上构建应用程序的开发人员。然而,没有什么可以阻止你构建一个应用程序,让你通过Twilio拨打外线电话,并在asterisk上接收来自他们的电话。您需要一个HTTP服务器来返回Twilio需要的XMLs

通过Twilio拨打电话 它有三个步骤:

  • 在twilio上创建域并设置用户
  • 设置你的星号,这样当你拨一个号码时,它就会到达twilio
  • 处理twilio的请求和返回(一种特殊的XML,在他们的站点上有非常好的文档记录)。几乎任何语言都有SDK,但我将保持这种响应语言的不可知性,并且只处理TwiML
  • 在twilio上创建域 这应该很简单。。。假设您有一个twilio帐户,只需转到并设置一个域。我有一个动态ip,所以我使用了一个凭证列表(并将在第二步中使用它)。如果你有静态IP,我会完全使用它。我假设您将域称为“example”,因此我将讨论域example.sip.twilio.com

    作为语音URL,您应该将指向您的web服务器的URL(是的,您需要一个……但它可以是一个便宜的)放在一个可以处理他们请求的URL上。在第三步中,我将向您展示它应该返回的确切内容

    设置你的星号,这样当你拨一个号码时,它就会到达twilio 您需要做的第一件事是在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)

    就这样。。。当你拨那个,你就到了twilio

    处理twilio的请求并返回TwiML Twilio将调用您在第一步中设置的url。它执行一个HTTP POST,该POST的参数名为To,带有星号调用的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>
    
    你需要设置一个号码来呼叫你的星号。假设您的星号域是sip.example.com,并且您希望twilio拨打分机100,那么您需要返回的内容

    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
      <Dial>
        <Sip>sip:100@sip.example.com</Sip>
      </Dial>
    </Response>
    

    如果你对我是如何做到这一点感兴趣,看看我写的这些博客吧。从他们那里复制了很多来调整这个答案


    Twilio现在似乎提供SIP中继。

    这里是Twilio福音传道者。天哪,饼干!非常感谢你发布这个绝对令人惊讶的答案。谢谢你的评论!我喜欢你的服务:)嘿,如果你有一个twimlet从To参数中提取电话号码(我在这里用PHP做的同样的事情),那就太好了,这样就有一种方法可以将Twilio用作SIP中继,而不需要一个web服务器,当你像这样呼叫时,会使用它的定价。。。右下角的这个:或者这个:?在这两种情况下,你都有两条腿,而且你都要付费,打进来的电话(假设你有一个美国电话号码),你每分钟要付1c(进来的电话费)加上0.50c的SIP电话费(在500k分钟后会下降)。因此,在twilio上,一个来电的成本为1.5c/分钟。使用同样的逻辑,如果你拨出一个电话到美国,你将支付每分钟2c+0.5c的SIP呼叫,每分钟2.5c的总和,因为偶尔会有一次错误的上下文用于传入呼叫。事实证明,twilio调用来自TwilioIP列表中包含的几个IP地址。由于[twilio]没有上下文,因此使用了默认上下文。这可以通过指定[twilio](twiliocaller)来解决。twilio现在确实为VoIP系统提供SIP中继服务。你可以参考和了解更多信息。你完全正确。我修改了我的答案来解释这一点,我也改变了被接受的答案,因为人们应该完全去那里:)
    <?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>
    
    [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
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
      <Dial>
        <Sip>sip:100@sip.example.com</Sip>
      </Dial>
    </Response>
    
    [twilio](twiliocaller)
    type = peer
    username = myusername
    remotesecret = mypassword
    host = example.sip.twilio.com
    qualify = no