業務効率化
PR

Googleフォームの回答をLINEグループで受け取る方法【LINE Messaging API】

sanane
記事内に商品プロモーションを含む場合があります

はじめに

今回は公式アカウントをグループに招待し、Googleフォームの回答をグループ全員に一斉通知 する手順を紹介します。

以前、Googleフォームの回答をLINE公式アカウントから1対1で受け取る方法を紹介しました。

あわせて読みたい
Googleフォームの回答をLINEで受け取る方法!【LINE Messaging API対応】
Googleフォームの回答をLINEで受け取る方法!【LINE Messaging API対応】

こちらの方法では公式LINEから直接通知を受け取ることができますが、LINEグループ内では通知を受け取ることができません。

LINEグループ内に通知するためには[LINEグループのID]が必要になります。今回は具体的な設定手順 をステップごとに解説していきます。

LINE Messaging APIに切り替える際の注意点

  1. 公式アカウントが必要
    以前は、LINE Notifyのトークルームに通知できましたが、2025年4月以降は公式アカウントを作成し、Messaging APIの利用が必須になります。
  2. 月に200通の無料枠がある
    LINE Messaging APIの無料枠では「1ヶ月200通」まで送信できます。
    • 複数人が同じ公式アカウントから通知を受け取る場合でも、すべて合算で200通です。
    • もし合計で200通以上の通知を利用している場合は、有料プランの契約が必要になる可能性がありますのでご注意ください。

メリット

  • フォーム回答のリアルタイム通知
    新しい回答が届くと、作成したLINE公式アカウントで瞬時に通知を受け取ることができます。メールをチェックしたり、スプレッドシートを開く手間を減らすことが可能です。
  • 基本無料で利用可能
    月の利用上限はありますが、上限以内の利用であれば無料で利用が可能です。LINEの公式アカウントも無料で作成ができます。
  • スプレッドシートへの保存との連携
    フォーム回答はGoogleスプレッドシートに自動記録されるので、後からデータ分析や一括管理も容易になります。

事前に準備するもの

  1. Googleアカウント
    (Googleフォームやスプレッドシートの作成・管理に必要)
  2. LINE公式アカウント
    (作成方法は本記事の手順で説明します)
  3. Googleフォームおよび連携用のスプレッドシート
    (これから本記事の手順で作成します)

導入方法

ステップ1:Googleフォームとスプレッドシートのリンク

Googleフォームの作成
  1. Google フォームにアクセスします。
  2. 新しいフォームを作成し、質問項目などを自由にカスタマイズしてください。

すでに作成済みのGoogleフォームも利用可能です。

フォームの回答をスプレッドシートにリンク
  1. フォーム編集画面の上部「回答」タブをクリック。
  2. スプレッドシートにリンク」のアイコン(緑色のシートのマーク)を選択。
  3. 新しいスプレッドシートを作成」を選択して「作成」。
  4. 自動でスプレッドシートが生成され、回答が連携されるようになります。

ステップ2:LINE公式アカウントの設定(Messaging APIの準備)

LINE公式アカウントの作成
  1. LINE Official Account Managerにアクセスして自身のアカウントでログインします。個人の利用であれば「LINEアカウントでログイン」で問題ありません。
  2. 「アカウントタブ」より「作成」をクリックし新規アカウントを作成します。
    • アカウント名:お好み(例:「通知Bot」など)
    • メールアドレス:任意
    • 業種:個人
    • 運用目的:その他
    • 主な使い方:メッセージ配信用
  3. 各種同意画面に従い、「同意」を選択。
  4. 作成完了後、LINE公式アカウントが使用可能になります。
LINE公式アカウントでMessaging APIを有効にする
  1. LINE Official Account Managerで作成したアカウントにログインします。
  2. 画面右上の「設定」をクリック。
  3. 左メニューの「Messaging API」を選択。
  4. Messaging APIを利用する」をクリック
  5. プロバイダーを選択 → 「同意する」。
  6. プライバシーポリシー、利用規約は空欄のまま「OK」をクリック。
  7. 「OK」をクリックし、[Channel ID]と[Channel Secret]が表示されていることを確認します。
LINE Developersでのアクセストークン取得
  1. LINE Developersにアクセスし、「コンソールにログイン」をクリック。前ステップで選択したプロバイダーを選択します。
  2. 前ステップで作成したアカウントを選択します。
  3. 上部バーから「Messaging API設定」をクリック。
  4. ページ下部の「チャンネルアクセストークン」を発行してコピーします。(後で使用します)。

