GAS

【「今日晩御飯どうする?」を解決!】LINE Messaging APIとGASを使って晩御飯候補を決めてもらった

thumbnail
n-mukineer

我が家は妻に料理を作ってもらうことが多いのですが、「今日晩御飯何がいい?」とよく聞かれます。

妻

今日晩御飯何がいい?

えぬ
えぬ

うーん…(1分ぐらい考えてから)唐揚げかなぁ

妻

唐揚げしか言わないよね?もう家にあるやつでなんか作るね!!!

えぬの心の声
えぬの心の声

あぁまたやってしまった…事前に準備しておければ…

といった感じで、なかなか正解を導き出すことが難しいこの質問。

適当に答えている感じを出さず、ちょっと考えてから「簡単にできる、ありふれた食材を使った料理」を答えるのが超難しいです。

そんなときのために、あらかじめ答えとなる候補をリスト化しておき、その中から選ぶことができると超便利&HAPPYじゃないですか?

というわけで、今回はこんなシステムを作りたいと思います!

作りたいもの

LINEに「晩御飯」と入力すると、事前にリスト化した「いい感じの晩御飯リスト」からランダムに選択し、返信してくれるアプリ

名付けて「いい感じの晩御飯チョイサー」を作ってみたいと思います!

いい感じの晩御飯チョイサー動作確認
いい感じの晩御飯チョイサー

「いい感じの晩御飯チョイサー」システムの構成

システム構成を考えてみました。今回はシンプルに

『晩御飯』というキーワードを含むメッセージをLINEに送信したら、事前にスプレッドシートにリスト化した晩御飯候補の中から、ランダムに選んで応答する

というシステムにします(リストに追加したり、Google検索した結果を返したりするなどの機能追加も今後やっていきます)。

「いい感じの晩御飯チョイサー」システム構成

GASプロジェクトの作成

まずは、GASプロジェクトを作成します。

Google SpreadSheetを作成する

Google DriveのマイドライブにSpreadSheetを新規作成します。

GASを作成する

STEP1で作成したSpreadSheetの「拡張機能」⇒「Apps Script」からGASプロジェクトを作成します。

こうすることで、SpreadSheetに紐づいた形でGASプロジェクトを作成することができます。

GASプロジェクトの設定を行い、デプロイする

GASをWebアプリとして公開し、URLを取得します。

まずは、GCPプロジェクトへの紐づけを行います。GCPプロジェクトへの紐づけ方法については以下の記事に記載しておりますので参照してください。

あわせて読みたい
【無料】GASを使い始めるための3ステップ【簡単】
【無料】GASを使い始めるための3ステップ【簡単】

GCPプロジェクトへの紐づけ設定が完了したら、コードに最低限の記述をしてデプロイします。

デプロイしたら、ウェブアプリのURLをコピーしておきます(後述のLINEのWebhook設定で使用します)

LINE Messaging APIの準備

次に、「LINE Messaging API」を使えるようにしていきます。

LINE Bussiness IDにログイン
プロバイダーを作成する

Create」をクリックします

Provider name」に名前を入力後、「Create」をクリックします

Messaging APIを作成する

Create a Messaging API channel」を選択します

Messaging APIの設定をしていく

必要な情報を入力していきます。下記の画像を参考にしてください。

Webhookの設定を行う

Messaging API」タブを選択します。

Webhook URLの「Edit」を選択し、コピーしておいたGASのウェブアプリのURLを入力後、「Update」をクリック

「Verify」を押し、「Success」とポップアップが表示されたらOKです

「Use webhook」の設定をONにしておきます

チャネルアクセストークンの発行

GAS側からLINE Messaging APIに応答する際に、アクセストークンが必要になります。

「Issue」ボタンを押し、アクセストークンを発行します。

発行したアクセストークンの右側に表示されている「コピーボタン」を押してコピーしておきます

自動応答メッセージをOFFにする

自動応答メッセージはデフォルトでONになっているので、OFFにしておきます。

GASスクリプトの作成

動作テスト用のスクリプト作成

スクリプトプロパティにLINE Messaging APIのアクセストークンを登録する

LINE Messaging APIのアクセストークンをGASのスクリプトプロパティに登録しておきます。

スクリプトプロパティへの登録方法については以下の記事も参考にしてください。

あわせて読みたい
GASからLINE Notifyを使ってLINE通知する方法
GASからLINE Notifyを使って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 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で友達として追加します。

何かメッセージを送ってみましょう!

何を送っても「親子丼」と返ってくるアプリができました!

何を送っても「親子丼」と返すLINEアプリ
何を送っても「親子丼」と返す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の友達登録ができます!興味がありましたら登録して使ってみてくださいね。(あくまで筆者本人向けの晩御飯リストになっています)

※予告なしに仕様変更したり、使えなくなる場合がありますので、ご了承ください。

いい感じの晩御飯チョイサー使用イメージ
いい感じの晩御飯チョイサー使用イメージ
いい感じの晩御飯チョイサーの友達登録QRコード
いい感じの晩御飯チョイサーの友達登録QRコード
このブログを書いている人
えぬ
えぬ
N日後にムキムキになるエンジニア
WebアプリエンジニアとしてIoTシステムを開発中。30代折り返し。 趣味(モノづくり、プログラミング、筋トレ)や子育てのことを主に記事にします。 TOEIC: 900点/第一級陸上無線技術士/第3種電気主任技術者/技術士一次試験合格/基本情報技術者/第2種電気工事士/デジタル技術検定2級(情報・制御)
記事URLをコピーしました