「ガチャ出ない」「サーバー落ちた?」に即回答。ゲームの知識を持った AI チャットボットを Zendesk で作る

「ガチャ出ない」「サーバー落ちた?」に即回答。ゲームの知識を持った AI チャットボットを Zendesk で作る

2025.12.10

こんにちは、ゲームソリューション部の入井です。
本ブログはClassmethod SaaSで加速するゲーム開発 Advent Calendar 2025の10日目のブログとなります。

https://dev.classmethod.jp/referencecat/gamesol-businesssol-advent-calendar-2025/

ソーシャルゲームなどの運営において、ユーザーからの問い合わせ対応は避けられない課題です。同じ内容の質問が短時間に大量に届き、サポートチームの対応が追いつかなくなることも珍しくありません。

本記事では、ZendeskのAIエージェント(チャットボット)機能を使って、ゲーム特有の知識を学習し、さらにゲームサーバーのステータスをリアルタイムで回答できるAIチャットボットを構築します。

使用する主な機能は以下の2つです。

  • AI エージェント Essential: ヘルプセンター(FAQ)記事を元にユーザーからの質問に対する回答を自動生成
  • AI エージェント Advanced: 外部 API との連携による高度なシナリオ対応

システムの全体像

今回構築するシステムの全体像です。プレイヤーはヘルプセンターのWeb Widgetからチャットを開始し、AI エージェントが質問内容に応じて適切な回答を返します。

スクリーンショット 2025-12-08 150851

AIエージェントEssentialは、ヘルプセンターのFAQ記事を参照して、ガチャやアカウント引き継ぎ方法など架空のゲームについての質問に回答します。

AIエージェントAdvanced は、Lambdaで構築したサーバーステータスAPIを呼び出し、リアルタイムのサーバー状況を回答します。
なお、今回は検証の便宜上Lambdaを使っていますが、実際のゲーム運用で使用する場合、それぞれの現場で使用しているヘルスチェックAPIなどを適宜使用する形になると思います。

AIエージェントEssentialによるゲームの知識を持ったチャットボット作成

ヘルプセンター(FAQサイト)の作成

AI エージェントEssentialは、FAQ記事の内容に基づいてユーザーに回答する仕組みのため、まずはヘルプセンター(FAQサイト)の作成が必要です。
専用のブランドを作成し、基本的な設定をしたうえでヘルプセンターをアクティブにします。
初期状態ではFAQ記事はサンプル記事しか用意されていないため、新しくゲームについてのFAQ記事を作成する必要があります。

手作業で記事を用意するのは大変なため、今回はナレッジビルダーを使用しました。

https://dev.classmethod.jp/articles/zendesk-faq-knowledge-builder/

ナレッジビルダーは、過去のチケットデータや入力したビジネス・サポート情報を分析して、FAQ記事を自動生成する機能です。

スクリーンショット 2025-12-04 151409

今回は、以下のようなビジネス要件を基にヘルプセンター記事を生成しました。

当社は、スマートフォン向けファンタジー RPG「エターナルクエスト」を開発・運営しているゲーム会社です。プレイヤーは、豊富なキャラクターを収集・育成し、ストーリークエストやイベント、PvP バトルを楽しめます。
【ゲームの主な特徴】
 - キャラクター収集型 RPG (ガチャシステム採用)
 - レアリティ: N、R、SR、SSR の 4 段階
 - iOS/Android 対応 (Free to Play、アプリ内課金あり)
 - 定期的なイベント開催 (討伐イベント、ランキングイベント等)
 - マルチプレイ要素 (ギルド/クラン、協力バトル)
 - ライブ運営型 (毎月の新キャラ追加、定期アップデート)

これにより、エターナルクエストという架空のゲームのためのFAQ記事がヘルプセンターに自動生成されました。

スクリーンショット 2025-12-05 112407

メッセージングチャネルの設定

Zendesk管理センターから、メッセージングチャネルとしてWeb Widget(チャット用UI)を追加します。「チャネル -> メッセージング」から「チャネルを追加」をクリックし、Web Widgetを選択します。

スクリーンショット 2025-12-05 111346

Web Widgetの基本設定を行い、先ほどの作成したヘルプセンターブランドに表示されるように指定します。

スクリーンショット 2025-12-05 111729

AIエージェントEssentialの設定

Zendesk管理センターから「AI -> AIエージェント」をクリックし、「AIエージェントを作成」をクリックします。

スクリーンショット 2025-12-05 095748

AIエージェントの名前や文章のトーン等の基本設定をした上でブランドを選択し、ヘルプセンターと連携します。これにより、AIエージェントが選択したヘルプセンターの記事を参照して回答を生成できるようになります。

スクリーンショット 2025-12-05 110930

最後に、先ほど作成したWeb WidgetにAIエージェントを割り当て、公開します。これで、指定したWeb Widgetの使用時に作成したAIエージェントが起動するようになります。

