当サイトはアフィリエイト広告による収入を得ています

【LINE・GAS】グループトークにメッセージを送信するための苦行

2025年6月12日

グループトークでGASを用いてメッセージを送信する際、以下の2つの値が必要となります。

・メッセージを送信したいLINEのグループID
・チャネルアクセストークン(長期)

前回の記事で、"チャネルアクセストークン(長期)"は取得できるようになりました。

今回はこのうちの"メッセージを送信したいLINEのグループID"を取得したいと思います。
ただ、その方法を私は知りません。
そこでChatGPTに聞いてみると、Webhookイベントを受信するとグループLINEのIDが分かるとのことです。

おーくまん
おーくまん

"おーくまん"です。「忖度なし」で、ガジェットレビューをしています。
<お問い合わせ・プライバシーポリシー>

Webhookとは

LINEログインのAPIの仕組み

突然webhookと言われても分かりません。もう一度ChatGPTに聞いてみると、「メッセージ送信などのイベントがあったときに、自分のサーバ宛に通知をする仕組み」とのことです。そして、この通知の中にLINEのグループIDが入っているそうです。

LINEのグループIDを取得する方法を考える

さて、このwebhookイベントですが主に以下のイベントの時にLINEのグループIDを取得できるようです。

イベントtype説明
参加イベントjoinLINE公式アカウントが、グループトークに参加した時に起きるイベント。
退出イベントleaveLINE公式アカウントがグループトークから退出した時に起きるイベント。
メッセージ送信イベントmessageグループトークでユーザがメッセージを送信した時に起きるイベント。

LINEのグループIDを取得するのは最初の一回だけでよいので、参加イベントの時に取得するようにします。

参加イベントの中身

参加イベントの中身

【実装】コードを書く

準備をする

①自分のGoogleドライブを開く
②任意の場所にスプレッドシートを作成する

Googleドライブの画像

③"Extenisions"(拡張機能)→"Apps Script"の順にクリックする

スプレッドシートの画像

コードを書く

以下のコードを張り付けて、スプレッドシートのIDを記述してください。

スプレッドシートのIDは、スプレッドシートのURLの'd/'と'/edit'の間にある文字列です

スプレッドシートのIDを取得
// スプレッドシートID
const SPREADSHEET_ID = 'スプレッドシートID';

