以下でよく指摘されているように、Twilio は SIP トランクとして機能するようになりました。詳細については、 https://www.twilio.com/docs/sip-trunkingにアクセスしてください。
これは非推奨です!!! TWILIO 独自の SIP トランキングを使用する必要があります...こちらをお読みください
Twilio は SIP トランクとしては機能しません... サービス上でアプリケーションを構築したい開発者を対象としています。ただし、Twilio を介して発信通話を発信し、アスタリスクで通話を受信できるアプリを作成することを妨げるものは何もありません。Twilio が必要とする XML を返すには、HTTP サーバーが必要です。
Twilio を介して電話をかける
それには次の 3 つの手順があります。
- twilio でドメインを作成し、ユーザーを設定します
- 番号をダイヤルすると twilio に到達するようにアスタリスクを設定します
- twilio のリクエストを処理し、TwiML (サイトで非常に詳細に文書化されている特別な種類の XML) を返します。ほとんどすべての言語の SDK がありますが、この応答は言語にとらわれず、TwiML のみを扱います。
twilio でドメインを作成する
これは非常に簡単なはずです... twilio アカウントを持っていると仮定すると、https: //www.twilio.com/user/account/sip/domains にアクセスしてドメインを設定するだけです。私は動的 IP を持っているので、資格情報リストを使用しました (2 番目のステップでそれを使用します)。静的 IP がある場合は、それを完全に使用します。ドメインを「example」と呼んでいたと仮定して、ドメインexample.sip.twilio.comについて説明します。
音声 URL として、要求を処理できる URL に Web サーバーを指す URL を配置する必要があります。3 番目のステップでは、何を返すべきかを正確に示します。
番号をダイヤルすると 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 を呼び出します。アスタリスクが呼び出した URL をToという名前のパラメーターとして持つ HTTP POST を実行します。
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 のドメインが 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 には 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&
以上です... 内線番号 100 の着信コールは、twilio のコンテキストで処理する必要があります。
更新:コメントでxinitが指摘した[twilio]
ように、twilio は任意の IP から電話をかける可能性があります... ドメイン (example.sip.twilio.com) が指している IP であっても...それはテンプレートです。今はこんな感じのはず
[twilio](twiliocaller)
type = peer
username = myusername
remotesecret = mypassword
host = example.sip.twilio.com
qualify = no
私がどのようにしてこれに到達したかに興味がある場合は、私が行ったこれらのブログ投稿をご覧ください。この回答を微調整するために、それらから多くをコピーしました。
自宅から twilio に電話をかける
twilio からの着信