LINE Bot 使用時に必要になるユーザー ID、グループ ID ですが、自身のユーザー ID 以外は取得にひと手間必要です。いろいろ取得する方法はあるようですが、GAS が比較的容易そうです。
(自分のものは LINE Developers 内、Channel の Basic settings に記載されています)
詳解! 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」「シート名」を記載すれば完成です。
ちなみに、スクリプトを修正した場合、反映には新バージョンとしてデプロイが必要です。たまに忘れて混乱します(笑)。
これでメッセージを送れば ID 等が取得できます。
取得が済んだら Webhook を切っておきます。(切らないとメッセージを送るたびに延々と ID が書き込まれ続けます)