1. ホーム
  2. /
  3. [LINE BOT]
  4. /
  5. GASとLINE Botで実現!特定グループへのメッセージを自動化する『代理発言』機能の作り方

GASとLINE Botで実現!特定グループへのメッセージを自動化する『代理発言』機能の作り方

GASとLINE Botで実現!特定グループへのメッセージを自動化する『代理発言』機能の作り方

サークルの運営や社内連絡など、複数のLINEグループを管理していると、こんな課題はありませんか?

  • 「全体連絡を投げるのは少し気が引ける…」
  • 「連絡した人に質問が集中してしまい、負担が偏ってしまう…」

今回は、こうした課題を解決するために、Google Apps Script (GAS) を使ってLINE Botが代わりにメッセージを送信してくれる「代理発言」機能を開発した事例をご紹介します。

この仕組みを導入することで、連絡の心理的ハードルを下げ、誰でも気軽に情報共有ができるようになります。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
LINE BOT チャットボット 作り方
LINE BOT チャットボット 作り方 を各ショップで検索

「代理発言」機能の概要

この機能は、管理用のLINEグループで特定のキーワードを含めて発言すると、LINE Botが他のグループにメッセージを代理で送信してくれる、というものです。

システム導入によるメリット

  • 属人化の解消: LINE Botが発言するため、質問が特定の人に集中するのを防ぎます。
  • 心理的負担の軽減: Botが代わりに連絡してくれるので、気軽に全体連絡を行えるようになります。
  • 管理の効率化: 複数のグループへの連絡を円滑にします。

動作の仕組み

システム動作フロー

  1. 管理グループでトリガー発言: LINE Botがいる管理グループで「代理発言 〇〇○」と発言します。
  2. クイックリプライの表示: 発言をトリガーに、GASが作動し、送信先を選択するための「クイックリプライ」が返信されます。
  3. 送信先の選択: 「雑談グループ」「連絡用グループ」などの選択肢からメッセージを送りたいグループを選びます。
  4. Botによる代理発言: 選択したグループに、Botが「〇〇○」の部分を代理で送信します。

この機能を実現するためには、各グループにLINE Botが参加している必要があります。

実装のための事前準備

実装に入る前に、以下の準備が必要です。それぞれ詳しい手順は関連記事で解説していますので、参考にしてください。

  1. LINE Botの作成とトークンの取得 LINE DevelopersでMessaging APIのチャネルを作成し、アクセストークンを取得します。
【初心者向け】LINE Messaging APIのアクセストークンを取得する方法を解説
【初心者向け】LINE Messaging APIのアクセストークンを取得する方法を解説

LINE BOT開発に不可欠なMessaging APIのチャンネルアクセストークンを取得する手順を、実際の画面キャリプチャを交えて詳しく解説します。LINE Developersへの登録からプロバイダー、チャンネル作成、トークン発行までを網羅。

  1. LINEグループIDの取得 メッセージを送信したいグループのIDを事前に調べておきます。
【GAS】LINE BOTでユーザーIDを取得する方法|Webhookで情報を受け取る
【GAS】LINE BOTでユーザーIDを取得する方法|Webhookで情報を受け取る

Google Apps Script(GAS)を使って、LINE BOTと友だちになっているユーザーのIDを取得する方法を解説します。Webhook経由で送信されるイベント情報から、特定のユーザーを識別するための`userId`を抜き出すサンプルコードを紹介します。

  1. GASプロジェクトの作成 LINE Botの基本的な応答設定を済ませておきます。

GASの実装コード解説

それでは、実際のコードを見ていきましょう。この機能は主に5つの関数で構成されています。

1. doPost(e) - メイン処理

LINEプラットフォームから送信されたPOSTリクエストを受け取り、イベントの種類に応じて各コントローラーに処理を振り分けます。

/*
 * LINEから送信されたデータを処理する
 */
function doPost(e) {
  // スクリプトプロパティを取得
  const prop = PropertiesService.getScriptProperties().getProperties();
  // レスポンスデータをJSON形式に変換
  const response = JSON.parse(e.postData.getDataAsString());
  const responseEvent = response.events[0];
  const replyToken = responseEvent.replyToken;

  // メッセージイベントの場合
  if (responseEvent.type === 'message') {
    messageController(prop, responseEvent, replyToken);
  }

  // ポストバックイベントの場合
  if (responseEvent.type === 'postback') {
    postBackController(prop, responseEvent.postback.data);
  }
}

2. messageController(...) - メッセージイベントの処理

「代理発言」というキーワードに反応し、クイックリプライを生成して返信する関数です。

/*
 * 「代理発言」キーワードをトリガーにクイックリプライを返す
 */
