LoginSignup
3
3

More than 3 years have passed since last update.

子供が産まれたから家庭に「LINE BOT」追加してみた

Posted at

前置き

先日次女が産まれました。
長女が産まれたときは割と余裕があったので子供が産まれたから「おうちハック」してみたをしてたんですが、今回は長女の育児をしながら、模様替えやらで時間がなくガッツリ時間を取れない状況です。
とはいえ、ミルクやおむつ替え記録と夫婦間の共有を行う必要があります。

前回作ってたiPad上のアプリはAppleDeveloperライセンスを更新していないのと、非エンジニアの嫁としてはSlackが定着しなかったという点から復活させるより別の方法を考えたほうがよさそうです。

リアルでも知り合いの@LunaChevalierさんの記事でLINEBOTで自分好みの秘書BOTを作ってみると楽しそうなことをしてそうなのでLINE BOTを試してみます。

やること

  1. LINE Developerライセンスの登録
  2. LINE MessagingAPIの用意
  3. 記録用のスプレッドシートの作成
  4. GASでPOSTを受け付けるAPIの用意

1.LINE Developersライセンスの登録

すでにLINEを利用しているのであれば以下のURLからログインして登録するのみです。
https://developers.line.biz/ja/

2.LINE MessagingAPIの用意

どのLINE BOTの記事からもリンクが貼られている1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefestを参考にしました。

ちょっと詰まったのはTOKENがボタンをポチらないと発行されない点です。他にチャンネルトークンなどもあり紛らわしいですがそれではなかったです。

スクリーンショット 2020-10-07 22.36.16.png

3.記録用のスプレッドシートの作成

Google Drive上で任意の場所にスプレッドを作成します。
シートは赤ちゃんの「う ん ち」 や 「お し っ こ」を記録するための「排泄」シートと、
ミルクを飲んだことを記録する「ミルク」シートを用意します。

スクリーンショット 2020-10-07 22.56.32.png

スプレッドシートのURLからスプレッドシートのIDをメモしておきます。

4.GASでPOSTを受け付けるAPIの用意

Google Drive上の任意の場所にGASファイルを新規作成します。
そのGASファイルに記載したソースは以下そのまま記載します。

// LINE developersのメッセージ送受信設定に記載のアクセストークン
var ACCESS_TOKEN = '<チャンネルアクセストークンを貼ります>';

function doPost(e) {
  // 送信された内容
  var events = JSON.parse(e.postData.contents).events[0];
  // WebHookで受信した応答用Token
  var replyToken = events.replyToken;
  // ユーザーのメッセージを取得
  var userMessage = events.message;

  // 返却用のメッセージ
  var replyMessage = "";

  // 記録用の情報
  var reqDate = new Date();
  var saveType = "";
  var saveMessage = "";

  if(userMessage.text){
    // メッセージテキストを送信
    if (userMessage.text.match(/ウンチ|うんち/)) {
      replyMessage = "うんちが出たんですね!\n記録しました!!";
      saveType = "排泄";
      saveMessage = "うんち";
    }
    if (userMessage.text.match(/オシッコ|おしっこ/)) {
      replyMessage = "おしっこが出たんですね!\n記録しました!!";
      saveType = "排泄";
      saveMessage = "おしっこ";
    }
    if(userMessage.text.match(/ミルク|みるく/)){
      const milk = userMessage.text.replace(/[^0-9]/g, '');
      replyMessage = "ミルクを"+milk+"ml飲んだんですね!\n記録しました!!";
      saveType = "ミルク";
      saveMessage = milk;
    }
  } else if(userMessage.type === 'sticker'){
    // ステッカーの送信
    // https://static.worksmobile.net/static/wm/media/message-bot-api/line_works_sticker_list_new.pdf
    if(userMessage.stickerId === "284"){
      replyMessage = "うんちが出たんですね!\n記録しました!!";
      saveType = "排泄";
      saveMessage = "うんち";
    }    
  }
  //スプレッドに記録
  log(reqDate,saveType,saveMessage);
  if(!replyMessage){
    // その他
    replyMessage = "わからないンゴ";
  }

  // 応答メッセージ用のAPI URL
  var url = 'https://api.line.me/v2/bot/message/reply';

  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{
        'type': 'text',
        'text': replyMessage,
      }],
    }),
    });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

function log(reqDate,saveType,saveMessage){
  var target = "<スプレッドシートのIDを貼ります>";
  var spreadsheet = SpreadsheetApp.openById(target);
  var sheet = spreadsheet.getSheetByName(saveType);
  var lastRow = sheet.getLastRow();
  sheet.getRange(lastRow + 1, 1).setValue(reqDate);
  sheet.getRange(lastRow + 1, 2).setValue(saveMessage);
}

メモ

  • ミルクの場合は送信されたテキストメッセージから数字のみを抜き出して記録します。
  • ステッカーでウンチだけ対応させてます。

スクリーンショット 2020-10-07 23.04.39.png

残りの作業

できあがったらGASをウェブサービスとして公開して発行されたリクエスト用のURLをコピーしてLINE Developers側のWebHooks先のURLとして指定させれば完了です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3