前置き
先日次女が産まれました。
長女が産まれたときは割と余裕があったので子供が産まれたから「おうちハック」してみたをしてたんですが、今回は長女の育児をしながら、模様替えやらで時間がなくガッツリ時間を取れない状況です。
とはいえ、ミルクやおむつ替え記録と夫婦間の共有を行う必要があります。
前回作ってたiPad上のアプリはAppleDeveloperライセンスを更新していないのと、非エンジニアの嫁としてはSlackが定着しなかったという点から復活させるより別の方法を考えたほうがよさそうです。
リアルでも知り合いの@LunaChevalierさんの記事でLINEBOTで自分好みの秘書BOTを作ってみると楽しそうなことをしてそうなのでLINE BOTを試してみます。
やること
- LINE Developerライセンスの登録
- LINE MessagingAPIの用意
- 記録用のスプレッドシートの作成
- 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がボタンをポチらないと発行されない点です。他にチャンネルトークンなどもあり紛らわしいですがそれではなかったです。
3.記録用のスプレッドシートの作成
Google Drive上で任意の場所にスプレッドを作成します。
シートは赤ちゃんの「う ん ち」 や 「お し っ こ」を記録するための「排泄」シートと、
ミルクを飲んだことを記録する「ミルク」シートを用意します。
スプレッドシートの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);
}
メモ
- ミルクの場合は送信されたテキストメッセージから数字のみを抜き出して記録します。
- ステッカーでウンチだけ対応させてます。
- 他のステッカーはコチラ
残りの作業
できあがったらGASをウェブサービスとして公開して発行されたリクエスト用のURLをコピーしてLINE Developers側のWebHooks先のURLとして指定させれば完了です。