Twilio の Call(通話) の概念を知ろう
こんにちは、本間です。
今回は久々の Twilio の話題。
Twilio で電話を受けて、誰かと話をする。 一見、”通話” は一つだけに見えますが、Twilio 内部では二つの通話が成り立っていることになります。
この Call(通話) の概要を知っておくと、Twilio でかかる料金についてや、通話をアップデートして保留や再開などを実装するときに役立ちます。
着信・発信は全て Twilio を経由する
このことを知っておけば、ほとんどOKです。概要の図を以下に示します。
実際に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プログラミングが可能になります。参考になりましたら幸いです。