ITぶろぐるとるのITぶろぐ日常を楽しんで。「るとるのぶろぐ」のITネタばーじょんです。replyTwilioコールセンターシステム(Twilio-MiniCC)にヒストリカルレポート機能を搭載しました。MySQLにデータを貯めるので、レポート参照はいろいろなツールを使えばいいでしょう、というのを言い訳にして、データ収集機能までの実装になります。アプリケーションなんだから、適当なところでデータベースにデータ入力しておけばいいだろう、くらいのノリだったのですが、結構大変でありました。調べたり、考えたりして、とりあえず以下の3ポイントで、取れるデータをすべて取ってみたつもりです。不要なので、標準リクエストパラメータからAccountSidは抜きました。これからの記述でおかしなところやもっとカイゼンするべき点があったら、ぜひご指摘ください。データ取得のポイントは以下の3つ。本当はIVRの分岐点でもログを取って、お客様がどのようなルートを通っているのかを把握するべきなのですが、今回は割愛しました。通話終了時Twilioのキューの考え方はこちらが参考になります。お客様とオペレータとで同じQueueに入ります。入り方が異なっていて、お客様はTwiMLのEnqueueタグ(動詞)で、オペレータはDialタグ(動詞)のQueueタグ(動詞)で入ります。はじめに、キューのお客様側(Enqueue)から出た時のデータ取得方法です。Enqueue動詞ではaction属性が設定できます。ややこしいのですが、Enqueueのaction属性は、以下の動きになります。日本語サイトはやや怪しい(一部しか翻訳されていないところがある)ので、英語のサイトから引用します。any.Twilio-MiniCCでは、今のところDial動詞のQueue動詞を使って呼をキューから出しますので、Enqueueのaction属性に指定されたURLは、接続された相手同士が切断されたときに、一度実行されることになります。(キューから出たときではありません)Enqueue動詞のaction属性でデータを取る意味は、「放棄呼」の情報を取ることができる点にあります。一般的にコールセンターにおいて、お客様がキューに入って自分から切断した場合、その呼は「放棄呼」とされます。放棄呼が発生した場合には、actionに指定してあるURLが実行されます。そのURLで、データベースにデータを登録するプログラムを書いておけば、放棄呼の情報を取得することが出来ます。具体的には、QueueResultカラムでhangupが記録されることになります。放棄呼はコールセンターにとっては良くないことです。本来受け付けるべき呼を受け付けられなかったわけですから。放棄呼のデータを収集し、対策を打つことが極めて重要です。記載はないのですが、Enqueueのaction属性は、おそらく非同期で実行されています。Basic認証を使用している場合、以下のように書くとエラーが発生します。Required」が出ます。'action.php');そのため、以下のように修正する必要があります。action.phpを置いた場所あと、Twilio-MiniCCにおいて、本機能はexit_enqueue.phpで実装されているのですが、何もレスポンスが無いとオペレータから切断したときエラーメッセージになるため、空のTwiMLを出力するようにしています。続いて、キューのオペレータ側(Queue)から出た時のデータ取得方法です。Queue動詞においては、url属性を指定できます。英語のサイトから引用します。Redirect.Queue動詞はオペレータが使うものなのですが、Queue動詞のurl属性には「お客様側」で実行したいことを書きます。オペレータとの接続前に、録音することをアナウンスするとか、そういうために使うそうです。お客様にアナウンスを流しつつ、裏でデータベースにデータを格納すれば、Queueのデータを取得できます。最後に通話終了時のデータ取得方法です。Usage」という記事に書いてありました。Requestを投げることが出来、そこでレポートを取得します。experience.非同期処理なので負担もかからずオススメということらしい。Settings」をクリック。URL」に、プログラムへのURLを書けばオッケー。通話終了後に実行されます。Basic認証を使っている場合は、先ほどのEnqueueのときと同様の書式にする必要があります。最後に、データベース構造なのですが、まず型がわかりませんでした。Twilioのサンプルをいくつか見ましたが、全部SQLiteのTEXT型になっているし。APIの資料とか見て、MySQLの型を決めましたが、これでいいのかどうかはわかりません。そもそも正規化とかしてないので、まだまだ検討が必要そうです。ヒストリカルレポート収集機能の追加と同時に、データベースアクセスをPDOにしたり、設定共通クラスを作ったりと、ソースコードをカイゼンしています。Webクライアントも作成済みなのですが、まだ公開するまでのレベルではないので、次のバージョンとします。