#1.はじめに
前回は、「GAS(Google Apps Script)で定期的に値を記録」のプログラムを作ってみましたが、今回は取得した値を定期的にLINEで配信するというBotを作ってみます。
前回の2章「2.GoogleスプレッドシートでWEBページの特定の値を表示」で作ったスプレッドシートを利用して、その値を配信します。
#2.LINE Developersにログインして、Bot用のチャネルを作成
LINE Developersにログインします。
LINEのアカウントが必要になります。
ログイン先URLは↓です。
https://developers.line.biz/ja/
ログインすると、↓の画面になったでしょうか?
※もし、この画面にならなかった場合には、↓にアクセスしてみてください。
https://developers.line.biz/console/
左下のプルダウンで、「日本語」を選択すると、文字が
日本語になります。
今回新たにLINE Botを作成するために、まずはプロバイダーを作成する必要があります。とりあえず、テストですし、なんでもいいと思います。私は自分の名前+P(JunichiHiguchi_P)で付けてます。
「作成」ボタン押すと、プロバイダー名を入力する画面になります。
適当な名前を入力して「作成」ボタンを押してください。
次にチャネルの設定です。
作成したプロバイダーを選択し、新規でチャネルを作成します。
「新規チャネル作成」をクリックしてください。
「Message API」を選択します。
「チャネル名」「チャネル説明」「大業種」「小業種」などは適当に記載してください。
「作成」ボタンをクリックすると、チャネルの作成完了です。
【補足】ハマりポイント! |
---|
「チャネル名」によっては、「この名前は予約済みのため使用できません。ほかの名称を使用してください。」というメッセージが表示されることがあります。これは、「チャネル名」に「LINE」などの特定の文言が入っている場合に起こるようです。私が把握しているのは、「LINE」という文字だけなのですが、他にもあると思います。そういった文字を避けて、「チャネル名」を付ければOKです。 |
「Massaging API設定」タブをクリックすると、QRコードが表示されますので、ご自分の携帯のLINEアプリから、QRコードを読み込んで友達追加してみてください。
携帯(AndroidでもiPhoneでも)のLINEアプリでQRコード読み込むと、
この追加してすぐの初めのメッセージは、↓「LINE Official Account Manager」から変更することができます。
※「LINE Official Account Manager」へは、「チャネル基本設定」タブを選択後の上部にあるリンクから移動できます。
↓「あいさつメッセージ設定」ボタンを押すと、
ここから変更できます。
また、「こんにちは」などとメッセージを打ち込んでみると、
↓のように、「個別のお問い合わせを受け付けておりません。」的な応答メッセージが自動で返されます。
なお、このメッセージも「LINE Official Account Manager」の「ホーム」タブ→「応答メッセージ」から変更可能ですが、今回は、打ち込まれたメッセージに応じて、欲しい値を返すようにしたいので、この自動応答メッセージは「オフ」にします。
オフにした後、再度、LINEでメッセージを打ち込んでみると、今度は、自動での応答メッセージが返ってこなくなっているはずです。
これでいったん準備完了です。
#3.LINE通知を行う簡単なBotプログラムをGASで作ってみる。
本題のプログラムを作る前に、準備運動として、定期的に現在の時刻をメッセージとして配信するだけのプログラムを作ってみます。
準備として、「LINE Developers」に戻って、対象のチャネルの「Message API設定」タブの最下層にある「チャネルアクセストークン」を発行させます。
「発行」ボタンをクリックすると、結構なランダム文字列のトークンが発行されます。
また、「ユーザーID」が必要になります。
「LINE Developers」の「チャネル基本設定」タブの下の方に載っています。
この「チャネルアクセストークン」と「ユーザーID」は、↓のプログラムで使います。
それぞれコピー&ペーストで置き換えて使ってください。
// 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。
試しに実行してみましょう
↓実行ボタンを押すだけです。
↓のようにLINEでメッセージが送られてくるはずです。
#4.定期的に特定の値を取得して、LINE通知を行うBotプログラムをGASで作ってみる。
ここからが本題ですが、ここまで分かってしまったならば、あとはもう簡単です。
先ほどのプログラムを修正して、Googleスプレッドシートの値を取得して返すようにしてみます。
「GoogleスプレッドシートのID」というのが分からない方は、**こちら**を参照してください。
// 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);
}
実行ボタンを押して、実行してみます。
すると、おそらく、以下のようにアクセス許可確認のメッセージが表示されます。
これに、「許可を確認」を押していただいて、
その後、Gooleアカウントで外部アクセスの確認やGoogleスプレッドシートへのアクセス確認のメッセージが表示されるので、「許可」ボタンをクリックすれば大丈夫です。
これを定期的に実行するには、「『GAS(Google Apps Script)でHelloWorldしてみた(①バッチプログラム編)』の5章」で書いたような感じで、トリガーで「push」関数を数分置きや、数時間に動作するように設定すればいいだけです。
#5.まとめ
これで、LINEでメッセージを送ることが出来るようになりましたね。
定期的に動かして、ある条件(今回の場合、販売率が70%以下になったときとか)のときだけに通知するとかも容易にできることでしょう。