技術ブログ

【GAS】LINE Bot×CRMで顧客対応を自動化!設定・コード例

/ 初心者向け

【GAS】LINE Bot×CRMで顧客対応を自動化!設定・コード例

LINE BotとCRM連携で顧客対応を自動化!GASで実現する業務効率化

「LINEでの問い合わせ対応に時間がかかりすぎている…」

「顧客情報をバラバラに管理していて、対応漏れやミスが多い…」

もしあなたがこのような悩みを抱えているなら、この記事はきっとお役に立てるはずです。本記事では、Google Apps Script(GAS)を活用して、LINE BotとCRM(顧客管理システム)を連携させ、顧客対応を自動化する具体的な方法を解説します。

この記事で解決できること

  • LINE Botでの問い合わせ対応を自動化する方法がわかる
  • LINE BotのメッセージをCRMに自動で記録する方法がわかる
  • GASを使ったLINE BotとCRM連携の具体的なコード例が手に入る
  • 設定手順がわかり、すぐに試せる
  • よくあるエラーとその対処法がわかる
  • LINE BotとCRM連携に関する疑問を解決できる

なぜLINE BotとCRM連携が有効なのか?

LINEは、日本国内で最も普及しているコミュニケーションツールの一つです。多くの顧客が日常的に利用しているため、LINEで問い合わせを受け付けることは、顧客にとって利便性が高く、企業側にとっても顧客接点を増やせるメリットがあります。

しかし、LINEでの問い合わせに手動で対応し、その内容をCRMに記録する作業は、担当者の負担が大きく、時間もかかります。ここでGASが強力な味方となります。

GASは、Google Workspaceの各種サービス(Gmail、スプレッドシート、カレンダーなど)を連携させたり、外部サービスと連携させたりできるJavaScriptベースのクラウドスクリプト言語です。これを使えば、LINE Botからのメッセージを受け取り、その内容をCRM(例えばGoogleスプレッドシートを簡易CRMとして利用する場合や、Salesforceなどの外部CRM)に自動で記録するといった、これまで手作業で行っていた定型業務を劇的に効率化できます。

連携の全体像

今回目指すのは、以下のような流れです。

1. ユーザーがLINE Botにメッセージを送信する。

2. GASがLINE Botからのメッセージを受信する。

3. 受信したメッセージの内容を解析する。

4. 解析した情報を、CRM(ここではGoogleスプレッドシートを想定)の特定のシートに自動で追記する。

これにより、LINEからの問い合わせ履歴が自動でCRMに蓄積され、担当者はCRM上で顧客情報を一元管理し、迅速かつ的確な対応が可能になります。

設定手順:LINE BotとGoogleスプレッドシート(簡易CRM)の連携

ここでは、LINE Messaging APIとGoogleスプレッドシートをGASで連携させる手順を説明します。Googleスプレッドシートを簡易CRMとして活用することで、初期コストを抑えつつ、顧客対応の自動化を始めることができます。

1. LINE Developersでのチャネル設定

  • LINE Developersへアクセス: https://developers.line.biz/ja/ にアクセスし、ログインします。
  • プロバイダー作成: まだプロバイダーを作成していない場合は、「新規プロバイダー」を作成します。
  • Messaging APIチャネル作成: 作成したプロバイダーを選択し、「Messaging API」チャネルを作成します。
  • チャネルIDとチャネルシークレットの取得: チャネル作成後、「基本設定」タブで「チャネルID」と「チャネルシークレット」を控えておきます。これらは後ほどGASで必要になります。
  • アクセストークンの取得: 「Messaging API」タブの「アクセストークン発行」から、アクセストークンを生成し、コピーしておきます。このアクセストークンは、LINE Botからメッセージを送信する際に使用します。(今回は受信のみですが、将来的な拡張のために重要です。)

2. Webhook URLの設定

  • GASプロジェクトの作成: Googleドライブで新しいスプレッドシートを作成し、「拡張機能」→「Apps Script」を選択して、GASエディタを開きます。
  • デプロイ: GASエディタの右上の「デプロイ」→「新しいデプロイ」を選択します。タイプを「アドオン」ではなく、「ウェブアプリ」にし、実行するアカウントを「自分」または「管理者」にし、アクセス権限を「自分のみ」または「全員」にします。
  • 「ウェブ アプリ」を保存: ウェブアプリのURLが生成されます。このURLをコピーしておきます。
  • LINE Developersに戻る: 作成したMessaging APIチャネルの設定画面に戻り、「応答設定」タブの「Webhook URL」に、先ほどGASで生成されたウェブアプリのURLを貼り付け、「検証」ボタンをクリックします。成功すると、LINE側での設定が完了します。

