見出し画像

GPTsとスプレッドシートを連携してDB追記が簡単なカスタマーサポートbotの作り方

この記事ではスプレッドシートに回答のジャンルと回答内容を記録しておくことで、質問の内容に応じてジャンルを選び、そのジャンルの中から回答を選び、質問者に回答を送るというGPTsの作り方を紹介します。

回答のジャンルを間に挟むことによって、回答の精度の向上とインプットできる情報量の増加を目的としています。


実装の手順

1.スプレッドシートを用意して拡張機能からApps Scriptを立ち上げる

Apps Scriptの場所

スプレッドシートにはテスト用のデータを格納しておいてください。

2.Apps Scriptに以下のコードを貼り付け、スプレッドシートのIDの部分を自分のスプシIDに変更、シート名も自分のシート名に変更

get category.gs

function doGet() {
  // スプレッドシートのIDとシート名を設定
  var spreadsheetId = "スプシIDをここに入力"; // ここにスプレッドシートのIDを設定
  var sheetName = "シート名"; // ここにシート名を設定

  // スプレッドシートからデータを取得
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();

  // カテゴリーのリストを作成(重複排除)
  var categories = new Set();
  for (var i = 1; i < data.length; i++) {
    categories.add(data[i][1]); // カテゴリーは2列目にあると仮定
  }

  // JSON形式でレスポンスを返す
  return ContentService.createTextOutput(JSON.stringify({ "categories": Array.from(categories) }))
    .setMimeType(ContentService.MimeType.JSON);
}

3.新しいApps Scriptを立ち上げる

左上のここを右クリックして新規ウィンドウで立ち上げ


新しいプロジェクトをクリックして新規プロジェクトを立ち上げ

4.以下のコードを貼り付け、スプレッドシートのIDの部分を自分のスプシIDに変更、シート名も自分のシート名に変更

serch from ID.gs

function doGet(e) {
  var postData = JSON.parse(e.postData.contents);
  var searchId = postData.id;
  
  // スプレッドシートのIDとシート名を設定
  var spreadsheetId = "あなたの"; // ここにスプレッドシートのIDを設定
  var sheetName = "data"; // ここにシート名を設定

  // スプレッドシートからデータを取得
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();

  // 検索結果を格納する変数
  var searchResult = null;

  // スプレッドシートを検索
  for (var i = 1; i < data.length; i++) {
    if (data[i][0].toString() === searchId) { // IDは1列目にあると仮定
      searchResult = data[i][2];  // contentは3列目
      break;
    }
  }

  // JSON形式でレスポンスを返す
  if (searchResult !== null) {
    return ContentService.createTextOutput(JSON.stringify({ "content": searchResult }))
      .setMimeType(ContentService.MimeType.JSON);
  } else {
    return ContentService.createTextOutput(JSON.stringify({ "error": "No matching ID found." }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

5.それぞれのApps Scriptを保存した後デプロイ

Ctrl+Sで保存した後に、まず実行を押す。

実行ボタンの場所

そして、アクセス承認をした後に実行されることを確認する。

その後右上のデプロイ→新しいデプロイを選択し、
1.左上の歯車マークからwebアプリを選択
2.アクセスできるユーザーを全員に変更
3.デプロイを押してアクセスを承認

灰色で小さく書いてあるAdvanced→Go to ~をクリックしてAllowを選択

この操作を2つのApps Script両方で行い、それぞれのURLをメモしておく
※どちらがget category,search from IDか分かるように保存してください。

6.GPTsの設定をする


設定の例

このGPTの名前は「質問対応君」です。このGPTは、まず、使用者からの質問に対して、Actionsに登録されているスプレッドシートからカテゴリー一覧を取得します。次に、そのカテゴリー一覧と質問の内容を比較し、質問に当てはまるカテゴリーをAPIに送信します。その後、APIから返ってきたデータにIDとcontentのセットが複数ある場合は、contentの内容と質問を比較して、適しているものだけを回答としてユーザーに提供します。一つだけの場合はそのままcontentの内容をユーザーに答えます。

プロンプトの例

7.Actionsの設定をする

openapi: "3.0.0"
info:
  version: 1.0.0
  title: User Register API
  description: Get categories and get answers from question
servers:
  - url: https://script.google.com
paths:
  ここに保存したURLのうち、get categoryの方の/macros以下を入れる:
    get:
      summary: Get First Category
      operationId: GetFirstCategory
      tags:
        - category
      responses:
        '200':
          description: First category retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  category:
                    type: string
  ここに保存したURLのうち、searcg from IDの方の/macros以下を入れる:
    get:
      summary: Get Content By Category
      operationId: GetContentByCategory
      tags:
        - content
      parameters:
        - in: query
          name: genre
          required: true
          schema:
            type: string
          description: The category to get content for
      responses:
        '200':
          description: Content for the specified category retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      type: string

上記のコードに、ここに保存したURLのうち、◯◯の方の/macros以下を入れるという部分があるので、そこに保存したURLの/macros以下を入れる。
例:/macros/s/AKfycby5GB4BGBOM7wcj3SoPBYi4HXYDbsM72NXW0a17Cy89phITgPp8nlHqYPoSIr_p_djdpw/exec

8.動作テスト

GetFirstCategoryの方のTestを押して、カテゴリー一覧が取得できるか確認

カテゴリー一覧が取得できることを確認したら、GPTに質問をして、保存されている内容を回答してくれるか確認する。

まとめ

以上が実装のやり方になります!


こちらの「GPTsにログイン機能を実装する方法」のnoteでは、このnoteの内容を応用したログイン機能を実装する方法と、非技術者の方でもGASとGPTsの連携する方法が分かるように丁寧な解説、よくあるエラーコードと解決策、OpenAPIやGASを書いてくれる便利なプロンプトまで載せてあります。

今後もGPTsの作り方やGPTs開発の記事を書いていく予定なので、よければフォローよろしくお願いします!
Twitter:@hiro_manabu


この記事が気に入ったらサポートをしてみませんか?