【「今日晩御飯どうする?」を解決!】LINE Messaging APIとGASを使って晩御飯候補を決めてもらった
我が家は妻に料理を作ってもらうことが多いのですが、「今日晩御飯何がいい?」とよく聞かれます。
今日晩御飯何がいい?
うーん…(1分ぐらい考えてから)唐揚げかなぁ
唐揚げしか言わないよね?もう家にあるやつでなんか作るね!!!
あぁまたやってしまった…事前に準備しておければ…
といった感じで、なかなか正解を導き出すことが難しいこの質問。
適当に答えている感じを出さず、ちょっと考えてから「簡単にできる、ありふれた食材を使った料理」を答えるのが超難しいです。
そんなときのために、あらかじめ答えとなる候補をリスト化しておき、その中から選ぶことができると超便利&HAPPYじゃないですか?
というわけで、今回はこんなシステムを作りたいと思います!
LINEに「晩御飯」と入力すると、事前にリスト化した「いい感じの晩御飯リスト」からランダムに選択し、返信してくれるアプリ
名付けて「いい感じの晩御飯チョイサー」を作ってみたいと思います!
「いい感じの晩御飯チョイサー」システムの構成
システム構成を考えてみました。今回はシンプルに
「『晩御飯』というキーワードを含むメッセージをLINEに送信したら、事前にスプレッドシートにリスト化した晩御飯候補の中から、ランダムに選んで応答する」
というシステムにします(リストに追加したり、Google検索した結果を返したりするなどの機能追加も今後やっていきます)。
GASプロジェクトの作成
まずは、GASプロジェクトを作成します。
Google DriveのマイドライブにSpreadSheetを新規作成します。
STEP1で作成したSpreadSheetの「拡張機能」⇒「Apps Script」からGASプロジェクトを作成します。
こうすることで、SpreadSheetに紐づいた形でGASプロジェクトを作成することができます。
GASをWebアプリとして公開し、URLを取得します。
まずは、GCPプロジェクトへの紐づけを行います。GCPプロジェクトへの紐づけ方法については以下の記事に記載しておりますので参照してください。
GCPプロジェクトへの紐づけ設定が完了したら、コードに最低限の記述をしてデプロイします。
デプロイしたら、ウェブアプリのURLをコピーしておきます(後述のLINEのWebhook設定で使用します)
LINE Messaging APIの準備
次に、「LINE Messaging API」を使えるようにしていきます。
「Create」をクリックします
「Provider name」に名前を入力後、「Create」をクリックします
「Create a Messaging API channel」を選択します
必要な情報を入力していきます。下記の画像を参考にしてください。
「Messaging API」タブを選択します。
Webhook URLの「Edit」を選択し、コピーしておいたGASのウェブアプリのURLを入力後、「Update」をクリック
「Verify」を押し、「Success」とポップアップが表示されたらOKです
「Use webhook」の設定をONにしておきます
GAS側からLINE Messaging APIに応答する際に、アクセストークンが必要になります。
「Issue」ボタンを押し、アクセストークンを発行します。
発行したアクセストークンの右側に表示されている「コピーボタン」を押してコピーしておきます
自動応答メッセージはデフォルトでONになっているので、OFFにしておきます。
GASスクリプトの作成
動作テスト用のスクリプト作成
LINE Messaging APIのアクセストークンをGASのスクリプトプロパティに登録しておきます。
スクリプトプロパティへの登録方法については以下の記事も参考にしてください。
何を送っても「親子丼」と返すスクリプトを書いてみます。
const LINE_API_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_API_ACCESS_TOKEN');
const LINE_REPLY_URL = 'https://api.line.me/v2/bot/message/reply';
function doPost(e) {
const eventData = JSON.parse(e.postData.contents).events[0];
const replyToken = eventData.replyToken;
const userMessage = eventData.message.text;
const replyMessage = "親子丼";
const payload = {
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': replyMessage
}]
};
const options = {
'payload' : JSON.stringify(payload),
'myamethod' : 'POST',
'headers' : {"Authorization" : "Bearer " + LINE_API_ACCESS_TOKEN},
'contentType' : 'application/json'
};
UrlFetchApp.fetch(LINE_REPLY_URL, options);
}
上記スクリプトをデプロイした後、LINE Messaging APIをLINEで友達として追加します。
何かメッセージを送ってみましょう!
何を送っても「親子丼」と返ってくるアプリができました!
晩御飯リストの作成
作成しておいたスプレッドシート「晩御飯リスト」に、候補となる晩御飯メニューを入れておきます。
また、シート名をわかりやすく「晩御飯」にしておきます。
「晩御飯」というキーワードを拾ったらランダムで応答するスクリプトの作成
こちらが作成したGASスクリプトです。
「晩御飯」とLINEに送ると事前に登録した「晩御飯リスト」からランダムに選んで返信するようになっています。
const LINE_API_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('LINE_API_ACCESS_TOKEN');
const LINE_REPLY_URL = 'https://api.line.me/v2/bot/message/reply';
function doPost(e) {
const eventData = JSON.parse(e.postData.contents).events[0];
const replyToken = eventData.replyToken;
const userMessage = eventData.message.text;
const messageType = eventData.message.type;
let replyMessage = "";
console.log(messageType);
console.log(userMessage);
if (messageType == 'text' && userMessage.match('晩御飯') != null) {
replyMessage = dinnerCandidate();
} else {
replyMessage = "ごめんなさい~そのタイプのメッセージには対応できないんです!「晩御飯」と打って送信してみてください!";
}
const payload = {
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': replyMessage
}]
};
const options = {
'payload' : JSON.stringify(payload),
'myamethod' : 'POST',
'headers' : {"Authorization" : "Bearer " + LINE_API_ACCESS_TOKEN},
'contentType' : 'application/json'
};
UrlFetchApp.fetch(LINE_REPLY_URL, options);
}
function dinnerCandidate() {
const activeSheet = SpreadsheetApp.getActiveSheet();
const values = activeSheet.getDataRange().getValues();
const candidates = [];
for(let i = 0; i < values.length; i++ ) {
candidates.push(values[i][0]);
}
let rand = Math.random();
rand = Math.floor(rand * candidates.length)
return candidates[rand];
}
動作確認
さあ、動作確認してみましょう!
まとめ
LINE Messaging APIとGASを使用して簡単に晩御飯アドバイスアプリを作ることができました!
スプレッドシートにどんどんメニューを追加していけば、バリエーションをどんどん増やしていくことができますね。
お読みいただきありがとうございました!
今回作成した「いい感じの晩御飯チョイサー」は下記QRコードからLINEの友達登録ができます!興味がありましたら登録して使ってみてくださいね。(あくまで筆者本人向けの晩御飯リストになっています)
※予告なしに仕様変更したり、使えなくなる場合がありますので、ご了承ください。