クラウド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 に収容


いいなと思ったら応援しよう!

ピックアップされています

Twilio

  • 13本

コメント

ログイン または 会員登録 するとコメントできます。
夢はパグいぬになること[esc]:wq!
クラウドPBX、twilio で着信|むりどん
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1