ステップ3:Google Apps Scriptで通知スクリプトを作成する

スクリプトの準備
  1. ステップ1で作成したスプレッドシートを開きます。
  2. 上部メニュー「拡張機能」 → 「Apps Script」をクリック。新しいタブでGoogle Apps Scriptのエディタが開きます。
スクリプトの編集
  1. 以下のコードをコピー&ペーストしてください。不要なものが混ざらないように注意してください。
  2. コード2行目のconst ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';YOUR_ACCESS_TOKEN 部分を、
    ステップ2.3で取得したチャンネルアクセストークンに置き換えます。
    (シングルクォーテーション ' ' はそのままです)
  3. 上部メニューの「保存」ボタンをクリックして、プロジェクトを保存します。
// 各自のアクセストークンとグループIDを設定してください
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN';
const GROUP_ID = 'YOUR_GROUP_ID';

/**
* LINEのWebhook受信用関数
* ユーザがグループ内でメッセージを送信すると、グループIDを取得し、そのIDを返信する。
* エラー発生時はエラーログを出力する。
*/
function doPost(e) {
 try {
   // 受信したリクエスト全体をログ出力
   Logger.log("Received event: " + JSON.stringify(e));
  
   // POSTデータの内容をパース
   var json = JSON.parse(e.postData.contents);
   Logger.log("Parsed JSON: " + JSON.stringify(json));
  
   if (json.events && json.events.length > 0) {
     var event = json.events[0];
     var source = event.source;
    
     // グループからのメッセージの場合、groupIdが含まれる
     if (source.type === 'group' && source.groupId) {
       var groupId = source.groupId;
       Logger.log('取得したグループID: ' + groupId);
      
       // ユーザへの返信メッセージを作成
       var replyToken = event.replyToken;
       var replyMessage = 'あなたのグループIDは: ' + groupId;
      
       // 返信用のペイロードを作成
       var url = 'https://api.line.me/v2/bot/message/reply';
       var payload = JSON.stringify({
         "replyToken": replyToken,
         "messages": [
           {
             "type": "text",
             "text": replyMessage
           }
         ]
       });
       Logger.log("Sending reply payload: " + payload);
      
       // オプション設定
       var options = {
         "method": "post",
         "contentType": "application/json",
         "headers": {
           "Authorization": "Bearer " + ACCESS_TOKEN
         },
         "payload": payload
       };
      
       // LINE Messaging APIへリクエスト送信
       var response = UrlFetchApp.fetch(url, options);
       Logger.log("Response: " + response.getContentText());
     } else {
       Logger.log("イベントはグループからのものではないか、groupIdが含まれていません。");
     }
   } else {
     Logger.log("受信イベントがありません。");
   }
 } catch (error) {
   // エラー発生時にログ出力
   Logger.log("doPost内でエラー発生: " + error);
   return ContentService.createTextOutput("Error: " + error);
 }
  return ContentService.createTextOutput("OK");
}

