🕶️

LINEのグループIDを教えてくれるLINE Botを開発した

に公開

LINE Botを作る過程で、特定のLINEグループのIDを取得できるBotを開発しました。この記事では、開発の背景や手順、使用したGoogle Apps Script (GAS) のコードについて、わかりやすく解説します。


開発の背景

LINEグループIDは、グループの管理や外部システムとの連携を行う際に役立ちます。しかし、LINE公式の機能だけではグループIDを直接取得する方法がなく、これを手軽に実現できる方法を模索していました。
そこで、Google Apps Scriptを使い、指定のメッセージを送るだけでグループIDを返信してくれるLINE Botを作成しました。


実装の流れ

1. 必要な準備

LINE Developersコンソールの設定

  1. LINE Developersにアクセスして新しいチャネルを作成します。
  2. Messaging APIを有効化し、チャネルアクセストークンを取得します。
  3. Webhook URLにGASのデプロイURLを設定します。

Google Apps Scriptのセットアップ

  1. Google Driveから新しいスクリプトプロジェクトを作成します。
  2. 下記のコードをコピー&ペーストします。

コードの解説

以下が、Botの主な処理を行うコードです。

チャネルアクセストークンの保存

function setupProperties() {
  const scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty('CHANNEL_ACCESS_TOKEN', 'ここにアクセストークン');
}

setupProperties 関数は、アクセストークンをGASのスクリプトプロパティに保存します。この関数は、初回セットアップ時のみ実行してください。


LINEのWebhookを処理

function doPost(e) {
  try {
    const scriptProperties = PropertiesService.getScriptProperties();
    const CHANNEL_ACCESS_TOKEN = scriptProperties.getProperty('CHANNEL_ACCESS_TOKEN');

    const contents = JSON.parse(e.postData.contents);

    contents.events.forEach(event => {
      if (event.type === 'message' && event.message.type === 'text') {
        const userMessage = event.message.text.trim();

        if (userMessage === 'グループID') {
          const groupId = event.source.groupId;

          const replyMessage = groupId 
            ? 'このグループのIDは: ' + groupId + ' です。'
            : 'グループIDを取得できませんでした。';

          replyToLine(event.replyToken, replyMessage, CHANNEL_ACCESS_TOKEN);
        }
      }
    });

    return ContentService.createTextOutput(JSON.stringify({status: 'success'})).setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    Logger.log('Error in doPost: ' + error);
    return ContentService.createTextOutput(JSON.stringify({status: 'error', message: error.message})).setMimeType(ContentService.MimeType.JSON);
  }
}

主なポイント

  1. Webhookデータの受信: LINEから送られてくるデータを解析。
  2. 条件分岐でメッセージ処理: ユーザーが「グループID」と入力した場合にグループIDを取得。
  3. エラー処理: 万が一のエラーにも対応する設計。

LINEへの返信処理

function replyToLine(replyToken, message, channelAccessToken) {
  const url = 'https://api.line.me/v2/bot/message/reply';
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + channelAccessToken
  };
  const payload = {
    replyToken: replyToken,
    messages: [
      {
        type: 'text',
        text: message
      }
    ]
  };
  const options = {
    method: 'post',
    headers: headers,
    payload: JSON.stringify(payload)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    if (response.getResponseCode() !== 200) {
      Logger.log('返信に失敗しました。ステータスコード: ' + response.getResponseCode());
    }
  } catch (error) {
    Logger.log('Error in replyToLine: ' + error);
  }
}

主なポイント

  • replyToken: 返信に使用するLINE独自のトークン。
  • messages: LINE Botが送るメッセージ内容を指定。
  • UrlFetchApp: LINE APIを呼び出し、返信を送信。

動作確認とデプロイ

  1. デプロイ: GASで「ウェブアプリとしてデプロイ」を選択。
  2. Webhook URLの登録: デプロイURLをLINE Developersコンソールに設定。
  3. Botを招待: LINEグループにBotを追加。

注意

通常設定のままだとBotをグループに招待できません。
招待してもすぐに退会してしまいます。
Botのアカウント設定(?)でグループへの参加許可を承認する設定項目があるので、そこで承認するようにしましょう!

グループ内で「グループID」とメッセージを送信すると、BotがグループIDを返してくれるようになります。


結果と今後の改善点

結果

https://x.com/Haruki_dev/status/1864000470685286887

改善点

  • メッセージのカスタマイズ: より多様なコマンドに対応。
  • セキュリティ: Webhookのリクエスト検証を追加してセキュリティ強化。

まとめ

LINEグループIDを教えてくれるBotの作成は、GASとLINE Messaging APIを活用することで比較的簡単に実現できます。この記事を参考に、ぜひ自分の用途に合ったBotを作ってみてください!

あなたのLINE Bot開発の参考になれば幸いです!

Discussion