function doPost(e) {
  try {
    // JSONオブジェクトに変換
    var events = JSON.parse(e.postData.contents).events;
  } catch (errror) {
    return ContentService.createTextOutput(JSON.stringify({ content: 'invalid JSON', message: err.message })).setMimeType(ContentService.MimeType.JSON);
  }

  // events配列のチェック
  if (!events || events.length === 0) {
    return ContentService.createTextOutput(JSON.stringify({ 'content': 'no events' })).setMimeType(ContentService.MimeType.JSON);
  }

  // イベントデータを取得
  var event = events[0];
  Logger.log("event.type: " + event.type);

  // 参加イベントでかつグループトークであるとき
  if (event.type == 'join' && event.source.type == 'group') {
    // グループIDを取得
    var groupId = event.source.groupId;
    Logger.log("受信したグループ ID: " + groupId);

    // スプレッドシートを取得
    const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getActiveSheet();

    const lastRow = sheet.getLastRow();
    if (lastRow === 0) {
      // スプレッドシートが空の場合、初回の記録
      sheet.appendRow(["Date", "GroupID"]);  // ヘッダー行を追加
      sheet.appendRow([new Date(), groupId]);  // 初回データを追加
    } else {
      // スプレッドシート内の全グループIDを取得して重複確認
      const data = sheet.getRange(2, 2, lastRow - 1).getValues().flat();
      if (data.includes(groupId)) {
        return ContentService.createTextOutput(JSON.stringify({ 'content': 'already recorded' })).setMimeType(ContentService.MimeType.JSON);
      }

      // 新しいグループ ID を記録
      sheet.appendRow([new Date(), groupId]);
    }
  }

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

デプロイする

①「Deploy」→「New deployment」の順にクリック

デプロイ画面

②設定アイコンを押し、「Web app」を押す

デプロイ画面

②アクセス権を"Anyont"(全員)にして、「Deploy」を押す

デプロイ画面

③アクセス権の承認をする

▼詳細

A.「Authorize access」を押す

デプロイ画面

B.自分のアカウントを選択

自分のアカウントを選択

C.「Advanced」を押す

app画面

D.「Go to Unlitled project(unsafe)」を押す

app画面

E. 「Allow」を押す

アクセス権設定画面

④Web app URLをコピーする

Web app URL画面

設定をする

Webhookの設定

①LINE Developersにアクセスする
②作成した公式LINEアカウント名の個所を選択する

チャネル選択画面

③"Messaging API設定"を押す

チャネル管理画面

④先ほどコピーしたWebHookのURLを張り付けて、「更新」を押す

messaging API設定画面

⑤「Webhookの利用」をONにする

messaging API設定画面

公式LINEアカウントの設定

①LINE Official Account Managerにログインする
②「設定」を押す

LINE Official Account Manager管理画面

③"アカウント設定"から「グループ・複数人トークへの参加を許可する」を押す

LINE Official Account Manager管理画面

④"応答設定"から「応答メッセージ」の設定をOFFにする

LINE Official Account Manager管理画面

⑤"Messaging API"でMessaging APIが有効になっているか確認する。
 以下の画面になっていればOK

LINE Official Account Manager管理画面

グループIDを取得する

グループトークに公式アカウントを招待したのち、作成したスプレッドシートを確認してください。すると、2行目にグループIDが記述されています。これが、さきほど公式アカウントを追加したグループトークのグループIDです。

スプレッドシートの画像

【まとめ】やることが多すぎ

グループトークにメッセージを送るための準備でこれだけの作業数をする必要があるのはなかなかの苦行です。
ただ、準備は終わったので次はいよいよグループトークでメッセージを送信していきます。

おすすめ記事

Galaxy S26 Ultra

スマホ

2026/9/27

【Galaxy S26 Ultra レビュー】さらに日常向けに最適化された最高峰スマホ

僕は毎年Samsungの新作発表会を楽しみにしてたんだけど、ここ数年は新しいスマホが発表されても「どうせAIでしょ」みたいな感じでわくわくすることはなくなってきてた。 ただ、今年は一味違って、AI以外に「プライバシーディスプレイ」なる世界初の機能が搭載されて久しぶりにわくわくしたんだ。1年前にGalaxy S25Ultraを買ったばかりで、ふつうに考えれば買い替える必要はまったくないんだけど、思わず買ってしまった。 この記事では、発売して3ヶ月使いこんだうえでのレビューをしていく。 【Galaxy S26 ...

スマホ デスク環境

2026/7/15

【デスク環境が変わる】Ankerの巻き取り式充電ステーションレビュー【迷わず買え】

発売当初はすぐに売り切れた、巻き取り式ケーブル搭載の充電ステーションAnker Nano Charging Station (7-in-1, 100W, 巻取り式 USB-Cケーブル)。 最初は「そんなにいいの?」と思っていたけど、使ってみるとマジでいい。デスク環境が変わるから、ちょっとでも気になっているなら迷わず買ってほしい商品。 とはいえ急に「買え」と言われても「なんで?」となるから実際の使用感を解説していく。 Anker Nano Charging Station 7-in-1 100Wの ...

ガジェット ライフハック

2026/7/18

【Google Home スピーカー レビュー】Nestシリーズを持っている人は買い替え不要

僕はこれまでスマートスピーカーはGoogle Nest Mini 第2世代を使っていて、今年の4月くらいにGemini for Homeに対応したんだ。 そして6月25日になって、デフォルトでGemini for Homeを搭載したGoogle Home スピーカーが発売された。ただ、これがNest Miniとどう違うのかよく分からない。 2019年発売のGoogle Nest Mini第2世代。Gemini for Homeに対応した だけどGoogle公式が「Gemini for Home向けに作られ ...

スマートウォッチ

2026/9/7

【Pixel Watch 5レビュー】進化なし。5じゃなくて4を買え

今年もGoogleからPixel watch5が発売されたけど、購入前から正直Pixel Watch4から大きな進化は感じていなかったんだ。 理由はいろいろあるんだけど、「購入してみないと分からないことがあるかもしれない」「何か違いがあるだろう」と思ったから購入した。1週間使ってみたから、実際にどうだったのかまとめていく。 【結論】Pixel Watch 4からの買い替えは不要 まず結論からだけど、今Pixel Watch 4を持っている人はPixel Watch 5に買い替える価値はない。 なぜなら日常 ...

Bose QuietComfort Ultra Headphones (第2世代)

オーディオ

2026/6/23

【Bose QuietComfort Ultra Headphones (第2世代)レビュー】長時間使用も◎最高級の音楽体験を手に入れられるヘッドホン

僕はSONYのWH-1000XM6を持っていて、間違いなく最高級のヘッドホンではあるんだけど、弱点が1つ。 それは1時間も着けていると耳が痛くなってくることなんだ。ノイキャンや音質はいいけど、長い時間装着することができないのが地味にストレス。 飛行機を使う旅行が控えていたこともあって、1時間以上は痛みや違和感なく付けられるヘッドホンが欲しいなと思いBoseのQuietComfort Ultra Headphones 第2世代を購入したからレビューしていく。 Bose QC Ultra Headphones ...

  • この記事を書いた人
アイコン

おーくまん

副業ガジェットブロガー。どの企業とも繋がりがないため、忖度一切なしのレビューをします。

-プログラム
-, ,