function messageController(prop, events, replyToken) {
  const message = events.message;
  const text = message.text;

  // 本文に「代理発言」が含まれていた場合
  if (text.indexOf('代理発言') > -1) {
    // 「代理発言」の部分を除いたメッセージ本文を取得
    const postMessage = text.replace('代理発言', '管理部からの連絡です。\n');
    
    // クイックリプライ形式のメッセージオブジェクトを作成
    const LineMessageObject = [{
      'type': 'text',
      'text': '以下のメッセージの送信先を選択してください。\n\n' + postMessage,
      'quickReply': {
        'items': [{
          'type': 'action',
          'action': {
            'type': 'postback',
            'label': '雑談グループに送信',
            'data': 'send group1' + postMessage,
            'displayText': '雑談グループに送信します'
          }
        }, {
          'type': 'action',
          'action': {
            'type': 'postback',
            'label': '連絡用に送信',
            'data': 'send group2' + postMessage,
            'displayText': '連絡用に送信します'
          }
        }, {
          'type': 'action',
          'action': {
            'type': 'postback',
            'label': '送信をキャンセル',
            'data': 'send no',
            'displayText': '送信をキャンセルしました'
          }
        }]
      }
    }];

    // LINEに返信する
    replyLine(prop, LineMessageObject, replyToken);
  }
}

3. postBackController(...) - ポストバックイベントの処理

ユーザーがクイックリプライの選択肢をタップした際に作動します。dataに含まれる情報をもとに、指定されたグループにメッセージを送信します。

/*
 * LINEのポストバックイベントを処理する
 */
function postBackController(prop, data) {
  // 雑談用グループへの送信
  if (data.indexOf('send group1') > -1) {
    const to = prop.GROUP1_ID; // 送信先のグループID
    const message = data.replace('send group1', '');
    pushLine(prop, to, message);
  }
  // 連絡用グループへの送信
  if (data.indexOf('send group2') > -1) {
    const to = prop.GROUP2_ID; // 送信先のグループID
    const message = data.replace('send group2', '');
    pushLine(prop, to, message);
  }
  // キャンセル処理
  if (data.indexOf('send no') > -1) {
    const to = prop.ADMIN_GROUP_ID; // 管理グループのID
    pushLine(prop, to, '送信を取り消しました。');
  }
}

4. replyLine(...) / pushLine(...) - メッセージ送信用関数

LINE Messaging APIを呼び出し、実際に応答やプッシュメッセージを送信するための汎用的な関数です。

/*
 * LINEに返信する処理
 */
function replyLine(prop, LineMessageObject, replyToken) {
  const url = 'https://api.line.me/v2/bot/message/reply';
  const headers = {
    "Content-Type": "application/json",
    "Authorization": 'Bearer ' + prop.LINE_TOKEN
  };
  const payload = JSON.stringify({
    "replyToken": replyToken,
    "messages": LineMessageObject
  });
  const options = {
    "method": "POST",
    "headers": headers,
    "payload": payload
  };
  UrlFetchApp.fetch(url, options);
}

/*
 * 指定した宛先にプッシュメッセージを送信する
 */
function pushLine(prop, to, text) {
  const url = 'https://api.line.me/v2/bot/message/push';
  const headers = {
    "Content-Type": "application/json; charset=UTF-8",
    'Authorization': 'Bearer ' + prop.LINE_TOKEN,
  };
  const payload = JSON.stringify({
    "to": to,
    "messages": [{
      'type': 'text',
      'text': text,
    }]
  });
  const options = {
    "method": "post",
    "headers": headers,
    "payload": payload
  };
  UrlFetchApp.fetch(url, options);
}

実際の動作イメージ

1. 管理グループで「代理発言 送信テスト」と入力

管理グループでの発言

2. クイックリプライから送信先を選択

「グルチャに送信」をタップすると、Botが代理でメッセージを送ってくれます。

▼ 管理グループの画面

クイックリプライの選択

▼ 雑談グループの画面

Botによる代理発言

無事にBotが代理で発言してくれました!同様に「連絡用に送信」をタップすれば、連絡用グループにも送信できます。

まとめ

今回は、GASとLINE Botを連携させて、複数グループへの連絡を効率化する「代理発言」機能を紹介しました。

この仕組みを導入したことで、

  • クイックリプライなど、より高度なLINE Botの機能を試すことができた
  • 管理メンバーがスムーズに使いこなしてくれた
  • Botの存在がメンバーに浸透し、気軽に全体連絡できる雰囲気を作れた

という大きな成果がありました。

日々の連絡業務に課題を感じている方は、ぜひこの記事を参考に、独自のBot開発に挑戦してみてください。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
LINE BOT チャットボット 作り方
LINE BOT チャットボット 作り方 を各ショップで検索

関連記事

【初心者向け】LINE Messaging APIのアクセストークンを取得する方法を解説

【初心者向け】LINE Messaging APIのアクセストークンを取得する方法を解説

LINE BOTを開発するには、まずLINEのMessaging APIを利用するための「チャンネルアクセストークン」を取得する必要があります。この記事では、LINE Developersへの登録からアクセストークンを発行するまでの手順を、初心者の方にも分かりやすく解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
LINE BOT チャットボット 作り方
LINE BOT チャットボット 作り方 を各ショップで検索

【GAS】LINE Messaging APIでクイックリプライメッセージを送信する方法

【GAS】LINE Messaging APIでクイックリプライメッセージを送信する方法

この記事では、Google Apps Script (GAS) を利用して、LINE BOTで「クイックリプライ」メッセージを送信する方法を初心者向けに分かりやすく解説します。

クイックリプライは、ユーザーがメッセージに対して簡単なボタン操作で返信できるようにする機能です。これにより、ユーザー体験を向上させることができます。

公式ドキュメントはこちらです。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
LINE BOT チャットボット 作り方
LINE BOT チャットボット 作り方 を各ショップで検索