3. Googleスプレッドシートの準備

  • シートの作成: LINE Botに送られてきたメッセージを記録するためのスプレッドシートを作成します。例えば、「LINE問い合わせログ」のような名前で作成し、以下のヘッダーを持つシートを作成します。
  • タイムスタンプ
  • ユーザーID
  • メッセージ本文
  • 応答フラグ (任意: 返信が必要かどうかのフラグなど)

4. GASコードの実装

GASエディタに、以下のコードを貼り付けてください。

// === 設定項目 ===
const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID'; // ★GoogleスプレッドシートのIDをここに貼り付け
const SHEET_NAME = 'Sheet1'; // ★メッセージを記録するシート名(デフォルトはSheet1)

// LINEからのPOSTリクエストを処理する関数
function doPost(e) {
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(SHEET_NAME);
  if (!sheet) {
    Logger.log('指定されたシートが見つかりません。シート名を確認してください。');
    return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: 'Sheet not found' })).setMimeType(ContentService.MimeType.JSON);
  }

  try {
    const body = JSON.parse(e.postData.contents);
    const events = body.events;

    if (!events) {
      Logger.log('イベントデータがありません。');
      return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: 'No events in payload' })).setMimeType(ContentService.MimeType.JSON);
    }

    for (const event of events) {
      // メッセージイベントのみを処理
      if (event.type === 'message') {
        const userId = event.source.userId;
        const messageType = event.message.type;

        // テキストメッセージの場合のみ処理
        if (messageType === 'text') {
          const messageText = event.message.text;
          const timestamp = new Date(); // 現在時刻

          // スプレッドシートにデータを追記
          sheet.appendRow([timestamp, userId, messageText, '未対応']); // タイムスタンプ, ユーザーID, メッセージ本文, 応答フラグ
          Logger.log(`ユーザー: ${userId}, メッセージ: ${messageText} を記録しました。`);
        } else {
          Logger.log(`テキスト以外のメッセージタイプです: ${messageType}`);
        }
      } else {
        Logger.log(`メッセージ以外のイベントタイプです: ${event.type}`);
      }
    }

    // LINEに成功を返す
    return ContentService.createTextOutput(JSON.stringify({ status: 'success' })).setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    Logger.log('エラーが発生しました: ' + error.toString());
    Logger.log('受信したリクエストボディ: ' + e.postData.contents);
    return ContentService.createTextOutput(JSON.stringify({ status: 'error', message: error.toString() })).setMimeType(ContentService.MimeType.JSON);
  }
}

コードの解説:

  • SPHEREADSHEET_IDSHEET_NAME をご自身の環境に合わせて変更してください。
  • スプレッドシートIDは、スプレッドシートのURL (https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit) の /d//edit の間の文字列です。
  • doPost(e) 関数は、LINEからPOSTリクエストがあった際に自動的に実行されます。
  • e.postData.contents でリクエストボディ(LINEからのメッセージ情報)を取得し、JSON形式にパースします。
  • body.events をループ処理し、メッセージイベント(event.type === 'message')かつテキストメッセージ(event.message.type === 'text')の場合のみ、ユーザーID、メッセージ本文、タイムスタンプをスプレッドシートに追記します。
  • sheet.appendRow() でスプレッドシートの末尾に新しい行を追加します。
  • エラーが発生した場合は、GASのログに記録され、LINEにはエラーレスポンスを返します。

デプロイの再実行:

コードを保存したら、再度「デプロイ」→「既存のデプロイを管理」から、先ほど作成したウェブアプリのデプロイを選択し、「編集」→「再デプロイ」を行います。これにより、最新のコードがウェブアプリに反映されます。

5. 動作確認

LINEアプリから、作成したLINE Botにメッセージを送信してみてください。数秒後、Googleスプレッドシートにメッセージが記録されていれば成功です!

よくあるエラーと対処法

