LINEグループIDの取得方法解説 GASとWebhook|PowerAutomateでドコモポイント確認依頼をLINEに通知する③

Power AutomateでLINEに通知するフローを作成した話。

今回はLINEグループのグループIDの取得方法を解説。WebhookとGASを使った仕組みと、実際の取得手順を具体例付きでまとめる。

LINE通知で特定のグループに送信する方法を検討

公式アカウントのチャネルアクセストークンを使って公式アカウントからメッセージを送信すると、設定やAPIの使い方によっては、意図しない宛先に送信されてしまう可能性があることが分かった。

前回の記事でお伝えした通り、公式アカウントは不特定多数の人に友達登録されてしまう可能性があるため、無作為に発言されてしまうのは避けたい。

LINEはID指定で宛先を制御可能

LINEのグループにはグループID(1対1のチャットだとユーザーID。以下グループID表記で統一。)が存在し、LINEのMessaging APIではグループIDを指定してメッセージを送信することが可能とのこと。

まずはこのグループIDを特定する。

LINEのグループID取得までの流れ

普段LINEを使っていても、グループIDを見る機会はないが、Webhookを使えばLINEのグループIDを取得することが可能とのこと。

  • グループIDを特定したいグループで発言(公式アカウントではなく自分で送信する)
  • Webhook経由でGoogle Apps Scriptにイベントが届く
  • そのイベント情報からグループIDを取り出す
  • そのIDを公式アカウントの発言としてチャットに送信する

この流れでグループIDを取得していく。

Google Apps ScriptでIDを返す仕組みを作っていく

手順としては、まずGoogle Apps Script側の設定から始める。

GoogleスプレッドシートからApps Scriptを作成する

Googleスプレッドシートから

  1. 「拡張機能」をクリック
  2. 「Apps Script」をクリック

これで、Googleスプレッドシートに紐づく形でApps Scriptのエディタ編集画面に入る。

チャネルアクセストークンの扱い

前回の記事で、LINE Developersから取得したチャネルアクセストークン(長期)が必要になる。

取得したチャネルアクセストークンについては、コードに直接書かず、スクリプトプロパティに保存しておくことを推奨する。

  1. 「プロジェクトの設定」を押す
  2. 「スクリプトプロパティを追加」を押す
  3. 「プロパティ」に任意の値を入力する
  4. 「値」にチャネルアクセストークン(長期)の値を入力する
  5. 「スクリプトプロパティを保存」を押す

これでGASの方ではプロパティ(画像の例だとLINE_API_KEY)でチャネルアクセストークンを呼び出せるため、GASのコードにチャネルアクセストークンを記入する必要がなくなる。

後でグループIDも保存できるように先に枠だけ用意(画像の例だとLINE_GROUP_ID_GPとLINE_LINE_GROUP_ID_USER)

Google Apps Scriptのコードを記述する

  1. 「エディタ」をクリック
  2. 「コード.gs」をクリック

ここにコードを記述していく。

以下のコードは、公式LINEを個人用途で検証するためのサンプルです。
セキュリティ対策(署名検証等)は省略しており、本番環境や公開Botでの利用は推奨しません。
コードは生成AIを用いて作成しており、利用は自己責任でお願いします。

function doPost(e) {
  // スクリプトプロパティでLINE_API_KEYにAPIキーを設定
  const token = PropertiesService.getScriptProperties().getProperty('LINE_API_KEY');
  
  // LINEからのデータを受け取る
  const event = JSON.parse(e.postData.contents).events[0];
  let targetId;

  // 送信元が「グループ」ならグループIDを、それ以外ならユーザーIDを取得
  if (event.source.type === 'group') {
    targetId = event.source.groupId;
  } else {
    targetId = event.source.userId;
  }

  // 取得したIDをその場所に返信(プッシュ通知)する
  const url = 'https://api.line.me/v2/bot/message/push';
  const payload = {
    'to': targetId,
    'messages': [{
      'type': 'text',
      'text': '宛先IDを特定したやで!\n\n' + targetId + '\n\n↑これをコピーしてメモしてな!'
    }]
  };

  const options = {
    'method': 'post',
    'headers': {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + token
    },
    'payload': JSON.stringify(payload),
    'muteHttpExceptions': true // エラー内容をログに残すための魔法の1行
  };

  UrlFetchApp.fetch(url, options);
}

デプロイを実行してWebhookのキーを入手する

コードの記述が終わったらデプロイ操作を実行する。

  1. 右上の「デプロイ」をクリック
  2. 「デプロイを管理」をクリック
  1. 「編集」をクリック
  2. 「新バージョン」を選択
  3. ウェブアプリのURLをコピーして控えておく
  4. 次のユーザーとして実行を「自分」に設定
  5. アクセスできるユーザーを「全員」に設定
  6. 「デプロイ」をクリック
  7. 次の画面で「完了」をクリック

これでGoogle Apps Script側の設定は完了。

LINEで実際にグループIDを取得

基本的な準備は終わったのでLINE側で設定の実施と、実際にグループIDを取得する。

LINE DevelopersでWebhookの設定をする

次に、LINE Developersを開く。

トップ画面から
作成した公式アカウントを選択>Messaging API設定>Webhook設定

  1. Webhookの利用にチェックを入れる
  2. 編集ボタンを押して先ほどGASでコピーしたウェブアプリのURLを入力する。

最後に更新ボタンを押して、LINE側の準備完了。

LINEでメッセージを送信してみる

適当に公式LINEが入っているグループで発言してみる。

すると自動で発言が返ってきて、無事グループIDを取得することができた。

使い分けができたらという想定で、私・公式LINEのグループIDと、私・夫・公式LINEのグループIDを取得して、GASのスクリプトプロパティに保存しておく。

これで、実際の確認通知をLINEで受け取る準備ができた。


次回は、Googleスプレッドシートに書き込んだデータをもとに、Google Apps Script(GAS)でLINE通知を送る仕組みの完成まで。

タイトルとURLをコピーしました