LINE Notifyで実現するLINEのなんちゃってslack化
エンジニア同士でコミュニケーションを取る際、最近はslackやChatWorkを使うとBOTがいろいろやってくれて恐ろしく便利です。
この便利さを非エンジニア界隈の人たちとのコミュニケーションで享受したい!
と思っても、slackなんかみんな使ってくれません。
なんで英語?LINEでいいじゃん
デスヨネー。でも違うんだ、そうじゃないんだ。
飲み会の出欠明日だけどお前返信返してないじゃん
今日のカラオケ忘れてた?今家ってどういうことやねん
こういう悲しみを僕たちはslackで乗り越えて来たのに!
そう、BOTのお陰でな!
ならば、LINEグループにBOTを追加していつも通りスクリプトで便利通知流そうよ!
というのが今回のお話です。
事前準備
今回、通知を流すためのBOTには LINE Notify を使用します。
LINE Notify
このLINE Notifyを使用すれば、GitHubやMackerelからの通知をLINEで受けることが出来ます!
LINEでサーバーの死活監視情報なんて受けたくないですね。絶対やりません
とりあえずトークンさえ入手してしまえばメッセージはHTTP/POSTで叩きつけるだけです。
非常に簡単です。
トークンの取得に関してはこの方の記事を参考にしました。
わかりやすい
LINE Notify を AWS Lambda (Node.js) から利用してみた
ルームに垂れ流すので流したいルームを選択して下さい
表示されるトークンを利用するので必ず控えて下さい
実装
トークンが取得出来たらBOTの実装に移ります。
今回は当日忘れてたブッチを回避するために翌日の予定を呟くBOTを作成しようと思います。
動きとしては、 Googleカレンダーに入っている明日の予定を指定した時間に呟くものとします
事前にBOT用にGoogleのアカウントでも取っておくなりしておくと色々遊べそうです。
Googleカレンダーの予定をつぶやかせるので実装にはGASを使います。
カレンダーからタイトルだけ取得して通知しています
var AuthorizationCode ='Bearer <取得したトークン>';
function main(){
var msg = getCalendarEvent();
Logger.log(msg);
if(msg !== '[info]'){
sendHttpPost(msg);
}
}
// 翌日の日付を{year:'yyyy', month:'mm', date:'dd'}の形式で返す
function nextDate(year, month, date) {
var d = new Date(year, month - 1, date);
d.setDate(d.getDate() + 1);
return {
year: d.getFullYear(),
month: d.getMonth() + 1,
date: d.getDate()
};
}
// Calendarから予定翌日の予定のTitleを取得し、メッセージとして返却する
function getCalendarEvent(){
var message;
// 翌日の日付を取得
var today = new Date();
var yyyy = today.getFullYear();
var mm = today.getMonth()+1;
var dd = today.getDate();
var td = nextDate(yyyy, mm, dd);
var targetDate = td.year + '/' + td.month + '/' + td.date;
// googleCalendarからeventTitleを取得
var myCals=CalendarApp.getCalendarById('hogehoge@gmail.com');
var myEvents=myCals.getEventsForDay(new Date(targetDate));
var strBody = '[info]'
// eventがあればメッセージに格納
if(myEvents){
for(var i=0;i<myEvents.length;i++){
var strTitle = myEvents[i].getTitle();
strBody = strBody + '\n' + strTitle + '\n';
}
message = strBody;
}
return message;
}
// LINE NotifyにHTTP POSTでメッセージを送信する
function sendHttpPost(postMassage) {
var payload ={
"message": postMassage
};
var options ={
"method" : "post",
"headers": {
Authorization: AuthorizationCode,
},
"payload" : payload
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
このmain関数に時間主導型のトリガーを設定することで時限BOTが動き始めます。
API仕様はなんと日本語で公開されています。
HTTP/POSTで https://notifyapi.line.me/api/notify 宛に叩きつけるだけです。
注意点としては、リクエストヘッダにAuthorizationで取得したトークンを指定する必要がある程度です。
実際に動かすとこんな感じで送りつけられてくる
まとめ
IFTTTと連携させたりAWS Lambdaや今回のGASでスクリプトを回すことでLINEに情報を流すことができるのは、非エンジニア界隈とのやり取りでは非常に便利だと思います。
参考
https://notify-bot.line.me
http://qiita.com/hkusu/items/75aca4e92eaf02c00db5