LoginSignup
6
4

More than 3 years have passed since last update.

GAS(Google Apps Script)× LINE Bot(Messaging API)で、何かの値を定期的にLINEに送ってみる

Last updated at Posted at 2020-09-26

1.はじめに

前回は、「GAS(Google Apps Script)で定期的に値を記録」のプログラムを作ってみましたが、今回は取得した値を定期的にLINEで配信するというBotを作ってみます。

前回の2章「2.GoogleスプレッドシートでWEBページの特定の値を表示」で作ったスプレッドシートを利用して、その値を配信します。

2.LINE Developersにログインして、Bot用のチャネルを作成

LINE Developersにログインします。
LINEのアカウントが必要になります。

ログイン先URLは↓です。
https://developers.line.biz/ja/

ログインすると、↓の画面になったでしょうか?

FireShot Capture 143 - LINE Developers - developers.line.biz.png

※もし、この画面にならなかった場合には、↓にアクセスしてみてください。
https://developers.line.biz/console/

左下のプルダウンで、「日本語」を選択すると、文字が
日本語になります。

FireShot Capture 146 - LINE Developers - developers.line.biz.png

今回新たにLINE Botを作成するために、まずはプロバイダーを作成する必要があります。とりあえず、テストですし、なんでもいいと思います。私は自分の名前+P(JunichiHiguchi_P)で付けてます。

「作成」ボタン押すと、プロバイダー名を入力する画面になります。
適当な名前を入力して「作成」ボタンを押してください。

FireShot Capture 151 - LINE Developers - developers.line.biz.png

次にチャネルの設定です。
作成したプロバイダーを選択し、新規でチャネルを作成します。
「新規チャネル作成」をクリックしてください。

FireShot Capture 154 - LINE Developers - developers.line.biz.png

「Message API」を選択します。

FireShot Capture 157 - LINE Developers - developers.line.biz.png

「チャネル名」「チャネル説明」「大業種」「小業種」などは適当に記載してください。
「作成」ボタンをクリックすると、チャネルの作成完了です。

【補足】ハマりポイント!
FireShot Capture 171 - LINE Developers - developers.line.biz.png
「チャネル名」によっては、「この名前は予約済みのため使用できません。ほかの名称を使用してください。」というメッセージが表示されることがあります。これは、「チャネル名」に「LINE」などの特定の文言が入っている場合に起こるようです。私が把握しているのは、「LINE」という文字だけなのですが、他にもあると思います。そういった文字を避けて、「チャネル名」を付ければOKです。

「Massaging API設定」タブをクリックすると、QRコードが表示されますので、ご自分の携帯のLINEアプリから、QRコードを読み込んで友達追加してみてください。

FireShot Capture 166 - LINE Developers - developers.line.biz.png

携帯(AndroidでもiPhoneでも)のLINEアプリでQRコード読み込むと、

「追加」ボタンを押すと、

この追加してすぐの初めのメッセージは、↓「LINE Official Account Manager」から変更することができます。
※「LINE Official Account Manager」へは、「チャネル基本設定」タブを選択後の上部にあるリンクから移動できます。

FireShot Capture 174 - LINE Official Account Manager - manager.line.biz.png

↓「あいさつメッセージ設定」ボタンを押すと、

FireShot Capture 177 - LINE Official Account Manager - manager.line.biz.png

ここから変更できます。

また、「こんにちは」などとメッセージを打ち込んでみると、
↓のように、「個別のお問い合わせを受け付けておりません。」的な応答メッセージが自動で返されます。

なお、このメッセージも「LINE Official Account Manager」の「ホーム」タブ→「応答メッセージ」から変更可能ですが、今回は、打ち込まれたメッセージに応じて、欲しい値を返すようにしたいので、この自動応答メッセージは「オフ」にします。

FireShot Capture 180 - LINE Official Account Manager - manager.line.biz.png

オフにした後、再度、LINEでメッセージを打ち込んでみると、今度は、自動での応答メッセージが返ってこなくなっているはずです。

これでいったん準備完了です。

3.LINE通知を行う簡単なBotプログラムをGASで作ってみる。

本題のプログラムを作る前に、準備運動として、定期的に現在の時刻をメッセージとして配信するだけのプログラムを作ってみます。

準備として、「LINE Developers」に戻って、対象のチャネルの「Message API設定」タブの最下層にある「チャネルアクセストークン」を発行させます。

