https://d226lax1qjow5r.cloudfront.net/blog/blogposts/build-a-simple-customer-support-channel-with-whatsapp/Blog_WhatsApp_CustomerService_1200x600.png

WhatsAppとLaravelでシンプルなカスタマーサポートチャンネルを構築

最終更新日 November 19, 2025

所要時間:2 分

カスタマ サポートの最近の傾向の一つは、専用のマルチチャネルライブサポートを持つことです。10年前、これはあなたのウェブサイトの右下にあるポップアップボックスであった可能性が高いですが、WhatsAppのようなプラットフォームやRCSのようなより近代的なSMSサービスを使用して対話することがますます一般的になってきています。この記事では、ヘルパーエージェントの電話番号リストを取得し、受信したWhatsAppメッセージを各エージェントの専用番号にマッチングするLaravelアプリケーションを起動します。

TLDR コードはこちら.

前提条件

アプリの起動

まず、アプリのコードをGitHubから取得する必要がある。ターミナルに次のように入力する:

git clone git@github.com:Vonage-Community/blog-messages-laravel_whatsapp_callcenter.git

次に、アプリケーションの依存関係を取得する必要がある:

composer install
npm i

最後に、マイグレーションを実行し、フロントエンドのアセットサーバーをdevモードで実行します(これは、アプリがLivewireとBladeで得られる定型テンプレートから適応されているためです):

php artisan migrate
npm run dev

定義されているルートは /エージェントで、そのアドレスにアクセスすると、セットアップ・ページが表示されるはずだ:

Screenshot of the app’s default screen with no configuration added yetStyling courtesy of Laravel Livewire Flux UI

Vonageの設定

プライベートキーを取得し、Vonageダッシュボードでアプリケーションをセットアップするまでは、まだ何もできません。

API設定ページを開く API設定ページを開き、Vonage API KeyとSecretにアクセスしてください。両者は以下のスクリーンショットのように表示されます。APIキーはページの上部にあり、APIシークレットにアクセスするには、"Account secret "サブセクションを参照してください。

注:以前に作成したAPIシークレットを覚えていない場合は、"+ Create new secret "をクリックし、安全に保存してください。

秘密鍵をダウンロードしたら、その名前が private.keyという名前であることを確認し、アプリケーションディレクトリのルートに移動します。今回のアプリケーションはメッセージサンドボックスを使用します。その代わり、Vonageからアプリケーションテスト用の番号が発行されます。

メッセージの右側メニューにある「メッセージサンドボックス」セクションにアクセスしてください。WhatsAppの場合、指示が表示されます:

Screenshot showing the Vonage Messages Sandbox where a QR code can be used to configure your deviceScan the QR code and follow the instructionsこれらの指示に従うだけでなく、パスフレーズを使うのはアプリをテストする直前だけにしてください。短時間でアクセスがタイムアウトしてしまうからです。

最後の設定は .envファイルを設定することである。このファイルには3つの変数を定義する必要がある:

VONAGE_PRIVATE_KEY_PATH=./private.key
VONAGE_APPLICATION_ID=your_application_id
VONAGE_FROM_NUMBER=your_sandbox_number

VONAGE_PRIVATE_KEY_PATHプロジェクト・ルートに private.keyをプロジェクトルートに置くことで、キーファイルのコードで正しいインポートをカバーできます。アプリケーションIDと、ダッシュボードのサンドボックスで指定されたサンドボックス番号を追加します。

ングロク

次に、顧客からのWebhookを読み込めるように、自分のマシンの外部にアプリケーションを公開する必要がある。これにはNgrokを使うことをお勧めする。

ngrok http 8080 // <- your port to forward here

NgrokはパブリックIPアドレスを返す。このアドレスと /ウェブフックuri をサンドボックスのダッシュボードページに追加する必要があります。サンドボックスのページに戻って下にスクロールすると、webhooks のボックスが 2 つあるはずです:

Screenshot of the Vonage Sandbox webhooks configuration with the public ngrok address added.Put your public webhooks route into the Inbound messages field.インバウンドのウェブフックにしか興味がないので、ステータスにはダミーの値を入れることができます。これで設定が完了したので、アプリのダッシュボードでエージェントに番号を追加します。

Screenshot of the app showing the active agent waiting to be assignedYes, it’s a fake number!そこで、このアプリが今すべきことは、受信した顧客メッセージにエージェントを接続することです。これは、以下のコードを使用して、各入力テキストを読み込むことによって行います:

 public function handle(Request $request): JsonResponse
   {
       Log::info('Webhook received', [
           'headers' => $request->headers->all(),
           'body' => $request->all(),
       ]);

       $data = $request->all();
       $number = $data['from'];

       if (Agent::where('phone_number', $number)->exists()) {
           $this->incomingAgentWebhook($data);

           return response()->json(['status' => 'success', 'message' => 'Webhook processed']);
       }

       $this->incomingCustomerWebhook($data);

       return response()->json(['status' => 'success', 'message' => 'Webhook processed']);
   }

コード内のロジックは、受信テキストがエージェント(割り当てられた顧客に返信する)からのものなのか、それとも顧客からのメッセージなのかを判断しなければならないことがわかります。もしエージェントが割り当てられていなければ、エージェントへの接続を作成し、エージェントに転送します。エージェントが割り当てられている場合、テキストは割り当てられたエージェントに直接転送されます。ダッシュボードには、すべてのアクティブな接続が表示されます:

Screenshot of the app dashboard showing the new active connection.We have a connection!これでアクティブな接続ができました!エージェントと顧客はお互いに話すことができます。

Screenshot showing the agent and customer talking on the customer’s deviceHere’s your chat!

結論

これで完成だ!がエージェントと顧客の間でどのようにロジックを組み立てるか見たければ、コードをチェックしてみてください。 WebhookControllerがエージェントと顧客間のロジックをどのように処理しているか見てみましょう。LaravelでRCSメッセージを送信する方法など、他のチュートリアルもご覧ください。

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

シェア:

https://a.storyblok.com/f/270183/400x385/12b3020c69/james-seconde.png
James SecondeシニアPHPデベロッパー

スタンダップ・コメディーの学位論文を持つ俳優の訓練を受け、ミートアップ・シーンを経てPHP開発に携わるようになった。技術について話したり書いたり、レコード・コレクションから変わったレコードを再生したり買ったりしています。