自分だけで完結するような定期処理は、適当なアラームアプリあたりに設定すれば良いが、 他人にお願いしていることは、わざわざアラーム設定しておいてと頼むのも角が立つので、こちらからリマインドしたい。

でも面倒なので、LINE BOTに頼むことにした。

構成

LINE BOTでPUSH通知するMakefileでcronを登録するを組み合わせるだけ。

詳細はそれぞれの記事を読んでもらうとして、ソースを記載する。

スクリプト

#!/bin/sh
curl -X POST \
-H 'Content-Type:application/json' \
-H 'Authorization: Bearer {CHANNEL_ACCESS_TOKEN}' \
-d '{
    "to": "GROUPID",
    "messages":[
        {
            "type": "text",
            "text": "エサあげた?"
        }
    ]
}' https://api.line.me/v2/bot/message/push

ここで、CHANNEL_ACCESS_TOKENはLINE depelopersで取得するトークン。 GROUPIDは、LINEのグループを識別するためのID。 これの取得方法は前の記事には書いてなかったので説明する。

GROUP IDの取得

以下のスクリプトをGoogle Apps Scriptでウェブアプリケーションとして導入し、 LINE BOTのWebhook URLに紐付ける。

その状態で、LINEグループにBOT招待すれば、example@gmailにGROUP IDが通知される。

function doPost(e) {
  Logger.log('doPost')
  var events = JSON.parse(e.postData.contents).events;
  events.forEach (function(event) {
    if (event.type == "join") { mailGroupId(event); }
  });
}

function mailGroupId(e) {
  MailApp.sendEmail('example@gmail.com', 'groupId', e.source.groupId);
}

cron登録

以下のようなMakefileを作って、make installすればよい。 ここでは、毎日9時と18時に通知する。

install:
	crontab -l | grep line_feeding.sh || \
		(crontab -l; echo  "0 9,18 * * * /usr/local/bin/line_feeding.sh") | crontab

ユースケース

今回の例は、犬を預かってもらう人にエサをちゃんとあげてくれるようにリマインドするケース。 自分で聞くのは忘れそうだし、BOTに機械的に聞いてもらうことで角が立ちにくい(気がする)。

あとは、今回の例では個人に通知するのではなく、グループに通知する形にしている。 これにより、相手が実行してくれたかどうか聞けるという利点もある(相手がBOTに返信してくれる人なら)。