LINE Bot 使用時に必要になるユーザー ID、グループ ID ですが、自身のユーザー ID 以外は取得にひと手間必要です。いろいろ取得する方法はあるようですが、GAS が比較的容易そうです。
(自分のものは LINE Developers 内、Channel の Basic settings に記載されています)
![詳解! Google Apps Script完全入門 [第3版]](https://m.media-amazon.com/images/I/51Ave84HXfS._SL160_.jpg)
詳解! 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 が書き込まれ続けます)
