クラウドPBX、twilio で着信

前回は、クラウドPBX twilio に接続した SIPクライアントから外線発信をやりました。

今回は続きです。twilio にサインアップし、twilio console が使える状態になっていて、実験用の 2つの SIPクライアントがつながっていて、外線用の 050番号が取得済みという前提で進めていきます。

twilio での着信はとてもカンタンです。通話を目的としない着信(たとえば、定形メッセイジを読み上げるだけ)であれば、カンタンな設定をするだけ(TwiML Bins)でできてしまいます。こちらは後々紹介するとして、この記事では外線からの着信を、人間(SIPクライアント)に接続して、人間対人間が通話する仕組みを作ります。

先に言っておくとこれは単純な IP電話(VoIP)であって、これを構築したところでクラウドPBX である twilio を使うメリットはまったくありません。それどころか、twilio は発信の通話料が高い(約5.5~21円/1分)上に、着信するときも(微々たるものですが)通話料が掛かります。

これは技術的な話ですが、外線(PSTN網)~twilio と twilio~SIPクライアントは別の通話チャンネルです。通話中はこれを内部でブリッジします。外線(PSTN網)~twilio は純粋に通話料がかからないのですが、twilio~SIPクライアントでは所定の通話料が掛かります。(約0.5円/1分)

twilio で IP電話システムを構築する上で便利な機能との連携は、のちのちご紹介しておきます。

SIPクライアントから 050番号を使って発信するときに、Studio を使ってルーティングを指示しました。

050番号への着信の場合も考え方は同じです。Studio 以外にも、TwiML BinFunction を使うこともできます。これらは今後、紹介します。


画像1

まず、twilio console にログインし、Studio Dashboard から新しい Studio を作ります。今回は着信なので、Inbound という名前にしました。名前はわかりやすければなんでもいいです。

前回と同じです。CONNECT CALL TO をドラッグして、TriggerIncoming Call と接続します。

connect_call_1 のプロパティを設定します。CONNECT CALL TOSIP Endpoint にします。ここは SIP URI を記述します。

Username 3001 につなぐようにしましょう。Username 3001 の SIP URI は、sip:3001@fugafuga.sip.twilio.com でしたね。このまま、記述します。

「Save」をクリックして設定を保存し、右上の「Publish」をクリックします。

ちなみに、一度作った Studio の名称を変更したい場合は、Trigger をクリックし、FLOW NAME を編集すれば反映されます。


画像2

いま作った Studio を 050番号に紐付けます。

Phone NumbersManage NumbersActive Numbers と進み、設定に使う 050番号をクリックします。


画像3

A CALL COMES INStudio Flow を選択し、いま作った Studio(Inbound)を指定します。

これで設定は完了です。固定電話や携帯電話からこの 050番号に掛けてみてください。


画像4

今回は、内線3001 につないだので、スマホアプリの GS Wave に掛かってきます。

例によって、発信元番号が E.164形式で表示されます。

ここまでの設定だけでも使う分には問題ないのですが、やはり E.164形式の電話番号は見慣れないものがあります。これを、日本ローカルのドメスティックフォーマットに変えてやりましょう。

変えるところは、前回と同じ、Studio の変数にフィルタを掛けてやるだけです。


画像5

発信元の情報は、CALLER ID です。デフォルトでは、{{contat.channel.address}} になっています。ここには発信元の電話番号が E.164形式で入っています。

ここにフィルタを掛けてやります。フィルタの記述は、

{{contact.channel.address | remove_first: '+81' | prepend: '0'}}

になります。先頭の +81 を削除、先頭に 0 を付与するだけのカンタンなフィルタですね。

「Save」で保存して「Publish」したら、電話してみます。


画像6

はい。見慣れたドメスティックフォーマットになっていますね。

いまのままだと、050番号に掛かってきた着信は、どこかの SIPクライアントでしか取れません。外線(PSTN網)からの着信に対し、複数の SIPクライアントを呼び出す設定を作ってみましょう。

この制御は Studio だけで作るのは困難です。ここで登場するのが、TwiML Bin です。TwiML は XML(HTML?)のようなマークアップ言語で制御を直感的に書いていくことができます。

twilio の最大の売りが、この TwiML を使った電話の制御です。非プログラマーでもカンタンに記述していくことができます。

