Google Apps ScriptからLINE Messaging APIで通知する方法

アクセストークンをコードへ直接書かない構成

記事後半の基本構成は現在も利用できますが、アクセストークンと送信先IDはスクリプトプロパティへ保存し、スプレッドシートのセルや公開コードへ書かないでください。

function pushLineMessage(text) {
  const props = PropertiesService.getScriptProperties();
  const token = props.getProperty('LINE_CHANNEL_ACCESS_TOKEN');
  const to = props.getProperty('LINE_USER_ID');

  const response = UrlFetchApp.fetch(
    'https://api.line.me/v2/bot/message/push',
    {
      method: 'post',
      contentType: 'application/json',
      headers: { Authorization: 'Bearer ' + token },
      payload: JSON.stringify({
        to: to,
        messages: [{ type: 'text', text: text }]
      }),
      muteHttpExceptions: true
    }
  );

  console.log(response.getResponseCode());
  console.log(response.getContentText());
}

HTTP 200以外の場合はレスポンス本文を確認します。トークンをログへ出力してはいけません。LINE Notifyは終了済みですが、このコードはLINE公式アカウントのMessaging APIを利用します。

LINE公式:メッセージを送信する

Python版の現行SDK手順

先日、LINE Messaging APIを使って、気象情報APIから取得してきた情報をLINEに通知させてみました。(詳細は以下の記事をどうぞ) PythonからLINEへ通知する関連記事 単純にLinuxサーバからであれば問題なくLINEへの通知は出来ましたので、今回は今更ではありますが普段あまり使ってこなかったGoogle Apps Script(GAS) からLINEへの通知を試してみたいと思います。(主にGAS初心者向けの内容です。)

システムの概要

今回は以下のような流れです。
  1. GASでGoogleスプレッドシートから情報取得
  2. GASからLINEに通知する
GASでGoogleスプレッドシートからの読みとった情報をLINEに通知してみます。

GAS・スプレッドシート・LINEの準備

GASは、上図のようにGoogleドライブから簡単に作ることが出来ます。(利用にはGoogleアカウントが必要です)GASの具体的な操作手順はここでは割愛します。 データ取得用のGoogleスプレッドシートを用意しておきます。今回はテスト用という事で test_book というブックのシート名’シート1’から情報を取得してみます。セルB2に適当な文字列’あいうえお’といれてGASから読めるかを確認します。 スプレッドシートを新規作成した際のIDは、GASからアクセスする際にどのブック見るか指定する際に必要となりますので控えておいてください。IDはURLの以下の部分を抜き出してください。
https://docs.google.com/spreadsheets/d/[任意のID]/edit#gid=0
LINEはLINEの管理画面より、アクセストークンと通知先のユーザーIDを取得し、控えておいてください。

GASのコード

var spreadsheet = SpreadsheetApp.openById('[スプレッドシートのID]');
const sheet = spreadsheet.getSheetByName('シート1');
var value=sheet.getRange("B2").getValue();

// LINE Botのアクセストークン
var access_token = "[LINEのACCESS_TOKEN]";
// LINEグループのグループID
var group_id = "[LINEのUSER_ID]";

function pushMessage(message) {
  var push_data = {
    "to": group_id,
    "messages": [
      {
        "type": "text",
        "text": message,
      }
    ]
  };
  var options = {
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + access_token
    },
    "payload": JSON.stringify(push_data),
    "muteHttpExceptions": true
  };
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options);
}

pushMessage(value);
Google Apps Script(GAS)を使うと、LINEBotとしても活用する事ができますが、今回はテストなので単純に結果をLINEに通知させてみます。 value という変数にスプレッドシートB2セルの値を取得し、LINE通知用のテキストとして渡しています。

GASからLINEへ通知

GASのスクリプトを実行してみると、上図のようなセキュリティの許可を求められますので、任意のアカウントで許可してください。 正常にプログラムが作動した場合は、上図のようにLINEに通知が来るはずです。(テストで色々試していたので連続していますが、’あいうえお’と来ているのが当プログラム実行時の結果です)

まとめ

GASからGoogleスプレッドシートの情報を読み取り、LINEに通知する事ができました。GASはスプレッドシート以外にもGoogleカレンダーGmailなどのGoogle関連のサービスとも親和性が高いので連携させたいと思います。 例えばGoogleスプレッドシートに投稿予定をリスト化しておいて、定期的にLINEに通知するという事も可能です。また、Googleカレンダーに書き込まれた予定をLINEに共有通知という事も可能です。 新たにサーバを立ててcronにスクリプトを仕込んでといった事をしなくともGoogleアカウント一つあれば、クラウドだけで簡単に簡潔出来てしまうのは魅力的ですね。
タイトルとURLをコピーしました