2022年5月4日水曜日

GAS で LINE Bot 使用時のユーザー ID、グループ ID を簡単に取得する(ついでにユーザー名も)

LINE Bot 使用時に必要になるユーザー ID、グループ ID ですが、自身のユーザー ID 以外は取得にひと手間必要です。いろいろ取得する方法はあるようですが、GAS が比較的容易そうです。

(自分のものは LINE Developers 内、Channel の Basic settings に記載されています)


詳解! Google Apps Script完全入門 [第3版]
詳解! Google Apps Script完全入門 [第3版]

by SimpleImageLink


ということで、ユーザー ID、グループ ID、それから複数人のユーザー ID を取得する際にどれが誰のものだか分からなくならないようにユーザー名を取得する GAS を作りました。

動きとしては、Bot を含むグループでメッセージを送るとユーザー名、ユーザー ID、グループ ID を取得、スプレッドシートに書き出されます。LINE Bot と一対一のトークの場合はグループ ID は省略されます。

スプレッドシートはまっさらで大丈夫です。それぞれ、1列目にユーザー名、2列目にユーザー ID、3列目にグループ ID が入ります。ユーザー ID は「U」で、グループ ID は「C」で始まります。

スクリプトは以下の通りです。

const ACCESS_TOKEN = "チャンネルアクセストークン";

function doPost(e){
  let json = JSON.parse(e.postData.contents);
  let userId = json.events[0].source.userId;
  let groupId = json.events[0].source.groupId;

  const spst =  SpreadsheetApp.openById("スプレッドシート ID").getSheetByName("シート名");
  let row = spst.getLastRow();

  spst.getRange(row + 1,1).setValue(getUserName(userId));
  spst.getRange(row + 1,2).setValue(userId);
  spst.getRange(row + 1,3).setValue(groupId);
}

function getUserName(userId) {
  const url = "https://api.line.me/v2/bot/profile/" + userId;
  const response = UrlFetchApp.fetch(url, {
              "headers" : {
              "Authorization" : "Bearer " + ACCESS_TOKEN
              }
  });
  return JSON.parse(response.getContentText()).displayName;
}

1行目の「チャンネルアクセストークン」、8行目の「スプレッドシート ID」「シート名」を記載すれば完成です。

このスクリプトをウェブアプリとして公開。URL を LINE Developers で Webhook として設定します。

ちなみに、スクリプトを修正した場合、反映には新バージョンとしてデプロイが必要です。たまに忘れて混乱します(笑)。

これでメッセージを送れば ID 等が取得できます。

取得が済んだら Webhook を切っておきます。(切らないとメッセージを送るたびに延々と ID が書き込まれ続けます)


ツツジ

今年はツツジがきれいに咲きました。


Twitter(@nkkmd)日々更新中です。