Twilio の Queue の概要と注意点
こんにちは、本間です。
本日はTwilioのQueueに焦点を当てて、特筆すべき点を挙げていきたいと思います。Twilioは簡単!だけでなく、Twilioでこんなことまでできる!ということを知っていただければ幸いです。
Queue の概要
Queueとは通話を待機させる部屋のようなものです。通話は基本的に2つの間の会話をつなぐものですが、Queueにより片方だけで通話を成立させたままにしておくことができます。Queueで待たされている側は音楽を流すなどで待機します。
Queueにより、例えば先日紹介した通話の保留や、着電量が多いコールセンターなどで音楽を流して待たせるといった、いわゆるキューイングの機能を実装することができます。ちなみに弊社で提供している CallConnectではこのどちらも実装し、ユーザーの皆様に手軽にご利用できるようになっています。
Queueの待ち部屋に入れるには、待ち部屋に入れる方の通話に対し、TwiMLのEnqueue を発行します。
保留機能では、Twilioの通話の update を利用し指定のAction URLでEnqueueを発行します。キューイングでは着信時に電話番号で指定するリクエスト URL でEnqueueを発行します。
また、待っている間の音楽や音声などもTwiMLを使って指定可能です。Twilioでは、現在の待ち人数や平均待ち時間なども取得可能です。詳細は Enqueue のドキュメントをご参照ください。
そしてオペレーターは、そのQueue(待ち部屋)に対してDial(発信)します。これにより順番に通話が開始されます。
Queue の注意点
実際に使う上での注意点を挙げます。
Rest API から Friendly Name で Queue を取得できない
Queue の Rest API を用いれば、指定のQueue が今どんな状態か(平均待ち時間や待ち人数、待っているメンバーの情報など) を取得できます。これはQueueを実装するならほとんどの確率で利用するRest APIです。
これらの情報を取得するには、Queueの情報を取ってこないといけないのですが、 Enqueue で指定した任意の名前を元に Rest API では取ってくることができません。Rest API で取ってこれるのは、Queueの全てか、QueueSidを指定して一個を取得するかの2択しかありません。
つまり、Queue の Rest API を使いたいのであれば、Enqueueで作る待ち部屋をあらかじめ REST API で作っておく必要があります。そこで得られたQueueのSIDをデータベースか何かで取ってくることで、待ち人数や待っているメンバーの情報を取得することができるようになります。
例えばCallConenct ではAさんが通話を保留した上で、Bさんがその保留に発信して通話を再開することができます。この際もBさんがQueueに待っているメンバーの電話番号などを取得するために、Rest API からQueueで待っている人の電話番号を取得しています。
このように本格的にQueueを利用するのであれば、 Queue での Rest API の使用は必須とも言えます。ですので、必ず Queue事前に作成し、QueueSIDをデータベースに保存するようにしましょう。
Queue に待ちが誰もいなかった場合の挙動
Queueで相手を待たせていた時、相手が待ちきれなくて通話を切ってしまった場合、どうなるのでしょうか。
この時、 Dial Queue すると次の人がキューに入るのを待つか、タイムアウト時間が経過するのを待ちます。つまり基本的には”誰か来るのを待つ”という仕組みになっています。
これをうまく工夫し、誰もいなかったら”待っていた人が通話を切りましたよ” とアナウンスしましょう。これを実現するもっとも簡単な方法は、Dial Queue時のタイムアウトを1秒にすることです。Queueに誰もいなかった場合はaction URL 先で DequeueResultがqueue-emptyとして渡されてきます。つまり、このDequeueResultがきた場合だけ”誰ももいません”アナウンスをすればうまく実現できます。
デフォルトでは誰もいない時にQueueにDialすると無音状態が続いてしまいます。ぜひ工夫してオペレーターが混乱しないようにしましょう。
おわりに
QueueはTwilioではあまりスポットに当たりにくい機能ですが、実際に利用すると本格的なコールセンターの機能を実現できます。もし興味あればぜひご利用してみてください。