1.はじめに
前回は、「GAS(Google Apps Script)で定期的に値を記録」のプログラムを作ってみましたが、今回は取得した値をLINEで問い合わせることができるBotを作ってみます。2章で作ったスプレッドシートを利用して、その値を取得し、返します。
2.LINE Developersにログインして、Bot用のチャネルを作成
LINE Developersにログインして、Bot用のチャネルを作成する必要があります。
前に書いた記事「『GAS(Google Apps Script)× LINE Bot(Messaging API)で、何かの値を定期的にLINEに送ってみる』の2章」をご参照ください。
これで準備完了です。
3.簡単なBotプログラムをGASで作ってみる。
本題のプログラムを作る前に、準備運動として、先ほどの「こんにちは」というメッセージに対応して、別メッセージを返すBotプログラムをGASで作ってみます。
準備として、「LINE Developers」に戻って、対象のチャネルの「Message API設定」タブの最下層にある「チャネルアクセストークン」を発行させます。
![]() |
---|
「発行」ボタンをクリックすると、結構なランダム文字列のトークンが発行されます。
これは、↓のプログラムで使います。
// LINE Message API チャネルアクセストークン
var ACCESS_TOKEN = "[チャネルアクセストークン]";
// リプライ用のLINE API
var REPLY = "https://api.line.me/v2/bot/message/reply";
/**
* ユーザからのアクションに返信する
*/
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var postMsg = json.events[0].message.text;
var replyToken = json.events[0].replyToken;
var replyText = "";
if(postMsg == "こんにちは") {
replyText = "こんにちはー!!";
}
if(replyText == ""){
return;
} else {
// replyするメッセージの定義
var postData = {
"replyToken" : replyToken,
"messages" : [
{
"type" : "text",
"text" : replyText
}
]
};
// リクエストヘッダ
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
"Authorization" : "Bearer " + ACCESS_TOKEN
};
// POSTオプション作成
var options = {
"method" : "POST",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
return UrlFetchApp.fetch(REPLY, options);
}
}
「更新」ボタンをクリックすると、アクセス許可を求められます。
「許可を確認」をクリックして、Googleアカウントの再ログインが求められますので、そこからアクセス許可を行いましょう。
「LINE Official Account Manager」の「応答設定」で、「Webhook」を「オン」に変更
![]() |
---|
「Messaging API設定」ボタンをクリック
![]() |
---|
「Webhook URL」に、GASの公開時に表示されていたURLを設定する。
これでOK。
再度、LINEで、「こんにちは」と打ってみると、、
GASのプログラムで指定した通り、「こんにちはー」っと返ってくるようになりました。

