【LINE×GAS×スプレッドシート】実質無料「最強のLINE BOT」を自作する方法

※本記事はアフィリエイト広告を含みます。

【LINE×GAS×スプレッドシート】実質無料「最強のLINE BOT」を自作する方法

顧客サポートや問い合わせ対応のために「LINEチャットボット」の導入を検討したものの、以下の理由で二の足を踏んでいませんか?

  • 「開発費用が高そう」
  • 「月額利用料がユーザー数に応じて青天井に増えそう」
  • 「専用ツールの管理画面を覚えるのが面倒」

もし、これらの悩みをすべて解決し、「月額固定費0円」で、しかも「Googleスプレッドシートだけで管理できる」高機能なBOTが作れるとしたら?

今回は、元・エンジニアの私が実務でも活用している、Google Apps Script (GAS) とスプレッドシートを組み合わせた「LINE BOT構築の裏技」を、コード付きで完全公開します!

この記事でわかることは

  • LINE公式アカウントとDevelopers設定の全手順
  • GAS(Google Apps Script)を使った自動応答プログラムのコピペ実装
  • スプレッドシートを「データベース」として使う連携方法
  • 【衝撃】AI全盛の今、あえて「スプレッドシート」を選ぶ戦略的理由

プログラミング知識がなくても、コピペで実装可能です。「コストをかけずにDX(自動化)したい」と考えている個人事業主や企業の担当者様、必見です。

なお、ここで紹介する『最強』とは、多機能さではなく『維持費0・誤答0・管理コスト0』という経営効率の極致を指します。AIのようなハルシネーション(もっともらしい嘘)のリスクを排除し、100%制御可能な窓口を数時間で構築することが、本記事のゴールです。

用意するもの

必要なのは以下の2つだけです。

  • Googleアカウント(無料のものでOK)
  • LINE公式アカウント(未開設の方はこちらから作成)

サーバー代も、専用ツールの契約も不要です。

GoogleとLINEのアカウントさえあれば、今すぐ始められます。

ステップ1:LINE Developersでのチャネル作成

まず、LINEプラットフォーム側でBOT(チャネル)を作成し、外部プログラム(GAS)と通信するための「鍵」を取得します。

1. LINE Developersコンソールにログイン

LINE Developersコンソールにアクセスし、ご自身のLINEアカウントでログインします。

2. プロバイダーとチャネルの作成

初めての場合は「新規プロバイダー作成」をクリックし、適当な名前(例:MyBots)を入力します。

作成したプロバイダーを選択し、「新規チャネル作成」をクリック。

チャネルの種類は「Messaging API」を選択します。

必須項目(チャネル名、説明、業種など)を入力して作成します。

3. 【重要】チャネルアクセストークンの発行

チャネルができたら、「Messaging API設定」タブを開き、一番下までスクロールします。「チャネルアクセストークン(長期)」の「発行」ボタンを押し、表示された長い文字列をコピーしてメモしておきます。 ※これがBOTを動かすための「鍵」になります。他人に教えないでください。

ステップ2:スプレッドシートの準備

GASが読み込むための「台本(データベース)」を作成します。

  1. 新規スプレッドシートを作成し、シート名を「シート1」にします。
  2. 以下のようにデータを入力します。
A列(キーワード)B列(返信内容)
1行目キーワード返却
2行目おはようおはようございます!今日も頑張りましょう!
3行目料金料金プランはこちらのページをご覧ください。https://…
4行目住所東京都〇〇区…
  1. ブラウザのアドレスバーにあるURLから、スプレッドシートIDをコピーします。 https://docs.google.com/spreadsheets/d/ [この部分がID] /edit#gid=0

ステップ3:Google Apps Script (GAS) の実装

いよいよプログラム本体です。コピペで動くように作ってあります。

1. プロジェクトの作成

Google Apps Script にアクセスし、「新しいプロジェクト」を作成します。

2. スクリプトプロパティの設定(セキュリティ対策)