FireShot Capture 183 - LINE Developers - developers.line.biz.png

「発行」ボタンをクリックすると、結構なランダム文字列のトークンが発行されます。

また、「ユーザーID」が必要になります。
「LINE Developers」の「チャネル基本設定」タブの下の方に載っています。

FireShot Capture 212 - LINE Developers - developers.line.biz.png

この「チャネルアクセストークン」と「ユーザーID」は、↓のプログラムで使います。
それぞれコピー&ペーストで置き換えて使ってください。

LineBotTest01.gs
// LINE Message API チャネルアクセストークン
var ACCESS_TOKEN = "[チャネルアクセストークン]";
//ユーザーIDを指定
var USER_ID = "[ユーザーID]";
// 通知用のLINE API
var PUSH = "https://api.line.me/v2/bot/message/push";

/** 
 * push
 * botからメッセージを送る
 */
function push() {

  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');

  // リクエストヘッダ
  var headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    "Authorization" : "Bearer " + ACCESS_TOKEN
  };
  // メッセージ
  var postData = {
    "to" : USER_ID, 
    "messages" : [
      {
        "type" : "text",
        "text" : "現在の日時は、「" + date + "」です。"
      }
    ]
  };
  // POSTオプション作成
  var options = {
    "method" : "POST",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };
  return UrlFetchApp.fetch(PUSH, options);
}

これでOK。
試しに実行してみましょう

↓実行ボタンを押すだけです。

FireShot Capture 215 - GasTest02 - script.google.com.png

↓のようにLINEでメッセージが送られてくるはずです。

IMG_3433.PNG

4.定期的に特定の値を取得して、LINE通知を行うBotプログラムをGASで作ってみる。

ここからが本題ですが、ここまで分かってしまったならば、あとはもう簡単です。
先ほどのプログラムを修正して、Googleスプレッドシートの値を取得して返すようにしてみます。

「GoogleスプレッドシートのID」というのが分からない方は、こちらを参照してください。

LineBotTest01.gs
// LINE Message API チャネルアクセストークン
var ACCESS_TOKEN = "[チャネルアクセストークン]";
// ユーザーIDを指定
var USER_ID = "[ユーザーID]";
// 通知用のLINE API
var PUSH = "https://api.line.me/v2/bot/message/push";

// Googleスプレッドシート
var File = SpreadsheetApp.openById("[GoogleスプレッドシートのID]");
var baseSheet = File.getSheetByName("取得シート"); 

/** 
 * push
 * botからメッセージを送る
 */
function push() {

  var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');

  // 現在の販売率を取得
  var rate = baseSheet.getRange(4,3).getValue();
  var bodyText = "現在(" + date + ")の販売率は、「" + rate + "%」です。";


  // リクエストヘッダ
  var headers = {
    "Content-Type" : "application/json; charset=UTF-8",
    "Authorization" : "Bearer " + ACCESS_TOKEN
  };
  // メッセージ
  var postData = {
    "to" : USER_ID, 
    "messages" : [
      {
        "type" : "text",
        "text" : bodyText
      }
    ]
  };
  // POSTオプション作成
  var options = {
    "method" : "POST",
    "headers" : headers,
    "payload" : JSON.stringify(postData)
  };
  return UrlFetchApp.fetch(PUSH, options);
}

実行ボタンを押して、実行してみます。
すると、おそらく、以下のようにアクセス許可確認のメッセージが表示されます。
これに、「許可を確認」を押していただいて、
FireShot Capture 218 - GasTest02 - script.google.com.png
その後、Gooleアカウントで外部アクセスの確認やGoogleスプレッドシートへのアクセス確認のメッセージが表示されるので、「許可」ボタンをクリックすれば大丈夫です。

その後、このようにLINEで送られてくれば、OKです。
IMG_3434.PNG

これを定期的に実行するには、「『GAS(Google Apps Script)でHelloWorldしてみた(①バッチプログラム編)』の5章」で書いたような感じで、トリガーで「push」関数を数分置きや、数時間に動作するように設定すればいいだけです。

5.まとめ

これで、LINEでメッセージを送ることが出来るようになりましたね。
定期的に動かして、ある条件(今回の場合、販売率が70%以下になったときとか)のときだけに通知するとかも容易にできることでしょう。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4