GASでLINEメッセージを簡単に取得する方法を解説!
GASでLINE Messaging APIを使う準備
GASでLINEのメッセージを取得するには、まずLINE Messaging APIを利用するための準備が必要です。
LINE Developersに登録しよう
まずは、LINE Developersに登録を行います。ここで、ライブラリの管理やAPIキーの発行が行われます。
チャネルを設定する
LINE Developersで新しいチャネルを作成し、チャネルIDとシークレットを取得します。
これらの情報は後ほどGASでのスクリプト作成に必要です。
GASのスクリプトを作成する
GASを使ってLINEメッセージを取得するためのスクリプトを作成します。
HTTPリクエストを送信する
まずは、LINEのAPIにGASからリクエストを送ってみます。以下にその基本構造を紹介します。
function getLineMessages() {
const url = 'https://api.line.me/v2/bot/message/reply';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + 'YOUR_CHANNEL_ACCESS_TOKEN'
};
const options = {
'method' : 'get',
'headers' : headers
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
}
UrlFetchApp.fetch()は指定したURLに対してHTTPリクエストを送ります。HTTPヘッダーを設定することで、適切な情報をLINE APIに送ることが可能です。
GASでプロパティサービスを使ってトークンを管理する
トークンはスクリプトのプロパティサービスに保存しておき、コード内で直書きしないようにするのが基本のセキュリティ対策です。
プロパティサービスの設定
プロパティサービスを使えば、シンプルにトークンの管理が可能です。
function setToken() {
const properties = PropertiesService.getScriptProperties();
properties.setProperty('LINE_ACCESS_TOKEN', 'YOUR_CHANNEL_ACCESS_TOKEN');
}
このスクリプトを1回実行しておくことで、トークンがスクリプトのプロパティに保存されます。
取得したLINEメッセージをどう活用するか
GASで取得したLINEメッセージをスプレッドシートに保存したり、ログを管理したり、様々な活用法があります。
スプレッドシートに保存する
スプレッドシートにメッセージを記録する例を紹介します。
function logMessages(messages) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
messages.forEach(function(message) {
sheet.appendRow([new Date(), message.id, message.text]);
});
}
このコードは、取得したメッセージデータをスプレッドシートに日時とともに保存します。
練習問題
以下の内容を実行し、LINEメッセージをGASで取得するスクリプトを書いてみてください。
- GASのスクリプトエディタを開き、新しいプロジェクトを作成してください。
- LINE Developersのチャネルアクセストークンをプロパティサービスに保存してください。
- 取得したメッセージをログに出力するスクリプトを書いて試してみましょう。
解答・解説
実行用スクリプト
function getLineMessages() {
const properties = PropertiesService.getScriptProperties();
const token = properties.getProperty('LINE_ACCESS_TOKEN');
const url = 'https://api.line.me/v2/bot/message/reply';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
};
const options = {
'method' : 'get',
'headers' : headers
};
const response = UrlFetchApp.fetch(url, options);
const messages = JSON.parse(response.getContentText()).messages;
logMessages(messages);
}
function logMessages(messages) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
messages.forEach(function(message) {
sheet.appendRow([new Date(), message.id, message.text]);
});
}
このスクリプトはLINEのメッセージ取得APIを利用し、取得したメッセージをスプレッドシートに保存する流れを構成しています。まず、プロパティサービスを用いてセキュアにトークンを読み出し、その後、APIリクエストを送信します。APIのレスポンスをJSONとしてパースし、各メッセージをスプレッドシートに記録します。