Level up your Twilio API skills in TwilioQuest, an educational game for Mac, Windows, and Linux. Download Now

メニュー

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

PHPおよびLaravelを使用した動的なコールセンター

このチュートリアルでは、顧客からサポート担当者への通話の振り分けを自動化する方法についてご紹介します。 顧客は製品を選択でき、最良のサポート体験を得るためにTaskRouterがその製品のスペシャリストへのコンタクトを試みる間、待つことになります。 通話できるスタッフがいない場合、アプリケーションは顧客の電話番号と選択された製品を保存して、後々担当者が顧客に電話を折り返せるようにします。

これが、アプリケーションが高次で行う内容です:

  1. TaskRouter REST APIを使用してワークスペースを構成します。
  2. 着信通話を待機し、エンドユーザーがプッシュボタンを使って製品を選択できるようにします。
  3. 選択された製品でタスクを作成し、TaskRouterに処理を行わせます。
  4. 担当者が顧客にコールバックできるように、不在着信を記録しておきます。
はじめましょう!

Workspaceを構成する

TaskRouterに指示を与えてタスクを処理するには、ワークスペースを構成することが必要です。 TaskRouterコンソールまたはTaskRouter REST APIを通じてプログラムからこれを行うことが可能です。

ワークスペースは、TaskRouterアプリケーションのコンテナー要素です。 属性には以下のようなものがあります:

  • タスク - 担当者に連絡しようとしている顧客を表します。
  • ワーカー - タスクをこなすべき担当者です。
  • タスク待ち行列 - 複数のワーカーによって処理されるタスクを保持します。
  • ワークフロー - タスクをタスク待ち行列に配置する役目を追います。
  • アクティビティー - ワーカーの状態の候補で、たとえば待機中、オフライン、取り込み中、などです。
        
        
        
        
        resources/workspace.json

        Workspaceの構成

        resources/workspace.json

        このAPI向けにクライアントを構築するには、システム変数としてTwilioコンソールで参照できる TWILIO_ACCOUNT_SID および TWILIO_AUTH_TOKEN が必要です。 workspace:create artisanコマンドはTwilio PHPライブラリーによって提供される Twilio\Rest\Client を作成します。 このクライアントはTaskRouterワークフローの作成に関連する全ロジックをカプセル化するWorkspaceFacadeによって使用されます。

        次は、このコマンドを見てみましょう。

        CreateWorkspace Artisan コマンド

        CreateWorkspace Artisan コマンド

        このアプリケーションでは、workspace:create Artisanコマンドはワークスペースをゼロから構築するために通話を WorkspaceFacade クラスに周到に準備するために使用されます。 CreateWorkspace はArtisanコマンドの後ろ盾となるPHPクラスです。 これは workspace.json によって提供されるデータを使用し、3つの引数が必要になります。

        1. host - Twilioがリクエストを送信できる公開URLURLはクラウドサービス、またはローカル・アプリケーションをインターネットに公開できるngrokになります。
        2. bob_phone - Programmable SMSのスペシャリスト、Bobの電話番号です。
        3. alice_phone - Programmable Voiceのスペシャリスト、Aliceの電話番号です。

        createWorkspaceConfig 関数は workspace.json からワークスペースの構成を読み込むために使われます。

              
              
              
              
              app/Console/Commands/CreateWorkspace.php

              CreateWorkspace Artisanコマンド

              app/Console/Commands/CreateWorkspace.php

              さて、すべてのステップにおける詳細を確認しましょう。 Workspaceの作成から始めます。

              新規Workspaceの作成方法を確認する

              Workspaceを作成する

              ワークスペースを作成する前に、識別子として同一の friendlyName を削除する必要があります。 ワークスペースを作成するには、friendlyName、及びワークスペースでイベントがトリガーされるたびに呼び出されるURLを含む eventCallbackUrl を提供することが必要です。

                    
                    
                    
                    
                    app/TaskRouter/WorkspaceFacade.php

                    ワークスペースの作成

                    app/TaskRouter/WorkspaceFacade.php

                    ピッカピカのWorkspaceが作成されました。今度はWorkerが必要になります。 次のステップでこれらを作成しましょう。

                    Workerをいくつか作成する方法を確認する

                    Workerを作成する

                    これから、BobとAliceという2つのワーカーを作成します。 これらはそれぞれ2つの属性を持っています: 電話番号 contact_uri 、およびそのワーカーが特化している製品の一覧 products です。 また、それぞれのワーカーについて activity_sid および名前を指定する必要もあります。 選択されたアクティビティーはワーカーの状態を定義します。

                          
                          
                          
                          
                          app/Console/Commands/CreateWorkspace.php

                          Workerを作成する

                          app/Console/Commands/CreateWorkspace.php

                          Workerの作成後は、Task Queueをセットアップします。

                          Task Queueの作成方法を確認する

                          Task Queueを作成する

                          続いて、Task Queueをセットアップします。 それぞれには名前と、それからWorkerと対応づけるためのであるtargetWorkersプロパティーがあります。 今回のTask Queueには以下のものがあります:

                          1. SMS "products HAS \"ProgrammableSMS\"" 式を使用して、BobのようなProgrammable SMSに精通したワーカーを対象にします。
                          2. Voice 同様に "products HAS \"ProgrammableVoice\"" 式を使用して、Programmable Voiceに精通したワーカーAliceを対象とします。
                          3. All - この待ち行列はすべてのユーザーを対象とし、選択された製品についての精通した担当者がいない場合に使用されます。 ここでは、"1==1" 式が使用できます。
                                
                                
                                
                                
                                app/Console/Commands/CreateWorkspace.php

                                Task Queueを作成する

                                app/Console/Commands/CreateWorkspace.php

                                Workspace、Worker、そしてTask Queueが揃いました。 残るは? Workflowです。 次はその作成方法を見てみましょう。

                                Workflowを作成するコードを確認する

                                ワークフローを作成する

                                最後に、下記のパラメーターを使用してワークフローをセットアップします:

                                1. friendlyName ワークフローの名前として。
                                2. assignmentCallbackUrl このワークフローがワーカーにタスクを割り当てる際にリクエストの発行される公開URLです。次のステップで、実装方法を見ていきます。
                                3. taskReservationTimeout ワーカーがタスクを処理するまでの待ち時間です。
                                4. configuration タスクをタスク待ち行列に配置するルールのセットです。振り分け構成はタスクの属性を受け取り、タスク待ち行列にそれを突き合わせます。 このアプリケーションのワークフローは、次のように定義されます:
                                  1. selected_product=="ProgrammableSMS" expression for SMS Task Queue. この式は、selected_product 属性として ProgrammableSMS の任意のタスクに対応します。
                                  2. selected_product=="ProgrammableVoice Voice タスク待ち行列用の式です。
                                      
                                      
                                      
                                      
                                      app/Console/Commands/CreateWorkspace.php

                                      ワークフローを作成する

                                      app/Console/Commands/CreateWorkspace.php

                                      これでWorkspaceのセットアップが完了しました。 さて、いよいよこれを使用して通話をルーティングする方法を見ていきましょう。

                                      受信するTwilioのリクエストの処理方法を確認する

                                      Twilioのリクエストを処理する

                                      通話が着信すると、Twilioは電話番号の構成ページに指定されたURLにリクエストを発行します。

                                      そして、エンドポイントはリクエストを処理し、TwiMLレスポンスを生成します。 ここではSay動詞を使用して、ユーザーに代替製品と、それを選択できるように対応するキーを提示します。 Gather動詞はユーザーの押したプッシュボタンを取得できます。

                                            
                                            
                                            
                                            
                                            app/Http/Controllers/IncomingCallController.php

                                            着信通話を処理する

                                            app/Http/Controllers/IncomingCallController.php

                                            顧客に製品を選択するよう尋ねたので、その選択に基づいて適切なTaskを作成する

                                            Taskの作成方法を確認する

                                            タスクを作成する

                                            これは前の手順で Gather 動詞の action URLとして表されたエンドポイントのセットです。 ユーザーが通話中にプッシュボタンを押すと、リクエストがこのエンドポイントに発行されます。 このリクエストには押されたプッシュボタンの番号を保持する Digits パラメーターがあります。 Taskselected_product 属性として押された番号に基づいて作成されます。 ワークフローはこのタスクの属性を受け取り、対応するタスク待ち行列を探すために構成された式で突き合わせを行い、適切かつ対応可能なワーカーが割り当てられ、それを処理します。

                                            workflowSid 属性を伴うEnqueue 動詞を使用して、TaskRouterと統合します。 すると、TaskRouterがタスクを処理できるワーカーを検索を試みる間、音声通話を保留にします。

                                                  
                                                  
                                                  
                                                  
                                                  app/Http/Controllers/EnqueueCallController.php

                                                  タスクを作成する

                                                  app/Http/Controllers/EnqueueCallController.php

                                                  TaskをTwilioに送信したら、Workerの使用するTaskRouterでそのタスクを実行させるよう指示する方法を確認しましょう。

                                                  Workerの割り当て方法

                                                  Workerを割り当てる

                                                  TaskRouterがワーカーを選択すると、次の処理が実行されます。

                                                  1. タスクの割り当て状況は reserved に設定されます。
                                                  2. 予約 (Reservation) インスタンスが生成され、タスクが選択されたワーカーにリンクしています。
                                                  3. 同時に予約 (Reservation) が作成されると、workspace:create Gradleタスクを使用して構成されたワークフローの AssignmentCallbackURL にPOSTリクエストが発行されます。リクエストにはタスクの全詳細、選択されたワーカー、および予約が含まれます。

                                                  割り当てコールバックの処理は、ワーカーがタスクを処理する方法を指示できるという点で、TaskRouterアプリケーションの構築において鍵となる要素です。 SMS、メール、プッシュ通知を送信したり、あるいは通話を発信できました。

                                                  Enqueue 動詞を使用して通話中にこのタスクを作成したので、TaskRouterに通話を待ち行列から取り出して、ワーカーにダイアルするよう指示しましょう。 to パラメーターに電話番号を指定しない場合、TaskRouterはワーカーの contact_uri 属性を選択します。

                                                  また通話の終了後、TaskRouterにどのアクティビティーが割り当てられるか知らせる post_work_activity_sid も送信します。

                                                        
                                                        
                                                        
                                                        
                                                        app/Http/Controllers/CallbackController.php

                                                        Workerを割り当てる

                                                        app/Http/Controllers/CallbackController.php

                                                        これで、Taskが適切にルーティングされました。 次の手順では不在着信の扱いについて見ていきましょう。

                                                        不在着信の収集方法を確認する

                                                        不在着信を収集する

                                                        このエンドポイントは、各TaskRouterイベントがトリガーされると呼び出されます。 このアプリケーションでは、不在着信の収集を試みて workflow.timeout イベントを処理することにしましょう。 このイベントはタスクがワークフロー構成で設定した期限を過ぎた場合、または受付可のワーカーがいない場合にトリガーされます。

                                                        ここでは、TaskRouterClientを使用して、この通話を留守番電話Twimletに振り分けます。 Twimletは音声通話用の小さなWebアプリケーションです。 このTwimletは Say 動詞を使用して TwiML レスポンスを生成し、そして Record 動詞を使用してメッセージを録音します。 録音されたメッセージはテキスト化され、構成済のメールアドレスを送信されます。

                                                        また、task.canceled もリッスンします。 これは担当者が割り当てられる前に顧客が電話を切ったときにトリガーされ、タスクが取り消されます。 このイベントをキャプチャーすると、ワークフローが時間切れになる前に電話を切った顧客の情報を収集できます。

                                                              
                                                              
                                                              
                                                              
                                                              app/Http/Controllers/CallbackController.php

                                                              不在着信を収集する

                                                              app/Http/Controllers/CallbackController.php

                                                              アプリケーションのほとんどの機能が実装されました。 最後の仕上げはWorkerがプレゼンス(在籍)ステータスを変更できるようにすることです。 次はその方法を見てみましょう。

                                                              Workerがプレゼンスステータスを変更できるようにする方法を確認する

                                                              WorkerのActivityを変更する

                                                              このエンドポイントを作成したことで、ワーカーは "On" または "Off" のコマンドをSMSメッセージでサポート・ラインに送信して、受付可のステータスを変更できます。

                                                              これは、ワーカーが電話を取りこぼしたときにアクティビティーが Offline に変更される点で重要です。 このとき、ワーカーにはSMSが受信され、アクティビティーが変更されたことが知らされ、そして On コマンドを返信することで再度着信通話を受けられるようにすることができます。

                                                                    
                                                                    
                                                                    
                                                                    
                                                                    app/Http/Controllers/MessageController.php

                                                                    Workerのステータスを更新する

                                                                    app/Http/Controllers/MessageController.php

                                                                    おめでとうございます! このチュートリアルはおしまいです。 ご覧いただけるように、TwilioのTaskRouterの使用はいたって簡単です。

                                                                    関連トピック

                                                                    関連トピック

                                                                    Twilio を使う PHP 開発者であれば、以下のチュートリアルもお楽しみください。

                                                                    Automated-Survey

                                                                    音声通話またはSMSのテキスト・メッセージで行うアンケートで、構造化データをエンドユーザーから素早く収集しましょう。さぁ、はじめましょう!

                                                                    ETA 通知

                                                                    LaravelとTwilioを使用して、到着予定通知を実装する方法について学びます。

                                                                    これは役に立ちましたか?

                                                                    このチュートリアルをお読みいただき、ありがとうございます。ご意見やご感想などございましたら、ぜひお聞かせください。 ご意見やご感想などございましたら、ぜひお聞かせください。 @twilioにツイートして、ご意見をお寄せください!

                                                                    Mario Celi David Prothero Agustin Camino Kat King
                                                                    Rate this page:

                                                                    ヘルプが必要ですか?

                                                                    誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。