スクリーンショット 2025-12-05 111938

なお、AIエージェントはデフォルトでヘルプセンターの記事をもとに回答生成する設定になっているので、設定はここまでで完了です。

動作の検証

ヘルプセンターのWeb WidgetからAIエージェントとのチャットを開始し、ゲームに関する質問をしてみます。

スクリーンショット 2025-12-05 112600

ナレッジビルダーで作成したFAQサイトで学習した知識をもとに、キャラクター育成の方法について適切な回答が返ってきました。同時に、元になったFAQ記事も提示するようになっています。

AIエージェントAdvancedによるサーバーステータスAPI連携

AIエージェントAdvancedは、有料アドオンとして提供される高度なチャットボット機能です。AIエージェントEssentialの機能に加えて、外部APIと連携しての回答、複雑な会話フローの構築、高度な分析機能などが利用できます。

今回は、AWS Lambdaで構築したサーバーステータスAPIと連携し、プレイヤーからのサーバー状況確認リクエストにチャットボットがリアルタイムで回答できるようにします。

サーバーステータスAPIの構築

AWS Lambdaの関数URLを使って、ゲームサーバーのダミーのステータスを返すAPIを構築します。検証用のため、複雑なロジックは入れていません。

コードは以下の内容で、全体のステータスと地域別のステータスを決まった内容で返すような仕組みになっています。IS_TOKYO_DOWNフラグをtrueに変更することで、東京サーバーの障害をシミュレートできるようにしています。
(ランタイムはNode.js 20.xを使っています。)

export const handler = async (event) => {
    const IS_TOKYO_DOWN = false;  // true にすると東京サーバーダウン

    const currentTime = new Date().toISOString();

    const serverStatus = {
        status: IS_TOKYO_DOWN ? "partial_outage" : "operational",
        timestamp: currentTime,
        servers: [
            {
                id: "server-01",
                name: "Asia Pacific (Tokyo)",
                region: "ap-northeast-1",
                status: IS_TOKYO_DOWN ? "down" : "online",
                playerCount: IS_TOKYO_DOWN ? 0 : Math.floor(Math.random() * 5000) + 10000,
                maxCapacity: 20000,
                latency: IS_TOKYO_DOWN ? null : Math.floor(Math.random() * 20) + 15,
                uptime: IS_TOKYO_DOWN ? "0%" : "99.98%",
                errorMessage: IS_TOKYO_DOWN ? "接続エラー:サーバーに到達できません" : null,
                estimatedRestoreTime: IS_TOKYO_DOWN ? new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString() : null,
                lastUpdate: currentTime
            },
            {
                id: "server-02",
                name: "North America (Virginia)",
                region: "us-east-1",
                status: "online",
                playerCount: Math.floor(Math.random() * 5000) + 7000,
                maxCapacity: 20000,
                latency: Math.floor(Math.random() * 30) + 130,
                uptime: "99.95%",
                lastUpdate: currentTime
            },
            {
                id: "server-03",
                name: "Europe (Frankfurt)",
                region: "eu-central-1",
                status: "online",
                playerCount: Math.floor(Math.random() * 5000) + 5000,
                maxCapacity: 20000,
                latency: Math.floor(Math.random() * 40) + 100,
                uptime: "99.92%",
                lastUpdate: currentTime
            }
        ],
        announcement: IS_TOKYO_DOWN 
            ? "【重要】現在、東京サーバー(ap-northeast-1)で障害が発生しております。復旧作業を実施中です。ご不便をおかけして申し訳ございません。" 
            : "現在すべてのサーバーは正常に稼働しています。",
        affectedUsers: IS_TOKYO_DOWN ? "約12,000名" : null,
        incidentId: IS_TOKYO_DOWN ? "INC-20241205-001" : null
    };

    return {
        statusCode: 200,
        headers: {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            'Cache-Control': 'no-cache'
        },
        body: JSON.stringify(serverStatus, null, 2)
    };
};

AIエージェントAdvancedの基本設定

AIエージェントAdvancedはEssentialとは別に設定する必要があります。専用の管理画面にアクセスし、新しいAIエージェントを作成します。

以下のようにチャネルは「メッセージング」、業種は「ゲーム業界」にしておきます。(今回の用途で業種選択はあまり関係ないかもしれませんが)

スクリーンショット 2025-12-05 113906

AIエージェントAdvancedとZendeskは、現時点では実態として別のサービスとして稼働しています。
そのため、Zendeskのメッセージングチャネルと連携するには、AIエージェントAdvancedで「CRMインテグレーション」という設定をする必要があります。

作成したAIエージェントの設定画面から「CRMインテグレーション」設定画面を開きます。
「CRMを選択」というボタンがあるのでクリックし、表示されたポップアップでは「メッセージング」をクリックします。