4.問い合わせに答えるBotプログラムをGASで作ってみる。
ここからが本題です。
「GAS(Google Apps Script)で定期的に値を記録」で記録したGoogleスプレッドシートで、「取得シート」と「履歴」のシートを使って、
- LINEから「現在の販売率」と打ち込むと、「取得シート」のその時の販売率(4行目、C列の値)を返す
- LINEから「数日間の販売率遷移」と打ち込むと、「履歴」シートから最新のデータから、最大10件分の値の遷移を返す
// LINE Message API チャネルアクセストークン
var ACCESS_TOKEN = "[チャネルアクセストークン]";
// リプライ用のLINE API
var REPLY = "https://api.line.me/v2/bot/message/reply";
// Googleスプレッドシート
var File = SpreadsheetApp.openById("1MiMP_e0tBSmkZe7Yqx2Fsh5Y7L0C_1NEwLbDEfqcDPg");
var baseSheet = File.getSheetByName("取得シート");
var historySheet = File.getSheetByName("履歴");
/**
* doPost
* POSTリクエストのハンドリング
*/
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var postMsg = json.events[0].message.text;
var replyToken = json.events[0].replyToken;
var replyText = "";
if(postMsg == "現在の販売率") {
// 現在の販売率を取得
rate = baseSheet.getRange(4,3).getValue();
replyText = "現在の販売率は、「" + rate + "%」です。";
} else if(postMsg == "数日間の販売率遷移") {
var historys = [];
lastRow = historySheet.getLastRow();
for(var i=lastRow; i > 1; i--){
dayValue = historySheet.getRange(i,1).getValue();
rate = historySheet.getRange(i,4).getValue();
if(historys.length == 0){
// まだ1件もない場合には、無条件で追加
historys.push([dayValue, rate]);
}else{
if(historys[0][1] == rate){
// 1つ目の値と比較して、同じ販売率の場合には、日付を更新
historys[0][0] = dayValue;
}else{
// 既に10件に達して居たならばループから抜ける。
if(historys.length >= 10) break;
// 1つ目の値と異なる販売率の場合には、1要素先頭に追加
historys.unshift([dayValue, rate]);
}
}
}
replyText = "";
for(var i=0; i<historys.length && i<10; i++){
if(replyText.length != 0){replyText += "\r\n";}
tmpDate = Utilities.formatDate(historys[i][0], 'Asia/Tokyo', 'MM月dd日 HH時');
replyText += tmpDate + "~:" + historys[i][1] + "%";
}
}
if(replyText == ""){
return;
} else {
// replyするメッセージの定義
var postData = {
"replyToken" : replyToken,
"messages" : [
{
"type" : "text",
"text" : replyText
}
]
};
// リクエストヘッダ
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
"Authorization" : "Bearer " + ACCESS_TOKEN
};
// POSTオプション作成
var options = {
"method" : "POST",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
UrlFetchApp.fetch(REPLY, options);
}
}
※ここで、「外部アクセス」や「Googleスプレッドシート」に対してのアクセス許可を求められる場合がありますので、その場合は、許可を行ってください。
※このURLは、「3.簡単なBotプログラムをGASで作ってみる。」のときに「LINE Official Account Manager」の「Webhook」で指定したものと同じの場合は、再度設定する必要はありませんが、別GASプロジェクトの場合などには、URLが変わりますので、再度設定し直す必要があります。
実際にLINEからメッセージを送ってみましょう。
「現在の販売率」、「数日間の販売率遷移」と打ち込んで、↓のように表示されればOKです。※多少時間が掛かる場合があるようです。
5.リッチメニューで使いやすくしてみる。
このままだと、毎回、打ち込んで、問い合わせるのは、少々不便ですし、初めての人はどう打ち込んだらよいのかも分からないため、使い勝手が悪いです。
そこで、ボタンを押すだけで、自動で、メッセージを打ち込んでくれる機能がLINEにはあるのです。
それが、「リッチメニュー」という機能です。
「LINE Official Account Manager」にログインし、「ホーム」→「リッチメニュー」をクリックします。
![]() |
---|
作成ボタンをクリックして、以下の感じで登録します。
![]() |
---|
「表示期間」は、必須項目のため、何か値を入れないといけません。
無制限にずっと表示させるというのは出来ないみたいです。私が試してみた感じ、最大で17年後の12月31日まででした。
「コンテンツ設定」の「テンプレートを選択」をクリックし、テンプレートを選びます。
「背景画像をアップロード」をクリックすることで、そのテンプレートに合わせて画像をアップロードすることができるのですが、面倒な場合、その下の「画像を作成ボタン」から、↓のように簡単に背景となる画像を作成することが出来ます。
テンプレートや背景画像ができたら、次はアクションを特定します。
今回は、ボタンクリックした際、文字列を表示させいだけなので、「タイプ」には「テキスト」を選択し、それぞれ、「現在の販売率」、「数日間の販売率遷移」と入力します。
![]() |
---|
ここまで設定できたら、「保存」ボタンをクリックすると、リッチメニューが1つ登録されます。
ここでLINEを再度開いてみると、↓のようにリッチメニューが表示されるようになっているはずです。
それぞれ、クリックしてみると、「現在の販売率」、「数日間の販売率遷移」とメッセージが自動で打ち込まれ、GASからはそれに対応した、メッセージが返されるという形になります。
これで、とても使いやすくなりましたね!
5.まとめ
今回、LINEでの問い合わせに応じて欲しいデータを返すBotアプリをGASで作成できました。さらに、リッチメニューを付加することでとても使い易くなりました。
GAS×LINE Bot これはとても使えそうですねー。すばらしー