15
16

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.

SlackBotで電車の運行情報を通知してもらう

Last updated at Posted at 2018-03-26

毎朝電車の遅延を調べるのが辛いので、個人用Slackに通知してもらうことにしました。

#概要
SlackBotを作成し、決まった時刻に電車の運行情報を通知する。

#使用技術
サーバーを立てているわけではないし、VPSを契約している訳でもないため、GoogleAppScriptを使用。

SlackにBot用ユーザーを作成し、GASのスクリプトを動作させています。

#手順
##1.SlackAppを作成してAPIを取得する

Slack APIから、StartBuildingをクリック。

スクリーンショット 2018-03-26 23.04.11.png

アプリ名を入力。
作成するワークスペースを選択して作成。

とりあえず、Basic InformationのApp CredentialsにあるVerification Tokenをメモっておきましょう。
Verification Tokenの内容を後ほどGASでスクリプトを書く際に必要になります。

##2.SlackAppの設定
画面はそのまま引き続き、今作成したSlackAppをWorkSpaceにインストールします。

アプリをWorkSpaceにインストールするためには権限を設定する必要があるため、

スクリーンショット 2018-03-26 23.07.08.png

上写真部分の permission scope をクリック。
Send messages as <アプリ名> chat:write:botを選択。
今回はSlackに投稿してもらうだけで大丈夫なので、メッセージを投稿する権限のみ設定しています。

その後Install App to WorkSpace が押せるようになるため、押してWorkSpaceにインストール。

これで投稿してもらうBotの準備が整いました。

##3.Google App Scriptでスクリプトを書く

以下のライブラリを使用させて頂きました。
Slack BotをGASでいい感じで書くためのライブラリを作った

ソースは以下の通り。

TrainInfo.gs
var slackAccessToken = 'slackappToken';
function test() {
  var slackApp = SlackApp.create(slackAccessToken);
  // 対象チャンネル
  var channelId = "#general";
  var options = {
    // 投稿するユーザーの名前
    username: "TrainInfo"
  }
  
  //電車遅延情報をJSON形式で取得
  var json = JSON.parse(UrlFetchApp.fetch("https://rti-giken.jp/fhc/api/train_tetsudo/delay.json").getContentText());
 
  var name="名古屋本線";
  var company="名古屋鉄道";
  
  // 投稿するメッセージ
  var currentDate = new Date();
  var date = Utilities.formatDate( currentDate, 'Asia/Tokyo', 'M月d日 HH時mm分');
  var message = "◆電車遅延情報 (" + date + "現在)\n 電車遅延情報はありません。";
  
  for each(var obj in json){
 
    if(obj.name === name && obj.company === company){ 
      
      message ="<@U8U7H4KE0|yuina> \n ◆電車遅延情報 (" + date + "現在)\n" + company + name + "が遅延しています。\n詳細はこちら→ http://top.meitetsu.co.jp/em/";

    }
  }
  
  slackApp.postMessage(channelId, message, options);
}

今回鉄道遅延情報のJSONを使用し、遅れている場合にメンションとURLを追加しています。
1路線しか使っていないためベタ書き状態ですが、複数路線を使用している場合はSpreadsheetを活用するともっとスマートに書けそうです。

##4.GoogleAppScriptのトリガーを設定
GooGle App Scriptに時間帯を指定して指定時刻周辺にSlackにポストしてもらうようにします。

スクリーンショット 2018-03-27 23.33.03.png

今回は朝7〜8時と夕方4〜5時にポストしてもらうよう設定しています。

#完成物

スクリーンショット 2018-03-24 18.43.39.png

こんな感じで通知してくれます。今後改修を進めます。

15
16
0

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
15
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?