ZendeskからChatwootへ ── AIを中心にCSフローを再構築

こんにちは!AnotherBallでAIOpsを担当しているFrancisです。AIを社内オペレーションに組み込み、現場の業務改善を進めています。この記事では、カスタマーサポートの問い合わせ対応をZendeskからChatwootへ移行し、初回返信時間を1,186分から1分未満まで短縮できた経緯とその仕組みについて解説します。

Chatwootへの移行

元々CSはZendeskを利用していました。ユーザーはアプリ内の「お問い合わせ」からZendeskのフォームを送信し、CS側はZendeskのチケット画面で対応する、という形です。CS対応の効率化のためにAIを活用したいと考えていましたが、Zendeskは高度なAIカスタマイズを想定しておらず、応答フローのカスタマイズにはさまざまな有料アドオンとひと工夫や小技が必要でした。問い合わせごとに返信のトーン、テンプレートの使用有無、エスカレーションフローなどを設定したかったのですが、Zendeskではやややりづらい部分がありました。

そこで選んだのはChatwootです。Chatwootのほうはそういうカスタマイズがはるかに楽にできます。さらにホスティングプランで運用コストを抑えられますし、将来的に必要になったらオープンソース版へ移行できる選択肢もあります。オープンソースである分、機能や外部サービスとの連携の挙動がわかりやすく、トラブルシュートもしやすいのも大きなメリットです。

課題: Chatwootはチャット中心、我々はフォーム中心

以前使っていたZendeskでは、フォームで問い合わせを受け付けていましたが、Chatwootはチャットを想定したCSツールです。ただ、ほとんどの問い合わせはリアルタイム対応が不要で、むしろ最初のメッセージでできるだけ詳しく状況を書いてもらった方が解決が早いので問い合わせ導線をフォームのままにしたいと考えていました。チャット形式だと情報が足りないまま送られやすく、確認のやり取りが増えてしまうことを懸念していました。

また、問い合わせ対応には端末モデル、OSバージョン、アプリバージョンなどの情報も必要です。既存のフォームではアプリ内から送信する際にこれらが自動入力されるため、ユーザーが手動で入力する必要はありません。しかし、チャットウィジェットでこれを確実に実現するのは容易ではありませんでした。そのため、フォームでの受付を維持しつつ、各問い合わせをChatwootのネイティブ会話に変換する仕組みが必要でした。

解決策: Google フォーム + スプレッドシート + Apps Script

完全に自分でコントロールできるスタックを選びました。

  1. Google フォーム — ユーザーが使うお問い合わせフォーム
  2. Google スプレッドシート — フォームの回答がここで自動的に蓄積される
  3. Google Apps Script — ChatwootとSlackへの連携を担う

フォームが送信されると、Apps Scriptが回答内容をGoogleのサポートメールボックスへメールとして送信します。Chatwootはそのメールボックスを読み込み、届いたメールから自動的に会話を作成します。その後はAPIで問い合わせカテゴリを示すラベルと連絡先の属性を設定します。

もう一個のスクリプトはWebhookハンドラーです。Chatwootは新しいメッセージごとにmessage_createdイベントを発火するので、Apps Scriptがそれを感知しメッセージをSlackに転送します。ユーザーからのメッセージが親スレッドを作り、エージェントとAIの返信はスレッド内に投稿されます。

CSの問い合わせフロー:Google Form → Chatwoot → Slack

すべての問い合わせがGoogle Sheetに蓄積されるのが、この仕組みの最大のメリットです。生データが常にスプレッドシートにあるため、週次のCSダイジェストも自動化できました。毎週金曜日、機能リクエストを含め、直近1週間の問い合わせをLLMで分類し、日英バイリンガルのサマリーをApps ScriptでSlackに自動投稿します。

その結果、チームの反応は早く、CSを超えたアイデアも出てきました。たとえばSNSの反応にも同じようなアプローチを適用し、ユーザーがアプリをどう体験しているのかをもっと深く把握しようというアイデアがありました。ユーザーの問い合わせにただ返信するだけではなく、きちんと理解しにいくという取り組みが始まりました。

Chatwootのプロンプトエンジニアリング

AIの返信を安定させるために、プロンプト設計で工夫した点をいくつか紹介します。

  • テンプレート構造を明示する。 人間のエージェントが使っている見出し、トーンのガイドライン、締めの定型まで、プロンプトにそのまま入れています。構造がはっきり書かれていると、モデルはかなり安定して従ってくれます。

    なお、プロンプト自体は日本語ではなく英語で書いています。日本語で返信する場合でも、指示は英語の方がモデルが安定して従うことがわかりました。

    1
    2
    3
    4
    5
    6
    Role: You write professional emails on behalf of [App] Support.
    Use a greeting, structured paragraphs, and a courteous closing.
    Insert TWO line breaks between paragraphs.

    Greeting: Address the user by username (e.g. "user_12345").
    If no identifier is available, use a neutral greeting.
  • 問い合わせ種別ごとのルーティング。 問い合わせカテゴリに応じてプロンプトを切り替えています。ボットがメッセージ内容から種別を判定して適切なプロンプトを選ぶので、手動でタグ付けすたりする必要はありません。

  • エスカレーション・ロジック。 ボットが自信を持てないときに人間が対応するようにします。

結果

2月16日にGoogle フォームとChatwootを用いたこの新しい仕組みへ切り替えました。

指標 Zendesk平均(1/15〜2/15) Chatwoot平均(2/16〜2/26)
初回返信時間 1,186分(19.8時間) 約1分
解決時間 289.7時間(12.1日) 30時間(1.25日)

Zendeskの平均値はいくつかの外れ値によって引き上げられていますが、中央値は299分 / 172.8時間で、それでもChatwootの平均値を大きく上回っています。まだChatwootの10日分のデータしかないのですが、1ヶ月分のデータが揃ったら改めて見直す予定です。

初回返信が約1分なのは、会話が作成された瞬間に時間帯に関係なくAIが自動返信しているためです。人間のエージェントが対応する場合の平均返信時間は6時間46分です。

データがすべてスプレッドシートにまとまっているので、データ分析がとても楽です。問い合わせ件数の推移を追ったり、最近増え始めた不具合の兆しを早めに拾ったり、週次のバイリンガルCSダイジェストを自動配信したりすることができます。追加の有料分析機能に頼らず、必要なことが回るようになりました。

セットアップにはそれなりに手間もコストもかかりましたが、今は明らかに以前より良い状態です。自分たちでコントロールできるスタックがあり、実運用で動くAI連携があり、すぐに意思決定につなげられるデータも手に入れています。学びを一つ挙げるなら、データと連携レイヤーを自分たちで握ることです。このトレードオフが合うかどうかはチーム次第だと思いますが、AIに本気で投資して高速に改善をしたい我々のチームにとっては、よりオープンで容易にコントロールできるこのスタックがピッタリです。

採用情報

AnotherBallはエンタメとテクノロジーの交差点に立つ会社です。人々が愛するコンテンツやコミュニティとのつながりを深めるプロダクトを作りながら、その実現のためにAIをフルスタックで活用しています。

もしこういう環境に少しでも興味を持っていただけたら、ぜひ採用情報も見てみてください。

採用情報はこちら