Slackと連携させたHubotに毎朝今日の予定をお知らせしてもらう


現在研究室内でSlackを使用しており、せっかくなのでHubotを導入して遊んでいる。
また、研究室内で予定の共有のため、Googleカレンダーで研究室カレンダーを作成し、運用している。

しかしながら、Googleカレンダーに複数のカレンダーを表示させると見辛かったり、そもそもGoogleカレンダーを確認しない等の理由から「今日ミーティングあったっけ?」など予定を把握できていないメンバーが発生する。

そこでHubotに毎朝予定を教えてもらうようにした。

使用イメージ

  • 画像の用に毎朝9:00にHubot(miku)が今日の予定を教えてくれる
  • 時間設定があるとき
    • HH:MM:SSにXXX
  • ないとき
    • XXX
  • これらを\n区切りでつなげた文字列を発言させている

hubot

導入については

などの記事を参考にした。

また、foreverを使用して常駐させている。
参考: http://qiita.com/n_morioka/items/837967c0e2711198bd74

Google Calendar API

公式: https://console.developers.google.com/flows/enableapi?apiid=calendar

認証情報の取得

  • https://console.developers.google.com/start/api?id=calendar より、アプリケーションを登録する
  • 「新しいクライアントIDを作成」
    • インストールされてるアプリケーションを選択 → サービス名を入力 → その他を選択
    • 作成後JSONをダウンロードする

ダウンロードしたJSONはこんな感じ

{"installed":{
    "auth_uri":"https://accounts.google.com/o/oauth2/auth",
    "client_secret":"YOUR CLIENT SECRET",
    "token_uri":"https://accounts.google.com/o/oauth2/token",
    "client_email":"",
    "redirect_uris":["urn:ietf:wg:oauth:2.0:oob",
    "oob"],
    "client_x509_cert_url":"",
    "client_id":"YOUR CLIENT ID",
    "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"}}

パッケージのインストール

$ npm install googleapis --save
$ npm install google-auth-library --save
  • ついでに時間指定発言のためにcron、タイムゾーン指定のためにtimeもいれます
$ npm install cron time --save

CoffeeScript

ソース: https://gist.github.com/tk3fftk/42966c00eeeabf164e4e

  • したこと
    • Google公式のNode.js用サンプルをCoffeeScriptにした(それ以外は認証まわりほぼそのまま)。
    • JSONファイルから読み込んでいた認証情報をハードコードした(.coffeeだけで完結させたかったため)。
    • 既存関数の引数にHubot発言用の変数を追加して、カレンダーからの予定取得とともに発言させるようにした。
    • moment.jsを使用するようにしました
  • 初回実行時のみ、使いたいカレンダーを持っているGoogleアカウントでログインしてブラウザ上で認証し、トークンを生成する必要があります。