TwilioへSIPを送信する

概要

TwilioのProgrammable Voice SIP製品では、既存のSIP通信インフラ(たとえばIP-PBX, SBCなど)とTwilioとのSIPセッションを開始し、TwiMLREST APIを使用して高度な音声アプリケーションを作成できます。 Twilioが中間に入り、あなたの通信インフラ、PSTN、またはブラウザーおよびモバイルAppにルーティングされる通話を可能にします。 アプリケーションの構築とテストを始められるようにあなたの通信インフラと相互にやりとりを行えるようTwilioを構成するにあたっては、いくつかの短いステップがあります。

Programmable Voice SIP ダイアグラム

動作の仕組み

TwilioのクラウドにSIP送信を行うには、Twilio SIPドメインを作成する必要があります。 SIPドメインは、SIPのトラフィックを受け入れ可能なTwilioアカウントと紐づけられたカスタムDNSホストネームです。 もし誰かがそのドメイン(たとえば sip:hanako@example.sip.us1.twilio.com) を使用してSIPのリクエストを行なった場合、インターネットを経由してTwilioにルーティングされます。 TwilioからSIPリクエストを受信したとき、SIPドメインは認証基準の判断と、それに引き続いて、着信のSIP通話をどのように処理すべきかの指示を提供するアプケーションへのWebhookのために構成されたURLの検索に使用されます。 Twilioから開発者のアプリケーションへのデータの受け渡しを参照してください。

はじめる

コンソールにログインし、ページ左側の縦型のメニューからProgrammable Voiceを選択し、ダッシュボードに移動します。 続いて、SIPドメイン/エンドポイントにアクセスします。

ステップ1: Twilio Voice SIPドメイン/エンドポイントの作成

Voice SIPエンドポイント画面の赤い+印をクリックします

わかりやすい名前

SIPドメインに対して、MyCompanyJP などといった分かりやすい名前を付けます

SIP URI / ドメイン名

このプロパティーで、インフラから公開インターネットを経由してTwilioによってホストされた正しいサーバーにルーティングするために使用されるグローバルに一意なSIPドメインを指定できます。

SIPリクエストは下記のようなSIP URIを使用します:sip:hanako@example.sip.twilio.com

Twilioは着信リクエストを処理し、選択された認証メソッドを使用してそれを認証します。 リクエストが認証されると、続いて述べるようにリクエストされたURLのWebhookを呼び出します。 同じSIPドメイン内のすべてのユーザーは、同じアプリケーションURLにWebhookします。

ドメイン名は文字、数字、及び”-”です。標準で、すべてのアカウントのアカウントSIDがドメイン名として予約されています。

すでに存在するドメインを作成しようとすると、エラーが表示されます。 既存のドメインのサブドメインの作成は、元のドメインを所有している場合には許可されます。 たとえば、foo.example.sip.twilio.com は、すでにexample.sip.twilio.com というドメインをすでに持っている場合にのみ作成できます。 

サブアカウントでは、マスターアカウントのSIPドメインのサブドメインを作成できます。 ドメイン作成用のREST APIもあります。

ローカライズ済みSIP URI

ご使用の通信インフラに最寄りの、特定の地理的リージョンに手動で接続したい場合は、通信インフラを以下のローカライズ済みSIP URIを指してこれを行えます。

  • {example}.sip.us1.twilio.com (北米バージニア)
  • {example}.sip.us2.twilio.com (北米オレゴン)
  • {example}.sip.ie1.twilio.com (欧州アイルランド)
  • {example}.sip.de1.twilio.com (欧州 フランクフルト)
  • {example}.sip.sg1.twilio.com (アジア太平洋シンガポール)
  • {example}.sip.jp1.twilio.com (アジア太平洋東京)
  • {example}.sip.br1.twilio.com (南米サンパウロ)
  • {example}.sip.au1.twilio.com (アジア太平洋シドニー)

リクエストURL (Webhook)