twilio console の TwiML Bins から、新しい TwiML Bin を作成します。(似たような名前の TwiML というのもありますが、こちらはアプリです)


画像8

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Sip>3001@fugafuga.sip.twilio.com</Sip>
    <Sip>3002@fugafuga.sip.twilio.com</Sip>
  </Dial>
</Response>

こまかい説明は割愛します。TwiML で複数の SIP URI を呼び出すように記述します。

「Save」をクリックしたら、PropertiesURL をクリップボードにコピーしておきます。(右側のアイコンをクリックするだけです)


画像9

Studio に戻って先ほど作った Inbound を編集します。

CONNECT CALL TO はもう使わないので消しちゃって構いません。代わりに、ADD TWIML RIDIRECT を追加し、TriggerIncoming Call と接続します。

配置された redirect_1 をクリックし、プロパティの URL欄に先ほどクリップボードにコピーした URL を貼り付けます。

「Save」して「Publish」します。


画像7

実はこの機能、実装しただけでは動作しません。設定の変更が必要です。

Programmable VoiceSettings へ進んでください。パスワードの入力が求められます。

Enhanced Programmable SIP Features が DISABLED になっているので、ENABLED に変更し、「Save」します。

この設定を変えることで、同時に 10本までの SIP に同時に発信することができるようになります。


実はこの実装を行ったことにより、先ほどのフィルタを使った E.164形式から日本ドメスティックフォーマットへの変換が行われなくなってしまいます。

TwiML Bin だけでフィルタのような文字列操作を行うのは困難です。そこで、ちょっと裏技的な使い方ですが、Studio の方で変換した文字列を作っておいて、TwiML Bin を呼び出すときのパラメータとして渡してやって、それを使うことにします。

まず、Studio (の Inbound)を編集します。

画像10

redirect_1 の URL を使って TwiML Bin を呼び出すところですが、URL の後ろにパラメータを付けることができます。

ここで、?CallerId={{contact.channel.address | remove_first: '+81' | prepend: '0'}} を付けることによって、日本ドメスティック番号を値渡しします。


追記:

国際電話がかかってきたとき、これだとフィルタが不十分でした。例えば、米国の番号 +1-920-990-0999 からの通話だと、E.164形式は +19209900999 となり、上記フィルタを通ったあとは、0+19209900999 となってしまいます。さらに、値渡しは URL を使うため、「+」は「半角スペース」にデコードされてしまいます。

そこで、上記フィルタを修正しました。

?CallerId={{contact.channel.address | replace_first: '+81', '0' | replace: '+', '%2B' }}

これで、+81 から始まる日本の国内通話の場合は、0 から始まるドメスティック表現になり、その他の国際電話は、先頭の +%2B (デコードすると、+ になる)に変換されて渡されます。

追記ここまで


画像11

受け取った TwiML Bin 側では、{{変数名}} で値を参照できます。

今回は、CallerId というキー(変数名)を使ったので、これを使って、Dialタグに、

callerId="{{CallerId}}"

を追加することで、発信元の番号として日本ドメスティック番号を SIPクライアントに通知するようにします。

TwiML Bin は、Mustache という簡易テンプレートエンジンを使っているらしく、このようなカンタンな変数程度であれば扱うことができます。


最後に、同時呼び出しではなく順次呼び出しする場合は、TwiML Bin の Dialタグに、 sequential="true" を追加します。その他、呼び出しの Timeout など、細かい制御も可能です。

次回は、内線同士の通話を解説します。


目次

twilio で電話をクラウド化

クラウドPBX、twilio で 050番号から外線発信

クラウドPBX twilio で着信 (この記事)

クラウドPBX、twilio で内線通話

twilio に SIPクライアントを追加するときの注意(特にスマホ)

クラウドPBX、twilio を VoIPフォンで使う(Panasonic KX-UT248)

VoIP回線でファックスを使う

twilio + GRANDSTREAM GRP2613

twilio + GRANDSTREAM GXP1625

twilio + GRANDSTREAM VoIPフォンでカスタム保留音

アナログ電話回線を FXO ATA、Grandstream HT813 を使って Twilio に収容


この記事が気に入ったらサポートをしてみませんか?