コードに直接パスワードを書くのは危険なので、設定画面に保存します。

  1. 左メニューの「プロジェクトの設定(歯車アイコン)」をクリック。
  2. 最下部の「スクリプト プロパティ」に以下2つを追加します。
  • プロパティ名:LINE_ACCESS_TOKEN
    • 値: ステップ1で取得したチャネルアクセストークン
  • プロパティ名:SHEET_ID
    • 値: ステップ2で取得したスプレッドシートID

3. コードの記述

左メニュー「エディタ(<>アイコン)」に戻り、コード.gsの中身を全て消して、以下のコードを貼り付けます。

/**
 * スクリプトプロパティから定数を取得
 */
const ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_ACCESS_TOKEN');
const SHEET_ID = PropertiesService.getScriptProperties().getProperty('SHEET_ID');

/**
 * LINEからのWebhook(POSTリクエスト)を受け取るメイン関数
 */
function doPost(e) {
  // 1. JSONデータをパース
  let events;
  try {
    events = JSON.parse(e.postData.contents).events;
  } catch (err) {
    return;
  }

  // 2. イベントチェック
  if (!events || events.length === 0) {
    return ContentService.createTextOutput(JSON.stringify({'status': 'ok'})).setMimeType(ContentService.MimeType.JSON);
  }

  // 3. 辞書データの読み込み
  const keywordMap = loadKeywordMap();

  // 4. イベント処理ループ
  events.forEach(event => {
    if (event.type === 'message' && event.message.type === 'text') {
      const replyToken = event.replyToken;
      const userMessage = event.message.text.trim();
      let replyText = null;

      // キーワード照合(部分一致ロジック)
      for (const keyword in keywordMap) {
        if (userMessage !== "" && keyword.includes(userMessage)) {
          replyText = keywordMap[keyword];
          break;
        }
      }

      // 返信実行
      if (replyText) {
        replyMessage(replyToken, replyText);
      } else {
        // キーワードが見つからない場合のデフォルト応答(必要なら変更してください)
        replyMessage(replyToken, "申し訳ありません。その質問にはお答えできませんが、担当者が確認次第ご連絡します。");
      }
    }
  });

  return ContentService.createTextOutput(JSON.stringify({'status': 'ok'})).setMimeType(ContentService.MimeType.JSON);
}

/**
 * スプレッドシートから辞書データを取得
 */
function loadKeywordMap() {
  try {
    const ss = SpreadsheetApp.openById(SHEET_ID);
    const sheet = ss.getSheetByName("シート1"); 
    const numRows = sheet.getLastRow() - 1;
    if (numRows <= 0) return {};
    
    const data = sheet.getRange(2, 1, numRows, 2).getValues();
    const map = {};
    for (let i = 0; i < data.length; i++) {
      const keyword = data[i][0];
      const reply = data[i][1];
      if (keyword && String(keyword).trim() !== "") {
        map[String(keyword).trim()] = reply;
      }
    }
    return map;
  } catch (err) {
    return {};
  }
}

/**
 * LINEへの返信実行
 */