/**
* Googleフォームの回答内容をLINEグループに通知する関数
*/
function sendToLine() {
 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var row = sheet.getLastRow();
 var data = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues();
  // メッセージ本文の作成
 var message = '新しいフォームの回答がありました:\n';
 // タイムスタンプの整形(年月日と時間のみ)
 var timestamp = new Date(data[0][0]);
 var formattedTimestamp = Utilities.formatDate(timestamp, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm');
 message += '■タイムスタンプ\n ' + formattedTimestamp + '\n';
  data[0].forEach(function(value, index) {
   if (index > 0) {
     var question = sheet.getRange(1, index + 1).getValue();
     message += '■' + question + '\n ' + value + '\n';
   }
 });
  // LINE Messaging APIのプッシュメッセージを使用してグループに送信
 var url = 'https://api.line.me/v2/bot/message/push';
 var payload = JSON.stringify({
   "to": GROUP_ID,
   "messages": [
     {
       "type": "text",
       "text": message
     }
   ]
 });
  var options = {
   "method": "post",
   "contentType": "application/json",
   "headers": {
     "Authorization": "Bearer " + ACCESS_TOKEN
   },
   "payload": payload
 };
  UrlFetchApp.fetch(url, options);
}

ステップ4:グループID取得用ウェブアプリの作成

SANANE
SANANE

LINEグループに通知を送信するためにはLINEグループの「ID」が必要となります。

この手順では、グループIDを取得するためにGASを一時的にウェブアプリとして公開し、LINEからグループIDを受け取れるようにします。

GASのデプロイ
  1. 右上[デプロイ]>[新しいデプロイ]を選択します。
  2. 表示される画面上で、歯車マークをクリックし、[ウェブアプリ]を選択します。
  3. [アクセスできるユーザー]を全員に変更し、[デプロイ]をクリックします。
  4. [アクセスを承認]をクリックします。
アクセス権の承認
  1. ログインしているGoogleアカウントをクリックします。
  2. [Advanced]をクリックします。
  3. [Go to 無題のプロジェクト(unsafe)]をクリックします。
  4. [Allow]をクリックします。
Webアプリ用URLをコピー

表示されるWebhook用の[WebアプリURL]をコピーしてください。

ステップ5:公式アカウントのグループ追加の許可設定

LINE Developersの操作
  1. LINE Developersに移動し[コンソールにログイン]をクリックします。
  2. 作成した公式アカウントをクリックします。
  3. 上部バーより「Messaging API設定」をクリックします。
SANANE
SANANE

画像内の招待しているLINE公式アカウントがときどき異なっていますが無視してください・・・

LINE公式アカウントのグループ追加許可設定
  1. [LINE公式アカウント機能]>[グループトーク・複数人トークへの参加を許可する ]の[編集]をクリックします。
  2. 別タブが開き、[グループ・複数人トークへの参加を許可する]を選択します。タブは閉じても問題ありません。
Webhook URLの入力
  1. [Webhook設定]まで移動し、[編集]をクリックします。
  2. ステップ4.3でコピーしたWebhook用のURL(WebアプリURL)を貼り付け、[更新]をクリックします。
応答メッセージの編集
  1. [LINE公式アカウント機能]>[応答メッセージ]の[編集]をクリックします。
  2. 別タブが開きます。[Webhook]をオン、[応答メッセージ]は必要に応じオフにしておきます。タブは閉じても問題ありません。

ステップ6:公式アカウントのグループ追加

LINE公式アカウントのグループへの招待

LINEを開き、任意のグループに作成した公式アカウントを招待します。

グループIDの取得

グループに対し、任意のメッセージを送信します。送信するとグループIDが返信されます。このグループIDをコピーします。

GROUP IDの更新

スプレッドシートの[拡張機能]>[AppsScript]より、YOUR_GROUP_IDを送信されたものに置き換え保存します。

ステップ7:Webアプリの削除

SANANE
SANANE

グループIDを取得するために一時的に作成したWebアプリはセキュリティのため削除しておきます。

GAS上でのデプロイの管理

画面右上の「デプロイを管理」をクリックします。

デプロイのアーカイブ操作①

[デプロイメントをアーカイブ]のアイコンをクリックします。

デプロイのアーカイブ操作②

[アーカイブ]をクリックします。

ステップ8:トリガー作成

SANANE
SANANE

最後に、Googleフォームから回答があった際にGASが応答するためのトリガーを設定します。

トリガーの作成画面まで移動

GASスクリプトエディタの画面で、左のメニューより時計のアイコンをクリックしてトリガー画面を開きます。

トリガーの設定値入力

画面右下の「トリガーを追加」をクリックします。

  • 「実行する関数を選択」でsendToLineを選択します。
  • 「イベントのソースを選択」で「スプレッドシート」を選択します。
  • 「イベントの種類を選択」で「フォーム送信時」を選択します。
トリガーの作成

「保存」をクリックしてトリガーを設定します。「承認が必要です」の画面が出てきたら[ステップ4]と同様に承認作業を行います。

これで設定完了です!
以降、Googleフォームに新しい回答があるたびに、自動でグループ内にLINE公式アカウントから通知が来るようになります。

カスタマイズの依頼について

「本記事の紹介内容をもっと自分用にカスタマイズしたい・・・」

「設定がうまくいかず依頼したい・・・」

「別のツールの作成依頼をしたい・・・」

上記ご要望について、ココナラというサービスにて承っております。

SANANE
SANANE

相談は無料ですのでぜひお気軽にご相談ください!

下記のプロフィールページ、[見積もりの相談をする]からご相談ください。

ABOUT ME
さなね
さなね
システムエンジニアとしての傍ら、自動化に関するツールの作成や発信をしています。 ココナラで紹介しているツールのカスタマイズを承っています。
記事URLをコピーしました