PHPおよびLaravelを使用した動的なコールセンター
このチュートリアルでは、顧客からサポート担当者への通話の振り分けを自動化する方法についてご紹介します。 顧客は製品を選択でき、最良のサポート体験を得るためにTaskRouterがその製品のスペシャリストへのコンタクトを試みる間、待つことになります。 通話できるスタッフがいない場合、アプリケーションは顧客の電話番号と選択された製品を保存して、後々担当者が顧客に電話を折り返せるようにします。
これが、アプリケーションが高次で行う内容です:
- TaskRouter REST APIを使用してワークスペースを構成します。
- 着信通話を待機し、エンドユーザーがプッシュボタンを使って製品を選択できるようにします。
- 選択された製品でタスクを作成し、TaskRouterに処理を行わせます。
- 担当者が顧客にコールバックできるように、不在着信を記録しておきます。
Workspaceを構成する
TaskRouterに指示を与えてタスクを処理するには、ワークスペースを構成することが必要です。 TaskRouterコンソールまたはTaskRouter REST APIを通じてプログラムからこれを行うことが可能です。
ワークスペースは、TaskRouterアプリケーションのコンテナー要素です。 属性には以下のようなものがあります:
このAPI向けにクライアントを構築するには、システム変数としてTwilioコンソールで参照できる TWILIO_ACCOUNT_SID
および TWILIO_AUTH_TOKEN
が必要です。 workspace:create
artisanコマンドはTwilio PHPライブラリーによって提供される Twilio\Rest\Client
を作成します。 このクライアントはTaskRouterワークフローの作成に関連する全ロジックをカプセル化するWorkspaceFacadeによって使用されます。
次は、このコマンドを見てみましょう。
CreateWorkspace Artisan コマンド
このアプリケーションでは、workspace:create
Artisanコマンドはワークスペースをゼロから構築するために通話を WorkspaceFacade
クラスに周到に準備するために使用されます。 CreateWorkspace
はArtisanコマンドの後ろ盾となるPHPクラスです。 これは workspace.json
によって提供されるデータを使用し、3つの引数が必要になります。
host
- Twilioがリクエストを送信できる公開URLURLはクラウドサービス、またはローカル・アプリケーションをインターネットに公開できるngrokになります。bob_phone
- Programmable SMSのスペシャリスト、Bobの電話番号です。alice_phone
- Programmable Voiceのスペシャリスト、Aliceの電話番号です。
createWorkspaceConfig
関数は workspace.json
からワークスペースの構成を読み込むために使われます。
さて、すべてのステップにおける詳細を確認しましょう。 Workspaceの作成から始めます。
Workspaceを作成する
ワークスペースを作成する前に、識別子として同一の friendlyName
を削除する必要があります。 ワークスペースを作成するには、friendlyName
、及びワークスペースでイベントがトリガーされるたびに呼び出されるURLを含む eventCallbackUrl
を提供することが必要です。
ピッカピカのWorkspaceが作成されました。今度はWorkerが必要になります。 次のステップでこれらを作成しましょう。
Workerを作成する
これから、BobとAliceという2つのワーカーを作成します。 これらはそれぞれ2つの属性を持っています: 電話番号 contact_uri
、およびそのワーカーが特化している製品の一覧 products
です。 また、それぞれのワーカーについて activity_sid
および名前を指定する必要もあります。 選択されたアクティビティーはワーカーの状態を定義します。
Workerの作成後は、Task Queueをセットアップします。
Task Queueを作成する
続いて、Task Queueをセットアップします。 それぞれには名前と、それからWorkerと対応づけるための式であるtargetWorkers
プロパティーがあります。 今回のTask Queueには以下のものがあります:
SMS
"products HAS \"ProgrammableSMS\""
式を使用して、BobのようなProgrammable SMSに精通したワーカーを対象にします。Voice
同様に"products HAS \"ProgrammableVoice\""
式を使用して、Programmable Voiceに精通したワーカーAliceを対象とします。All
- この待ち行列はすべてのユーザーを対象とし、選択された製品についての精通した担当者がいない場合に使用されます。 ここでは、"1==1"
式が使用できます。
Workspace、Worker、そしてTask Queueが揃いました。 残るは? Workflowです。 次はその作成方法を見てみましょう。
ワークフローを作成する
最後に、下記のパラメーターを使用してワークフローをセットアップします:
friendlyName
ワークフローの名前として。assignmentCallbackUrl
このワークフローがワーカーにタスクを割り当てる際にリクエストの発行される公開URLです。次のステップで、実装方法を見ていきます。taskReservationTimeout
ワーカーがタスクを処理するまでの待ち時間です。configuration
タスクをタスク待ち行列に配置するルールのセットです。振り分け構成はタスクの属性を受け取り、タスク待ち行列にそれを突き合わせます。 このアプリケーションのワークフローは、次のように定義されます:selected_product=="ProgrammableSMS"
expression forSMS
Task Queue. この式は、selected_product
属性としてProgrammableSMS
の任意のタスクに対応します。selected_product=="ProgrammableVoice
Voice
タスク待ち行列用の式です。
これでWorkspaceのセットアップが完了しました。 さて、いよいよこれを使用して通話をルーティングする方法を見ていきましょう。
Twilioのリクエストを処理する
通話が着信すると、Twilioは電話番号の構成ページに指定されたURLにリクエストを発行します。
そして、エンドポイントはリクエストを処理し、TwiMLレスポンスを生成します。 ここではSay動詞を使用して、ユーザーに代替製品と、それを選択できるように対応するキーを提示します。 Gather動詞はユーザーの押したプッシュボタンを取得できます。
顧客に製品を選択するよう尋ねたので、その選択に基づいて適切なTaskを作成する
タスクを作成する
これは前の手順で Gather
動詞の action
URLとして表されたエンドポイントのセットです。 ユーザーが通話中にプッシュボタンを押すと、リクエストがこのエンドポイントに発行されます。 このリクエストには押されたプッシュボタンの番号を保持する Digits
パラメーターがあります。 Task
は selected_product
属性として押された番号に基づいて作成されます。 ワークフローはこのタスクの属性を受け取り、対応するタスク待ち行列を探すために構成された式で突き合わせを行い、適切かつ対応可能なワーカーが割り当てられ、それを処理します。
workflowSid
属性を伴うEnqueue
動詞を使用して、TaskRouterと統合します。 すると、TaskRouterがタスクを処理できるワーカーを検索を試みる間、音声通話を保留にします。
TaskをTwilioに送信したら、Workerの使用するTaskRouterでそのタスクを実行させるよう指示する方法を確認しましょう。
Workerを割り当てる
TaskRouterがワーカーを選択すると、次の処理が実行されます。
- タスクの割り当て状況は
reserved
に設定されます。 - 予約 (Reservation) インスタンスが生成され、タスクが選択されたワーカーにリンクしています。
- 同時に予約 (Reservation) が作成されると、
workspace:create
Gradleタスクを使用して構成されたワークフローの AssignmentCallbackURL にPOSTリクエストが発行されます。リクエストにはタスクの全詳細、選択されたワーカー、および予約が含まれます。
割り当てコールバックの処理は、ワーカーがタスクを処理する方法を指示できるという点で、TaskRouterアプリケーションの構築において鍵となる要素です。 SMS、メール、プッシュ通知を送信したり、あるいは通話を発信できました。
Enqueue
動詞を使用して通話中にこのタスクを作成したので、TaskRouterに通話を待ち行列から取り出して、ワーカーにダイアルするよう指示しましょう。 to
パラメーターに電話番号を指定しない場合、TaskRouterはワーカーの contact_uri
属性を選択します。
また通話の終了後、TaskRouterにどのアクティビティーが割り当てられるか知らせる post_work_activity_sid
も送信します。
これで、Taskが適切にルーティングされました。 次の手順では不在着信の扱いについて見ていきましょう。
不在着信を収集する
このエンドポイントは、各TaskRouterイベントがトリガーされると呼び出されます。 このアプリケーションでは、不在着信の収集を試みて workflow.timeout
イベントを処理することにしましょう。 このイベントはタスクがワークフロー構成で設定した期限を過ぎた場合、または受付可のワーカーがいない場合にトリガーされます。
ここでは、TaskRouterClientを使用して、この通話を留守番電話Twimletに振り分けます。 Twimletは音声通話用の小さなWebアプリケーションです。 このTwimletは Say
動詞を使用して TwiML
レスポンスを生成し、そして Record
動詞を使用してメッセージを録音します。 録音されたメッセージはテキスト化され、構成済のメールアドレスを送信されます。
また、task.canceled
もリッスンします。 これは担当者が割り当てられる前に顧客が電話を切ったときにトリガーされ、タスクが取り消されます。 このイベントをキャプチャーすると、ワークフローが時間切れになる前に電話を切った顧客の情報を収集できます。
アプリケーションのほとんどの機能が実装されました。 最後の仕上げはWorkerがプレゼンス(在籍)ステータスを変更できるようにすることです。 次はその方法を見てみましょう。
WorkerのActivityを変更する
このエンドポイントを作成したことで、ワーカーは "On" または "Off" のコマンドをSMSメッセージでサポート・ラインに送信して、受付可のステータスを変更できます。
これは、ワーカーが電話を取りこぼしたときにアクティビティーが Offline
に変更される点で重要です。 このとき、ワーカーにはSMSが受信され、アクティビティーが変更されたことが知らされ、そして On
コマンドを返信することで再度着信通話を受けられるようにすることができます。
おめでとうございます! このチュートリアルはおしまいです。 ご覧いただけるように、TwilioのTaskRouterの使用はいたって簡単です。
関連トピック
Twilio を使う PHP 開発者であれば、以下のチュートリアルもお楽しみください。
音声通話またはSMSのテキスト・メッセージで行うアンケートで、構造化データをエンドユーザーから素早く収集しましょう。さぁ、はじめましょう!
LaravelとTwilioを使用して、到着予定通知を実装する方法について学びます。
これは役に立ちましたか?
このチュートリアルをお読みいただき、ありがとうございます。ご意見やご感想などございましたら、ぜひお聞かせください。 ご意見やご感想などございましたら、ぜひお聞かせください。 @twilioにツイートして、ご意見をお寄せください!
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。