LoginSignup
2
5

SIPレジストレーションで内線通話をするためのコード

Last updated at Posted at 2019-04-25

2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。

はじめに

みなさん、こんにちは。
Twilioエバンジェリストの高橋です。

今回は、TwilioのSIPレジストレーションをつかって、レジストされた端末同士の通話をするコードをご紹介します。

SIPレジストレーションについて

Twilio内にあるレジストレーションサーバーをつかって、SIPクライアントをレジストするための機能で、SIPインターフェースのオプションになります。
SIPレジストレーションについては、こちらの記事もご覧ください。

今回は、すでにレジストレーションされている端末同士で内線通話するというシナリオで進めます。
レジストされていれば、それだけで内線通話ができるわけではなく、Twilio内部で転送をする必要があります。具体的にいうと、内線番号1111(端末A)という端末から、内線番号2222(端末B)に対して発信をすると、端末Aから発信依頼を受けたSIPインターフェースが、そのコールをどうするかをユーザに問い合わせます(Webhook)。ここで、端末Bに対して転送するTwiMLを返却することで初めてTwilioから端末Bに呼び出しがかかり、応答することで端末Aと端末Bの通話が成立します。

今回は、TwilioからのWebhookに応答するためのコードをご紹介します。

ハンズオン

シナリオ

今回は以下のシナリオで進めます。

  • 内線番号が1111と2222という2台のSIPクライアントがあるとします。
  • すでにSIPレジストレーションの設定が終わっていて、SIPクライアントからは発信ができる状態になっています。
  • 内線同士の通話のみをサポートし、外線発信はしません。

作業手順

  1. Twilio Functionsを使って、転送するためのコードを登録します。
  2. 作成したFunctionのURLをSIPインターフェースのWebhook先に登録します。

Twilio Functionsを使って、転送するためのコードを登録します

  • Twilioの管理コンソールにログインします。
  • スライドメニューを開き、Runtime -> Functionsを選択します。
  • Create a Functionボタンを押します。
  • ダイアログが表示されたら**+Blankを選択してCreate**ボタンを押します。
  • FUNCTION NAMEに、「SipToSip」と入力します。
  • PATHには、「/sip-to-sip」と入力します。
  • CODE欄には、以下のプログラムを貼り付けます。
exports.handler = function(context, event, callback) {
    // 発信元番号(SIPアドレス形式)を取得
    let from = event.From || '';
    console.log(from);
  
    // 発信先番号(SIPアドレス形式)を取得
    let to = event.To || '';
    console.log(to);
  
    // SIPアドレス(sip:0AB〜J@xxxxxxx)を分解して0AB〜Jの部分と、SIPドメインの部分を取得する
    const sipTo = to.indexOf("@") > 0 ? to.substring(4, to.indexOf("@")) : '';
    const sipDomain = to.indexOf("@") > 0 ? to.substring(to.indexOf("@")) : '';

    // Fromアドレスの内線番号部分を取り出す
    const sipFrom = from.indexOf("@") > 0 ? from.substring(4, from.indexOf("@")) : '';

    console.log(sipTo, sipFrom, sipDomain);

    // TwiMLを作成
    let twiml = new Twilio.twiml.VoiceResponse();
  
    let dialParams = {};
    dialParams.callerId = sipFrom;
    dialParams.answerOnBridge = true;
    dial = twiml.dial(dialParams);
    dial.sip({
    }, "sip:" + sipTo + sipDomain);
    callback(null, twiml);
};

  • Saveボタンを押して保存します。
  • 保存ができたら、PATH欄の右にあるコピーボタンを押して、URLをコピーします。

作成したFunctionのURLをSIPインターフェースのWebhook先に登録します

  • Twilio管理コンソールのスライドメニューからProgrammable Voiceを選択します。
  • SIPドメインを選択して、すでに作成済みのSIPドメインをクリックします。
  • Voice Configurationsの中の、REQUEST URL欄に、先程コピーしておいたURLを貼り付けます。
  • Saveボタンを押して設定を保存します。

以上で設定はすべて完了です。
実際に内線番号で電話をかけて、通話ができることを確認してください。


Twilio(トゥイリオ)とは

https://twilio.kddi-web.com
Twilioは音声通話、メッセージング(SMS/チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5