GAS(スプシ)からLINEに通知する

2024/07/16に公開

GASのスクリプトでLINEに通知したいケースがあり、対応したのでまとめました。

はじめに

外部アプリケーションからGASを介してスプシを更新するスクリプトを作っていたのですが、更新にすぐ気づけるかというところがネックになっていました。LINEだと日常的に開くので、LINEに通知できればすぐ気づくなと思いこの機能を実装することにしました。

以下のユースケースでこの機能が使えるかと思います。

  • GAS実行時にLINE通知したい
  • 定期的にGASでLINE通知したい(トリガー機能と組み合わせて)
  • スプシ更新時にLINE通知したい(トリガー機能と組み合わせて)

やること

やることは以下です。思ったよりめちゃめちゃ簡単だ!

  • LINE NotifyでLINEアクセストークンを発行
  • GASでスクリプト作成

LINE NotifyでLINEアクセストークンを発行

LINE Notifyにアクセスして、アクセストークンを発行します。(こんなのがあるなんて知らなかった。)

  1. 以下画面の右上から自分のLINEでログインします。
    (通知はLINENotifyというアカウントから通知されるので、自分のアカウントから通知されません。)

  2. ログインしたら右上がアカウント名になっていると思うのでそこをクリックして
    表示されるメニューから「マイページ」を選択します。

  3. 画面下部の「トークンを発行する」からトークンを発行します。


    ○入力項目
     トークン名:通知メッセージの先頭に【】付で記載されています。
     トークルーム:通知先グループです。通知したいグループを選択してください。
            自分とLINE Notifyアカウントだけのグループを作成することも可能です。

  4. アクセストークンが発行されるので、コピーして控えてください。

GASでスクリプト作成

今回は適当にスプシを作成して、そこからGASプロジェクトを作成して、実装していきます。

コード.gsに以下を記述します。
元々あるコードは削除いただいて構いません。
既存のスクリプトに追加する方はsendLineNotificatonをご自身のスクリプトに追加して、
適宜呼び出してあげると良いと思います。

function myFunction() {
  sendLineNotification();
}

function sendLineNotification() {
  message = "GASからの通知だよ"
  var accessToken = "[LINEアクセストークン]"; 
  var options = {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + accessToken,
      "Content-Type": "application/x-www-form-urlencoded"
    },
    "payload": "message=" + encodeURIComponent(message)
  };
  
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

次がハマりました。。
appsscript.jsonの修正が必要でした。
左のメニューから プロジェクト設定 -> 「appsscript.json」マニフェスト ファイルをエディタで表示する
にチェックをつけます。
すると、appsscript.jsonが修正できるようになるので、oauthScopesを追加します。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
   "https://www.googleapis.com/auth/script.external_request"
  ]
}

ここまでできたら「実行」ボタンから実行します。
初回だけ「認証が必要です」と認証ポップアップがでてくるので認証してあげます。

すると以下のようにメッセージが届くと思います!!

まとめ

jsonファイルの修正が必要だったのはちょっと罠でしたが、思ってた数倍簡単に導入できてよかったです。
普段業務でslack使ってる身からすると、トークン名でアカウント名を上書いてほしかったりするけど、高望みなのかな。。

Discussion