エラー1: Webhook URLの検証に失敗する

  • 原因: URLのコピペミス、GASのデプロイ設定(ウェブアプリになっていない、実行権限が不適切など)、LINE Developers側の設定ミス。
  • 対処法:
  • GASのウェブアプリURLを正確にコピーできているか再確認する。
  • GASのデプロイ設定で、「実行するアカウント」と「アクセス権限」が適切に設定されているか確認し、「再デプロイ」を行う。
  • LINE Developersの「応答設定」で、Webhook URLが正確に入力されているか確認する。
  • GASエディタの「実行ログ」(左側の時計アイコン)で、エラーメッセージを確認する。

エラー2: スプレッドシートに何も記録されない

  • 原因: GASコードの SPHEREADSHEET_ID または SHEET_NAME が間違っている、GASのデプロイが最新になっていない、LINEからのリクエストがGASに届いていない。
  • 対処法:
  • SPHEREADSHEET_IDSHEET_NAME を再度確認し、スプレッドシートのURLやシート名と一致しているか確認する。
  • GASエディタで「デプロイ」→「既存のデプロイを管理」から、該当デプロイを選択し、「再デプロイ」を実行する。
  • LINE Botにメッセージを送信後、GASエディタの「実行ログ」でエラーが発生していないか確認する。
  • LINE Developersの「応答設定」で、「Webhook URL」に指定したURLが正しくGASのウェブアプリURLになっているか確認する。

エラー3: JSONパースエラー

  • 原因: LINEからのリクエストボディが期待するJSON形式ではない、または壊れている。
  • 対処法:
  • GASの「実行ログ」で、受信したリクエストボディ (e.postData.contents) を確認し、JSONとして有効な形式になっているか調べる。(Logger.log('受信したリクエストボディ: ' + e.postData.contents); の行を一時的に有効にして確認)
  • LINE Messaging APIの仕様変更などが原因の可能性もあるため、公式ドキュメントを確認する。

FAQ

Q1. ユーザーIDとは何ですか?

A1. LINEの各ユーザーに一意に割り当てられるIDです。これにより、誰からのメッセージなのかを特定できます。プライバシーに配慮して利用しましょう。

Q2. テキストメッセージ以外のメッセージ(画像、スタンプなど)も記録できますか?

A2. はい、可能です。GASコードを拡張すれば、event.message.typeimagesticker の場合でも、それぞれの情報(例: 画像URL、スタンプID)を記録できます。

Q3. LINE Botからの返信も自動化できますか?

A3. はい、できます。GASからLINE Messaging APIを呼び出すことで、受信したメッセージに応じて自動返信を行うことが可能です。今回のコードは受信のみですが、返信機能の追加も容易です。

Q4. SalesforceやHubSpotのような商用CRMとも連携できますか?

A4. はい、可能です。多くの商用CRMはAPIを提供しており、GASからそのAPIを呼び出すことで、データの送受信ができます。API連携には、各CRMのドキュメントを参照し、認証方法などを確認する必要があります。

Q5. ユーザーの個人情報(氏名、メールアドレスなど)もLINE Bot経由で取得できますか?

A5. LINE Bot単体では、ユーザーの許可なく氏名やメールアドレスなどの詳細な個人情報を直接取得することはできません。ユーザーがBotに直接入力してもらうか、外部のフォームなどと連携する必要があります。プライバシー保護の観点から、個人情報の取り扱いには十分注意してください。

さらなる業務自動化へ

今回ご紹介したLINE BotとGoogleスプレッドシート(簡易CRM)の連携は、顧客対応の一次対応を自動化し、担当者の負担を軽減する強力な第一歩です。しかし、業務自動化の可能性はこれだけにとどまりません。

例えば、

  • 問い合わせ内容に応じた担当者への自動割り振り: 過去の問い合わせ履歴やキーワードから、最適な担当者を特定し、Slackやメールで通知する。
  • FAQへの自動応答: よくある質問に対しては、LINE Botが自動でFAQページへのリンクを返信する。
  • 顧客ステータスの自動更新: CRM上の顧客ステータスに応じて、LINE Botの応答内容を変化させる。

といった、より高度な自動化もGASを使えば実現可能です。

もし、LINE Bot開発やGASによる業務自動化、あるいはSalesforceなどの本格的なCRM連携について、さらに専門的な知見や具体的な導入支援が必要な場合は、お気軽にご相談ください。経験豊富な専門家が、貴社の課題に合わせた最適なソリューションをご提案いたします。

---

この記事が、あなたのLINE Botを活用した顧客対応自動化の一助となれば幸いです。ぜひ、実際に試してみてください!

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る