function replyMessage(replyToken, messageText) {
  const url = '[https://api.line.me/v2/bot/message/reply](https://api.line.me/v2/bot/message/reply)';
  const payload = {
    'replyToken': replyToken,
    'messages': [{'type': 'text', 'text': messageText}]
  };
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {'Authorization': 'Bearer ' + ACCESS_TOKEN},
    'payload': JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

4. デプロイ(公開)

右上の「デプロイ」→「新しいデプロイ」をクリック。

種類の選択:「Webアプリ」。

アクセスできるユーザー:「全員」(※ここ超重要です!これを忘れると動きません)

「デプロイ」を押し、表示された WebアプリURL をコピーします。

ステップ4:LINEとの紐付けと動作確認

LINE Developersに戻り、「Messaging API設定」タブの「Webhook設定」に、先ほどのURLを貼り付けます。

「Webhookの利用」スイッチをONにします。

LINE公式アカウントの管理画面(LINE Official Account Manager)で、「応答設定」→「詳細設定」の「応答メッセージ」をオフにします。(BOTと標準機能が喧嘩しないようにするため)

これで完成です! QRコードからBOTを友だち追加し、スプレッドシートに登録した言葉(例:「おはよう」)を話しかけてみてください。 自動で返信が返ってくるはずです。感動の瞬間です。

【戦略コラム】なぜ今、AIではなくスプレッドシートなのか?

「今ならChatGPTやGeminiを使えば、もっとすごいBOTができるのでは?」 そう思った方もいるでしょう。確かにその通りです。技術的には可能です。

しかしながら、ビジネス運用、特に企業の公式窓口として考えるなら、「AIが常に正解とは限らない」という事実を知っておく必要があります。

あえて「レガシーな技術」であるスプレッドシート(ルールベース)を選ぶことには、以下の強力なメリットがあります。

「嘘をつかない」という絶対的信頼(ハルシネーションの回避)

AI(LLM)には、もっともらしい嘘をつく「ハルシネーション」というリスクがあります。

企業の公式LINEが、存在しないキャンペーン情報を案内してしまったら? 架空の料金プランを提示してしまったら?……それはもう大炎上です。

スプレッドシート方式なら、「管理者が書いた文言」以外は絶対に発信しません。この100%の制御可能性こそが、ビジネスにおける最大の防御なんです。

「コスト」が完全に予測できる

AIのAPIは従量課金です。もしBOTがバズって大量のアクセスが来たら……?翌月の請求額に青ざめることになるかもしれません。今回の方式なら、1万回会話しようが、10万回会話しようが、GoogleやLINEへの支払いは0円です。予算が決まっているプロジェクトでは、この安心感は絶大ですよね。

「答えが決まっている質問」にはルールベースが最強

「住所は?」「営業時間は?」「振込先は?」

こうした質問に対して、AIに毎回文章を生成させる必要はありません。決まった正解を、0.1秒でズバッと返す。これこそがユーザーが求めている「速さ」と「正確さ」です。

結論:まずは「守り」から入るのが正解

まずはこのスプレッドシート方式で、確実な応答システム(守り)を構築するのが最善策です!

その上で、「もっと雑談に対応したい」「複雑な相談に乗りたい」というニーズが出てきたら、その時初めてAIの導入(攻め)を検討すれば良いと思っています。

いきなりAIで凄いシステムを何日も掛けて作って、結局誰も使用していないとなったなら目も当てられません。今回の方法であれば、結果を素早く求められるビジネスにおいて、わずか数時間でシステムの構築が可能なのは大きなアドバンテージといえます。

まとめ:自動化は、お金をかけずに「知恵」でやる

今回ご紹介したように、Googleスプレッドシートという身近なツールを少し工夫するだけで、驚くほど実用的なソリューションをコスト0で実現できます。

比較項目スプレッドシート(本方式)生成AI(ChatGPT等)
月額コスト完全無料API利用料(従量課金)
回答の正確性100%(設定通り)不確実(嘘をつく可能性あり)
導入難易度低(コピペで完結)中〜高(プロンプト調整が必要)
得意なこと営業時間、住所、定型質問悩み相談、要約、柔軟な対話

まずは社内の問い合わせ対応や、FAQの自動化から始めてみてはいかがでしょうか?

【PR】「実装する時間がない!」という方へ

「記事の内容はわかったけど、自分で設定するのは不安」「エラーが出て進まない」 あるいは、「ChatGPTと連携させて、もっと高度なBOTを作ってほしい!」 という方は、私の「構築代行サービス」をご利用ください。

あなたの業務フローに合わせた最適なBOT(ルールベース)を、スピーディに構築・納品いたします。 まずは「こんなことできる?」という相談からでも大歓迎です。

LINE BOT構築・IT相談はこちら