スクリーンショット 2025-12-05 113952

遷移先の設定画面で、「Sunshine Conversationsを認証」をクリックします。

スクリーンショット 2025-12-05 114139

Zendeskの認証ウィンドウが開くので、サブドメインを入力してサインインし、Ultimate(AIエージェントAdvancedの提供元)の認可設定をします。

スクリーンショット 2025-12-05 114238

APIインテグレーション設定

AIエージェントAdvancedで作成したチャットボットが外部のAPIにアクセスするには、対象のエンドポイントをあらかじめ設定しておく必要があります。

APIインテグレーション設定画面で、「Game Status Check」という名前のエンドポイントを追加し、先ほど作成したLambda関数のURLを割り当てます。メソッドタイプは「GET」、認証は「不要」に設定します。

設定後、右上の「Productionをテスト」をクリックし、対象APIから正常にレスポンスが得られることを確認します。

スクリーンショット 2025-12-05 131043

チャットボットがレスポンスから必要なデータを抽出するためには、対象のプロパティを取得するJSONataクエリの設定が必要となるので、こちらも設定しておきます。全体のステータス状況を取得するためdata.status、地域別のステータス状況を取得するためdata.serversを指定します。

スクリーンショット 2025-12-05 134703

ユースケース・プロシージャの設定

AIエージェントがサーバーステータスの問い合わせを認識し、適切に対応できるよう、ユースケースとプロシージャを設定します。

ユースケースは、チャットボットの個々の回答シナリオに該当するものです。一方、プロシージャはシナリオの中の具体的なフローとなります。

ユースケースを作成するには、AIエージェントのユースケース設定画面から作成ボタンをクリックします。

スクリーンショット 2025-12-05 115104

ユースケースの設定は以下のように入力しました。名前やカスタマーリクエストの理由が、ユーザーからの質問内容にマッチした時、ユースケース内のプロシージャが実行される仕組みとなっています。

スクリーンショット 2025-12-05 115207

プロシージャに設定するフローは、AIエージェントAdvancedでは自然言語で指定できるようになっています。
例えば、以下のようにシナリオ内容をテキストで入力します。

スクリーンショット 2025-12-05 140816

すると、それをもとに以下のようなシナリオフローが自動的に生成されます。

スクリーンショット 2025-12-05 140920

自動生成されたフローが正しい内容かを確認します。

上記の画像は、先ほど設定したGame Status Check APIからサーバーステータスを確認し、最初に全体のステータスについて回答した後、ユーザーの地域を確認し、該当する地域のサーバーステータスを確認して状態を伝える、というフローになっています。

期待している通りの内容なので今回はそのまま決定しましたが、もし微調整が必要な場合は再度自然言語でAIに指示を出し、ブラッシュアップしていく必要があります。

メッセージングとAIエージェントAdvancedの紐づけ

Zendesk管理センターに戻り、AIエージェント一覧からAdvancedの設定画面を開きます。

スクリーンショット 2025-12-05 120318

先ほど作成したメッセージングWeb Widgetと紐付けます。これにより、サーバーステータスの確認ユースケース(シナリオ)がFAQサイト内のチャットボットで動作するようになります。

スクリーンショット 2025-12-05 120343

動作の検証

サーバーステータスについての問い合わせに対するチャットボットの動作を検証します。

まず、すべてのサーバーが正常に稼働している状態で質問を送り、動作を確認します。

スクリーンショット 2025-12-05 141019

全体のステータスが正常であることが確認できたので、続いてチャットボットからの指示通りプレイヤーの地域を回答します。すると、その地域のサーバーの稼働状態についても回答してくれました。

スクリーンショット 2025-12-05 141046

次に、サーバーステータスチェックLambda関数の内容を書き換えて(IS_TOKYO_DOWNフラグをtrueに変更)、東京サーバーで障害が発生しているレスポンスが出力されるようにします。

その上で、チャットボットに同様の質問を送ると、今度は以下のように動作しました。

スクリーンショット 2025-12-05 141250

スクリーンショット 2025-12-05 141323

ユーザーから確認した地域で障害が発生していることを伝え、APIから取得した復旧予定時刻をもとにプレイヤーへ適切な案内をしています。

このように、AIエージェントAdvancedを使用することで、外部のAPIリクエストの結果を踏まえて柔軟な回答が可能となります。

まとめ

今回は、ZendeskのAIエージェント機能を使って、ゲームの知識を持ったAIチャットボットを構築しました。また、サーバーステータスAPIと連携することで、プレイヤーからのゲームサーバー状況についての問い合わせにリアルタイムで対応できる仕組みを実現しました。

AIエージェントAdvancedは、今回はごく単純なユースケースに基づいて設定しましたが、同様の仕組みを応用することで、チャットボットを起点に更に高度な自動化も可能です。

この記事をシェアする

FacebookHatena blogX

関連記事