136
143

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-06

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

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

スクリーンショット 2016-10-06 16.31.58.png

まとめ

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

参考

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

136
143
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
136
143

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?