SIP INVITEの受領にともなってTwilioが呼び出すWebサーバーを指し示すURLを指定してください。 URLは着信通話の処理方法を指定したTwiMLを応答しなければなりません。 代わりに、静的なTwiML Binを指し示すURLを指定することもできます。

下記は静的なTwiMLの例として使用できるURLです。 TwilioがSIP INVITEを受け取り、認証されると、INVITEを受け取って通話が確立され、発信者に対して短いメッセージを読み上げます。

http://twimlets.com/message?Message%5B0%5D=Congratulations!%20You%20just%20made%20your%20first%20call%20with%20Twilio%20SIP.

フォールバックURL

リクエストURLの呼び出しに失敗(無効なTwiMLなど)した際に呼び出される第二のURLを任意で指定することもできます。

ステータスコールバック URL

任意で、開始 (initiated)発呼中 (ringing)応答 (answered)完了 (completed)、といった通話の進行状況に応じてWebhookリクエストを送信するURLを指定できます。

認証

認証は、SIPドメインを許可されたデバイスおよびユーザーからのアクセスのみに制限します。 少なくとも、アクセス制御リストまたはクレデンシャル・リストのいずれかを構成する必要があります。 上記の両方を構成している場合、ACLとクレデンシャルリストの両方がユーザーに課されます。

IPアクセス制御リスト (ACL)

構成済みの場合、Twilioはリスト中のIPアドレスから発信(Originating)されたSIPトラフィックのみを受け入れ、その他のすべてのパケットを排除します。 IPアドレスのワイルドカードはサポートされず、完全なIPアドレスを指定しなければなりません。 IPアクセス制御リストは一つ以上のSIPドメインに対して適用できます。 IP ACL作成用のREST APIもあります。

クレデンシャルリスト

クレデンシャル・リストはあなたのSIPドメインによって受け入れられるユーザー名とパスワードの組です。

クレデンシャル・リストでは、SIP INVITEは適切なユーザー名とパスワードを要求する407 Authorization requiredで確認が行われます。

それぞれのユーザーは下記の要件に従ったパスワードを設定する必要があります。

  • 12文字以上
  • 大文字、小文字を両方入れること
  • 少なくとも1桁の数字

Twilioはユーザー名に対して提供されたパスワードを平文で保存する代わりに、パスワードはダイジェスト認証の仕様に従ってMD5ハッシュが行われます。 一旦パスワードが設定されると、Twilioは保存されたパスワードを取得するすることはできなくなります。 クレデンシャルリスト一つ以上のSIPドメインに対して適用できます。

クレデンシャル・リスト作成用のREST APIもあります。

ステップ2: TwilioのIPアドレスとポートのホワイトリストへの追加

通信インフラが通信をブロックしていないことを確認するには、ホワイトリストを更新する必要があります。 詳細については、SIPドキュメントを参照してください。

ステップ3: TwilioのSIPドメインへのSIPの送信開始

ホワイトリストの設定が終了し、SIPをTwilioに送る準備が出来ました。 ステップ1のサンプルURLを使用した場合、下記の文章が聞くことができるでしょう:

“Congratulations! You just made your first call with Twilio SIP.”

高度な機能

SIP X-ヘッダー

リモートのSIPアプリケーションとのよりよい統合のため、TwilioはSIPレスポンス・メッセージに返されるヘッダーを読み込みます。 TwilioはX-ではじまるヘッダーを読み、それらをダイアルアクションURLまたは通話スクリーニングURLに、DialSipHeader_X-ヘッダーヘッダー値の形式でコピーします。

正常な通話セットアップ(200 OKのSIPレスポンスが返されたとき)は、200 OKメッセージ中のX-ではじまるヘッダー通話スクリーニングURLに送信されます。 最終的なSIPレスポンス中のヘッダー(4xxまたは5xxメッセージ、または最終的な BYE/200)はダイアルアクションURLに送信されます。

ヘルプが必要ですか?

誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。