Article

ブログ

2016/01/26

Twilio の Call(通話) の概念を知ろう

こんにちは、本間です。

今回は久々の Twilio の話題。

Twilio で電話を受けて、誰かと話をする。 一見、”通話” は一つだけに見えますが、Twilio 内部では二つの通話が成り立っていることになります。

この Call(通話) の概要を知っておくと、Twilio でかかる料金についてや、通話をアップデートして保留や再開などを実装するときに役立ちます。

着信・発信は全て Twilio を経由する

このことを知っておけば、ほとんどOKです。概要の図を以下に示します。

Twilioの通話

実際にTwilioを使うときは、 IVR(自動電話応答)なども利用するかと思いますが、その時は “Twilio へ着信”しか通信が発生していない状態です。そのあとに1を押してどこかにつなげるとなると、Twilio への着信と発信が同時に行われる状態になります。つまり、誰かと話している状態なら、それは着信と発信がTwilioで発生していることになります。どちらも課金対象になります。

このことを踏まえて Twilio の料金表を見れば、理解しやすいと思います。

Twilio と相手が接続されている通話を更新する

Twilioで着信し、誰かに転送する一連のアクションを起こした後に Twilio のログを見ると、2つの通話が出来上がっています。

1つはTwilioへ発信しているCall。2つ目はTwilioから相手に発信しているCallです。後者は prentCallSid というパラメータを持っていて、1つ目のCallを参照することができます。

Twilio の Client を使っていると、ここで頭を悩ます問題が起きます。着信と発信とで取ってこれる通話の種類が違うのです。 通話中の CallSid は、 Twilio.Device.activeConnection().parameters.CallSid で現在の通話を取得できます。

着信の時は From: Twilio, To: Client 。 発信の時は From: Client, To: Twilio になります。この通話をアップデートして保留にさせても意味がありません。必ずTwilioと相手電話の通話をアップデートする必要があります。

それぞれ通話の REST API を利用します。着信時は Call の parentCallSid の通話を。発信時は Call の List API で ParentCallSid を指定することで取得した通話を。それぞれの通話をアップデートすることで保留や転送を実装できます。

慣れないうちは、Twilio ログを見よう

Twilio のダッシュボードの通話ログに 通話の全てが表現されます。どんな電話が来てどんな命令を下して、最終的にどんなパラメータが送られたか。Twilio で本格的なアプリを作るならログは必須とも言えるページになります。活用していきましょう。

はじめのうちはTwilioの通話の概念を理解するのは難しいと思います。私も最近ようやくわかってきたくらいです。しかしTwilio の”通話”を知ると、より強力なTwilioプログラミングが可能になります。参考になりましたら幸いです。