Google Apps Script で LINE Notify

Google Apps Script から LINE に通知を送る

Google Apps Script(GAS)からリアルタイムな通知を送る方法としてLINEにメッセージを送ってみる。

LINE Notify を使うとアクセストークンを取得すれば、REST APIで簡単にメッセージを送れるので、これを使うことにした。

前準備

[超簡単]LINE notify を使ってみる を参考に、 LINEの設定 および LINE Notifyのアクセストークンの取得を行っておいてください。

[!NOTE] トークルームでなく、『1:1でLINE Notifyから通知を受け取る』を選択した場合は、ID検索で「@linenotify」を検索して友だちに追加してください。

[!NOTE] LINE Notifyホーム
ドキュメント

手順

まずはGoogleドライブ で新しいGoogle Apps Scriptのプロジェクトを作成します。

次に、作成したspreadsheetにGoogle Apps Script(GAS)を追加します。

// アクセストークン 
const ACCESS_TOKEN = '«取得したアクセストークン»';

/**
 * テスト用関数
 */
function myFunction() {
  // 時刻文字列取得
  var date_str = Utilities.formatDate(new Date(),"JST", "yyyy/MM/dd hh:mm:ss");
  var token = ACCESS_TOKEN;
  LINE_notify(token, date_str + "    てすとぉぉぉ" );
}

/**
 * メッセージ送信処理
 *
 * @param {string} token    - アクセストークン
 * @param {string} message  - 送信するメッセージ
 */
function LINE_notify(token, message){
    const url = 'https://notify-api.line.me/api/notify';
    var headers = { 
      'Authorization': 'Bearer ' + token 
    };
    var options = { 
      'headers' : headers ,
      'method' : 'post' ,
      // encodeURIComponent()はなくても大丈夫っぽい...
      // 'payload' : 'message=' + encodeURIComponent(message)
      'payload' : 'message=' + message, 
      'muteHttpExceptions': true        // エラーが返ってきても例外発生させない
     }; 
    var output;

    try {
      // メッセージを送信 
      var res = UrlFetchApp.fetch(url ,options);

      var resCode = res.getResponseCode();              // HTTP レスポンスステータスコード
      var resBody = JSON.parse(res.getContentText());   // レスポンス本体はJSONなのでパースする

      if (resCode === 200) {
        // レスポンスが200 → 正常終了
        Logger.log("SUCCESS: %s", resBody.message);
      } else {
        // それ以外→エラーレスポンス
        Logger.log(Utilities.formatString("ERROR: status:%d  body:%s", resCode, resBody.message));
      }
    } catch(e) {
      // その他のエラー(DNSエラー、タイムアウトなど)は例外が発生する
      Logger.log("ERROR: " + e);
    }
}

最後に

これだけだと大したことできないけど、ライブラリ化して他のサービスと組み合わせて使えばなんかのPUSH通知っぽく使えるかな?

[!NOTE] Spreadsheetの時のように、ウェブアプリにしようかと思ったら、もともとREST APIだから全然意味ないので関数作るだけにしておいた。
(POST使えない場合にGETで受け付けるラッパみたいなのは考えられなくはないけど)

参考

通知回数の上限は1000回/1時間/アクセストークンです。(そんなに送ったら鬱陶しいでしょうから問題ないかな?)