Closed2
LINE Messaging API の Webhook で Bot を友だち追加したユーザーの User ID を取得する
前回の続きを少し。
LINE Bot からのメッセージ送信先として指定するためのユーザーIDは、LINEの画面上から確認することができない。
開発者自身はLINE Developers のコンソール画面から自分のIDを確認できるが、通常のLINE画面上ではAPI用のIDを確認することはできない。
また、Botの管理者側で、そのBotを友だち登録しているユーザーのIDを確認するようなこともできない
(認証済みアカウントまたはプレミアムアカウントではLINE公式アカウントを友だち追加したユーザーのリストを取得するAPIが使えるらしいが)。
普通のアカウントでそのBotを友だち登録したユーザーのIDを取得するためには、友だち登録されたときにコールされるWebhookで待ち受けておいて取得する必要がある。
簡単そうな Google Apps Script (GAS) での取得を試す。
やりたいこと
Botが友だち追加されたり、Botにメッセージ送信されたタイミングで、その内容をGoogle Drive上のスプレッドシートに記録する。
このときに User ID もあわせて記録しておく。
準備
Google Drive上のどこかに保存先となるスプレッドシートのファイルを作っておく。
ブラウザ上で開いたときのURLから、ファイルのIDを確認( https://docs.google.com/spreadsheets/d/[この部分]/edit
)。
GAS 側のコード作成
- Google Drive 上の任意のフォルダで新規 Google Apps Script を作成
- プロジェクトの設定 > スクリプト プロパティ が環境変数的なものみたいなので、ここに LINE のチャネルアクセストークンを設定しておく
- ここでは
LINE_ACCESS_TOKEN
という名前にした- 使うときは
PropertiesService.getScriptProperties().getProperty("LINE_ACCESS_TOKEN")
- 使うときは
- ⇒GAS側から何か応答メッセージを送るわけでなければ別にtoken必要なかった
- ここでは
スクリプト全体はこんな感じ。
function doPost(e) {
const events = JSON.parse(e.postData.contents).events;
// スプレッドシートを開いて、1シート目を使用
const targetBook = SpreadsheetApp.openById("[ファイルID]");
const targetSheet = targetBook.getSheets()[0];
for (let eventData of events) {
// 受信イベントデータから必要な項目を取得
const time = new Date(eventData.timestamp);
const eventType = eventData.type;
// ※友だち追加のイベント(type:follow)とかのときは
// messageフィールド自体がないので注意
const messageType = eventData.message?.type;
const messageText = eventData.message?.text;
const userId = eventData.source?.userId;
// 最後の行のあとに追加
targetSheet.appendRow([time, eventType, userId, messageType, messageText, eventData]);
}
}
timestampのところは、ちゃんとやるならタイムゾーンとか気にしないとだめそうだけど、今回はおまけなので省略。
応答のメッセージを返したい場合のサンプルは こちらなどにありました。
GAS デプロイ
このへんはどちらかというとGASの基本なのだと思う。
初回デプロイ
- デプロイ > 新しいデプロイ で、以下を設定して「デプロイ」実行
- 種類の選択 > ウェブアプリ
- 「次のユーザーとして実行」は自分に
- 「アクセスできるユーザー」は全員に
- 「このウェブ アプリケーションを使用するには、データへのアクセスを許可する必要があります。」と表示されるので、「アクセスを承認」をクリック → Google アカウントを選択
- 「Google hasn’t verified this app」というエラーになった(日本語環境だと「このアプリは確認されていません」になる?)
- 左下の「Advanced」(「詳細」)をクリックして開き、そのままUnsafeと書いているリンクをクリック → Allow でOK
- 参考:Google Apps Script(GAS)入門 初回コード実行時の承認・許可方法を解説【図説】
- 「デプロイを更新しました」という画面で、表示されるURLを控えておく
2回目以降のデプロイ
- デプロイ > デプロイを管理
- 前回のデプロイを選んで、編集アイコンクリック
- バージョンで「新バージョン」を選択して「デプロイ」実行
LINE 側で Webhook 設定
-
LINE Developers コンソールで、チャネルを選択して、Messaging API設定タブ > Webhook URL に先ほどのURLを貼り付ける
- URL欄の下に「Webhookの利用」チェックがあるので、忘れずにONにしておく
このスクラップは2023/01/09にクローズされました