PHPマイクロフレームワークSlimで作るTwilioコールセンターシステム
1.アプリ紹介編
2.環境設定
1.ライブラリインストール編
2.Apache mod_rewrite設定編
3.CSSとJavaScript編
の続きです。
前回までで設置と設定が終わったはず。
今回は、Runa-CCAの「Webクライアント」機能と「コールフロー」機能のうちの、「コールフロー」機能の作りについて書きます。
Twilioのコールフロー機能を考えるにあたって、フレームワーク化したいなあと思いました。
お客様がコールセンターの電話番号に電話すると、Twilioの050の電話番号に登録されている「音声通話」のURLに対して、Twilioがリクエストを投げます。そのリクエストを受けて、コールフローが起動します。
Twilioの設定で、ある050番号の音声通話のURLに、例えば「http://Runa-CCAのドメイン名/runa-cca/twilio/callflow/newservice/main」を登録しておきます。そうすると、お客様がその050番号に電話してきたら、Twilioによって音声通話のURLがリクエストされるわけです。「Apache mod_rewrite設定編」で設定した通り、/runa-ccaに来たURLは、Apacheの機能で/runa-cca/index.phpにリライトされ、処理されることになります。
ここからが”Twilioコールフローフレームワーク”になります。
以下のような構成にしました。
- 前提
- コールセンターには、コールフローがいくつもある。
- コールセンターにおいて、コールフローはビジネスロジックである。
コールセンターによってはコールフローはたくさんあります。数十とかあります。そしてコールフローは、コールセンター独自の仕組みであり、電話インタフェースと統計データベースとのやり取りを制御するものでもありますので、ビジネスロジックであろうと思います。ま、ビジネスロジックの定義は色々のようですが。
- “Twilioコールフローフレームワーク”
- index.phpは、Slimのオブジェクトを作って、ルータ(\Runa_CCA\Route.php)に登録して、Slimを実行させる。(それだけしかしない)
- Route.phpは、URLに応じ、適切なController(コントローラ)にルーティングする。(それだけしかしない)前提1の通り、コールセンターにはコールフローがいくつもある。そのため、Controllerフォルダ配下にコールフロー毎にフォルダを作って、コールフロー毎のコントローラを一括管理する。言うまでもなくnamespaceも別にする。コールフローの場合、Route.phpは\Runa_CCA\Controller\CallFlow配下の適切なコールフローを呼び出す。
- コールフロー毎のコントローラが行うのは、Model配下のコールフロービジネスロジックの呼び出しと、Twilio用のTwiML作成Viewクラスの呼び出しだけ。(それだけしかしない)
- 前提2の通り、コールフローはビジネスロジック。そのため、コールフロー本体はModel(モデル)として整理。前提1の通り、コールフローはたくさんあるので、Model配下にコールフロー毎のフォルダを作って、そこに一括管理し、コールフローのIVR処理や統計データベースへのデータ保存といった処理を実行する。(ここでがっつりと処理を実施する)
- Modelのコールフローが処理を終えたら、Controllerに一度戻し、ControllerからViewが呼ばれて、TwiMLが作成され、TwilioにResponseとして返される。(それだけしかしない)
まあ大した話ではないのですが、そんな構造にしてみたわけです。
フォルダ構造は以下の通りになります。
/var/www/html/runa-cca/ |-htdocs ... 公開用ディレクトリ | |-index.php ... すべての入り口 | |-lib ... 作成したクラスライブラリ | |-Base ... 設定クラス置き場 | |-Runa_CCA ... Runa-CCAクラス置き場 | |-Route.php ... いわゆるルータ | | | |-Controller ... コントローラクラス置き場 | | |-CallFlow ... コールフロー毎のコントローラクラス置き場 | | |-NewService ... コールフロー「NewService」のコントローラクラス置き場 | | | |-Model ... モデルクラス置き場 | | |-CallFlow ... コールフロー毎のモデルクラス置き場 | | |-NewService ... コールフロー「NewService」のモデルクラス置き場 | | | |-Model ... ビュークラス置き場 | |-templates ... テンプレートファイル
次回からはソースを追いかけながらコールフローの流れを書きます。