GASでLINEメッセージを簡単に取得する方法を解説!

GASでLINEメッセージを取得したいけど、どうやったらいいのかなあ…。APIとかちょっと難しそうで…。
猫男
猫男
catman
catman
ふむ、catmanが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に送ることが可能です。

なるほど!URLとトークンを指定してリクエストを送るんだね。でも、トークンってどうやって安全に管理するの?
猫男
猫男
catman
catman
トークンの管理は大事だ。GASのプロパティサービスを使うといいぞ。

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で取得するスクリプトを書いてみてください。

  1. GASのスクリプトエディタを開き、新しいプロジェクトを作成してください。
  2. LINE Developersのチャネルアクセストークンをプロパティサービスに保存してください。
  3. 取得したメッセージをログに出力するスクリプトを書いて試してみましょう。

 
 

解答・解説

実行用スクリプト


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としてパースし、各メッセージをスプレッドシートに記録します。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。