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

#1．はじめに
前回は、「[GAS（Google Apps Script）で定期的に値を記録](https://qiita.com/jun_higuche/items/76ecaca473addedc65a8)」のプログラムを作ってみましたが、今回は取得した値を定期的にLINEで配信するというBotを作ってみます。

前回の２章「[2．GoogleスプレッドシートでWEBページの特定の値を表示](https://qiita.com/jun_higuche/items/76ecaca473addedc65a8#2google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%A7web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E7%89%B9%E5%AE%9A%E3%81%AE%E5%80%A4%E3%82%92%E8%A1%A8%E7%A4%BA)」で作ったスプレッドシートを利用して、その値を配信します。

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

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

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

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

|![FireShot Capture 143 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/fc80958d-0c33-0f40-f712-abdd9a578d72.png)|
|:-:|

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

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

|![FireShot Capture 146 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/06b67d70-b264-39ab-ba81-074f9f9b3330.png)|
|:-:|

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

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

|![FireShot Capture 151 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/1b7579d8-11bc-29ec-a417-d885edeb9fa5.png)|
|:-:|

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

|![FireShot Capture 154 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/e5735eda-a6aa-459d-d83b-8ceb2cf21735.png)|
|:-:|

「Message API」を選択します。

|![FireShot Capture 157 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/3e7f1a1c-9075-d7d1-5d47-516a167bffde.png)|
|:-:|

「チャネル名」「チャネル説明」「大業種」「小業種」などは適当に記載してください。
「作成」ボタンをクリックすると、チャネルの作成完了です。
    
|【補足】ハマりポイント！|
|:----|
|![FireShot Capture 171 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/3c4413e9-2c21-9bc2-133e-b1d6d32545fb.png)|
|「チャネル名」によっては、「この名前は予約済みのため使用できません。ほかの名称を使用してください。」というメッセージが表示されることがあります。これは、「チャネル名」に「LINE」などの特定の文言が入っている場合に起こるようです。私が把握しているのは、「LINE」という文字だけなのですが、他にもあると思います。そういった文字を避けて、「チャネル名」を付ければOKです。|


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

|![FireShot Capture 166 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/8b5ceb07-46a2-2e59-8eb3-b797dfb7afbc.png)|
|:-:|

携帯（AndroidでもiPhoneでも）のLINEアプリでQRコード読み込むと、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/7b94fffa-da39-fd07-e92f-0bc37a16dcc6.png" width=50%>

「追加」ボタンを押すと、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/216ddfe3-a2e0-ea38-18f5-7602f76e0abd.png" width=50%>

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

|![FireShot Capture 174 - LINE Official Account Manager - manager.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/2398c46e-2c7d-09f1-005d-c253b2752b34.png)|
|:-:|


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

|![FireShot Capture 177 - LINE Official Account Manager - manager.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/e11a83ce-52af-319c-8c6c-27f90dce51a9.png)|
|:-:|

ここから変更できます。

また、「こんにちは」などとメッセージを打ち込んでみると、
↓のように、「個別のお問い合わせを受け付けておりません。」的な応答メッセージが自動で返されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/0ec1a735-0338-cb94-4620-e315c482df79.png" width=50%>


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

|![FireShot Capture 180 - LINE Official Account Manager - manager.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/8ec23ae9-548b-3f94-6dcc-9e806a87a879.png)|
|:-:|

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/b925c521-4327-2baf-c697-24b0677c4787.png" width=50%>

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

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

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

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

|![FireShot Capture 183 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/7b4d959a-847c-7716-8e78-34ee02af6ae2.png)|
|:-:|

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

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

|![FireShot Capture 212 - LINE Developers - developers.line.biz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/91e20f60-91d6-2bc6-5ba1-bfa24250ef9e.png)|
|:-:|

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

```Javascript: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/91333960-5100-2b36-5551-3e3bda241e14.png)|
|:-:|

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

![IMG_3433.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/142f4cb8-e46c-3821-8cfe-c8ae729fe424.png)

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

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

「GoogleスプレッドシートのID」というのが分からない方は、**[こちら](https://qiita.com/jun_higuche/items/76ecaca473addedc65a8#3gas%E3%81%A7google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A7%E5%88%A5%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%99%E3%82%8B)**を参照してください。

```Javascript: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/6d0dacf8-61b6-02b4-a395-0f81508c0733.png)
その後、Gooleアカウントで外部アクセスの確認やGoogleスプレッドシートへのアクセス確認のメッセージが表示されるので、「許可」ボタンをクリックすれば大丈夫です。

その後、このようにLINEで送られてくれば、OKです。
![IMG_3434.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/98f72df9-7adb-7227-65fc-614c542f278c.png)

これを定期的に実行するには、「[『GAS（Google Apps Script）でHelloWorldしてみた（①バッチプログラム編）』の5章](https://qiita.com/jun_higuche/items/540d1a0b32293607d860#5%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%8B%95%E3%81%8B%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE%E8%A8%AD%E5%AE%9A)」で書いたような感じで、トリガーで「push」関数を数分置きや、数時間に動作するように設定すればいいだけです。

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