9

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

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

4

2 回答 2

22

正如下面明确指出的,Twilio 现在可以作为 SIP 中继工作,您可以访问https://www.twilio.com/docs/sip-trunking了解更多信息。


这已弃用!!!您应该使用 TWILIO 自己的 SIP 中继……阅读此处

Twilio 不能用作 SIP 中继……它面向希望在其服务上构建应用程序的开发人员。但是,没有什么能阻止您构建一个应用程序,该应用程序允许您通过 Twilio 拨打电话并在星号上接听他们的电话。您将需要一个 HTTP 服务器来返回 Twilio 所需的 XML。

通过 Twilio 拨打电话

它分为三个步骤:

  1. 在 twilio 创建域并设置用户
  2. 设置您的 Asterisk,以便当您拨打一个号码时,它会到达 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。在第三步中,我将向您展示它应该返回的确切内容。

设置您的 Asterisk,以便当您拨打一个号码时,它会到达 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)

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

就是这样...当您拨打该电话时,您会到达 twilio。

处理 twilio 的请求并返回 TwiML

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

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

就是这样……您应该在 fromtwilio 的上下文中处理分机 100 的来电。

更新:正如xinit在评论中指出的那样,twilio 可能会从任何 ip 给您打电话……甚至是您的域(example.sip.twilio.com)指向的那个……所以您想[twilio]通过添加来更新您的设备它是模板。现在应该是这样的

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

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

从家里拨打电话到 twilio

接听来自 twilio 的电话

于 2013-11-07T22:42:47.890 回答
8

Twilio 似乎现在提供 SIP 中继。

于 2014-11-21T22:14:32.720 回答