LINEのグループにBOTが予定を呟くと意外と便利だった話


## LINE Notifyで実現するLINEのなんちゃってslack化

エンジニア同士でコミュニケーションを取る際、最近はslackやChatWorkを使うとBOTがいろいろやってくれて恐ろしく便利です。
この便利さを非エンジニア界隈の人たちとのコミュニケーションで享受したい！
と思っても、slackなんかみんな使ってくれません。

### なんで英語？LINEでいいじゃん

デスヨネー。でも違うんだ、そうじゃないんだ。

__飲み会の出欠明日だけどお前返信返してないじゃん__

__今日のカラオケ忘れてた？今家ってどういうことやねん__

こういう悲しみを僕たちはslackで乗り越えて来たのに！
そう、BOTのお陰でな！

### ならば、LINEグループにBOTを追加していつも通りスクリプトで便利通知流そうよ！
というのが今回のお話です。

## 事前準備
今回、通知を流すためのBOTには ***LINE Notify*** を使用します。
**[LINE Notify](https://notify-bot.line.me/ja/)**

このLINE Notifyを使用すれば、GitHubやMackerelからの通知をLINEで受けることが出来ます！

### LINEでサーバーの死活監視情報なんて受けたくないですね。絶対やりません

とりあえずトークンさえ入手してしまえばメッセージはHTTP/POSTで叩きつけるだけです。
非常に簡単です。

トークンの取得に関してはこの方の記事を参考にしました。
わかりやすい
[LINE Notify を AWS Lambda (Node.js) から利用してみた](http://qiita.com/hkusu/items/75aca4e92eaf02c00db5)


### ルームに垂れ流すので流したいルームを選択して下さい
### 表示されるトークンを利用するので必ず控えて下さい

## 実装
トークンが取得出来たらBOTの実装に移ります。
今回は当日忘れてたブッチを回避するために翌日の予定を呟くBOTを作成しようと思います。
動きとしては、 **Googleカレンダーに入っている明日の予定を指定した時間に呟くものとします**
事前にBOT用にGoogleのアカウントでも取っておくなりしておくと色々遊べそうです。
Googleカレンダーの予定をつぶやかせるので実装にはGASを使います。
**カレンダーからタイトルだけ取得して通知しています**


```javascript:サンプルコード
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://notify­api.line.me/api/notify　宛に叩きつけるだけです。
注意点としては、リクエストヘッダにAuthorizationで取得したトークンを指定する必要がある程度です。

実際に動かすとこんな感じで送りつけられてくる

![スクリーンショット 2016-10-06 16.31.58.png](https://qiita-image-store.s3.amazonaws.com/0/52141/92e653c2-91bf-5e18-b17c-dd801634fbea.png "スクリーンショット 2016-10-06 16.31.58.png")


## まとめ
IFTTTと連携させたりAWS Lambdaや今回のGASでスクリプトを回すことでLINEに情報を流すことができるのは、非エンジニア界隈とのやり取りでは非常に便利だと思います。


## 参考
https://notify-bot.line.me
http://qiita.com/hkusu/items/75aca4e92eaf02c00db5