はじめに
Google Home、IFTTT、Googleスプレッドシートを使って独自音声コマンドでログをとる(ついでにNode.jsやngrokやらも使ってLINEやGoogle Homeに通知する)
を読んでいて、痛み止めのような頓服的な薬(一日n回まで、前回からn時間以上経過後服用可能)のチェックに使えないものかと作成してみた。
Googleスプレッドシートへのrowの追加のIFTTTのレシピ
「this」も「that」もいつもの手順
Googleスプレッドシートの内容#


checkDate.js
function checkDate() {
// 宣言
var lineUrl = "https://maker.ifttt.com/trigger/drug_log/with/key/xxxxxxxx?value1=";
var googleurl = "https://xxxxxxxx.ngrok.io/google-home-notifier";
var ansText;
searchDate(dateRows);//当日と同一日セルの取得
switch (dateRows.length) {
case(1):
ansText = "服用可能です(本日一回目)"
break
case(2):
var dates2 = sheet.getRange(1, 2, lastrow).getValues()
var m1 = Moment.moment(dates2[dates2.length - 2][0])
var m2 = Moment.moment(dates2[dates2.length - 1][0])
var m3 = m2.diff(m1, 'h', false)
var m4 = 4 - m3
if (m3 < 4) {
// 一定時間以上経過していない場合はrowを削除
sheet.deleteRow(lastrow)
ansText ="四時間以上間を開けて服用しましょう。あと" + m4 + "時間経過後服用できます"
} else {
ansText ="服用可能です(本日二回目)"
}
break
case(3):
ansText = "服用は一日二回までです。"
break
default:
sheet.deleteRow(lastrow)
ansText = "服用は一日二回までです。"
break
}
// LINE
UrlFetchApp.fetch(lineUrl + ansText);
\
// GoogleHome
var payload =
{
"text" : ansText
};
var options =
{
"method" : "post",
"payload" : payload
};
var response = UrlFetchApp.fetch(googleurl, options);
}
- 当日の行番号配列が一つだけなら一回目メッセージ
- 2つなら一回目と二回目の時間差を求め(時以下切り捨て)
- 4時間未満なら警告メッセージ、最終行を削除
- 4時間以上なら二回目メッセージ
- 3回目ならエラーメッセージ
- 4回目以上ならエラーメッセージ、最終行を削除
の判定と行操作を行った後に、LINE Notififyとgoogle-home-notifierへ送信します
searchDate.js
function searchDate(dateRows) {
var tDate = formatDate(new Date(), "yyyy/M/d");
lastrow = sheet.getLastRow();
var dates = sheet.getRange(1, 1, lastrow).getDisplayValues();
for(var lr = lastrow; lr >= 1; lr--){
if(dates[lr - 1] == tDate){
dateRows.push(lr);
}
}
return dateRows;
}
今日の日付を取得し、日付行と一致した行番号を配列に追加します
セルに表示している内容を取得するためにgetValues()ではなくgetDisplayValues()
今回ハマったところ
- MakerChannelに渡すのはLINE NotififyのキーではなくWebhooksのキー
- google-home-notifierのexample.jsを使用するのであれば、話させたい文字は、"payload" : { "text" : "ほげほげ" }と入れ子になる Class UrlFetchApp
今後に向けて
- ソースをリファクタリングしたい
- GoogleHomeに話しかけたら、GoogleHomeに返事、GoogleAssistantに入力したらLINEに返事に分けたい
おわりに
最近IFTTTでGoogleスプレッドシートの行の追加ではなく、セルの値を上書き更新する機能が追加されましたね、セルの値で検索を行い、結果を返してセルの値を消すなんてこともできますね