<Gather> Tips
<Gather> とは
<Gather> は Twilio でアナウンスを流し、番号を受け付ける IVR を実現する仕組みです。
<Gather> で Twilio に問い合わせを受ける内容を Tips としてまとめてみました。もし <Gather> を使ったことがなければ是非チュートリアルをご覧ください。
留守番電話判定
例えば障害通知で誰かが電話応答するまで連続架電したい場合、statusCallback が completed になるまで架電します。
しかし留守番電話の応答も completed になるため、その先に進みません。留守番電話は人間的には応答していないと見なしたいですが、電話的には応答したと見なされます。
そんな留守番電話の判定に <Gather> を利用することができます。
留守番電話はプッシュを押さないため「障害対応するには 1 を押してください。今は障害対応できないため次の方に回すには 9 を押してください。」とすることで Digits が返らなければ留守番電話と見なして次に架電することができます。
連続架電は下記を参照ください。
なお、Twilio には留守番電話検出 ( Answering Machine Detection ) がありますが、2018/12/11 現在、日本には対応していません。
未入力判定
<Gather> は電話を切ったのか、未入力で終わった ( timeout した ) のか分かりません。
TwiMLアプリでユーザートラッキングするなら気をつけろ - Qiita で非常に面白い判定方法が紹介されています。
Twilio のサポートでは Digits がない場合、電話が answered になった時間から、/action に来た時間の差を求め、timeout 以下なら電話を切ったか finishOnKey だけを押したとし、timeout 後の時間であれば未入力と見なす方法を案内しています。
ただ時間は処理時間などで数秒の誤差が生じるため完璧ではありません。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="https://example.com/action" timeout="50">
<Say language="ja-JP">四桁の認証番号を入力してください</Say>
</Gather>
<Redirect>https://example.com/action</Redirect>
</Response>
録音
受信
<Gather> の制約で <Record> を利用することができません。そのため「通話着信時」にプログラムを指定して Call SID を取得し、Record API をご利用ください。
発信
<Dial record="record-from-answer"> や Record API をご利用ください。
皆さまが Gather で何を開発されるのか、目にするのが待ちきれません!