読者です 読者をやめる 読者になる 読者になる

googleカレンダー(iCal)の内容を読み取ってSlackのユーザーステータスを更新する

Slackでユーザーのステータスを更新できる様になりました。

Set your status in Slack – Several People Are Typing — The Official Slack Blog

これを知ったときにカレンダーの予定を読み取って自動的にステータス更新できたら自分の予定を自分に声をかけようとしている人に対して知らせることができるなと思って、APIでも更新できることを知ったので雑に社内で使っている自分のGoogleカレンダーの予定をiCal経由で読み取ってSlackのステータスを更新してみるのを試してみました。

もしこれができると、自分が社内の用事で離席をしていたり外出しているときなどにSlackで何らか声をかけていただいても反応できないときに状況を把握してもらえたり、外部から御電話いただいたときも代表電話を受け付けていただいた方がわざわざ自分のカレンダーを開いて予定を確認していただくといった手間も多少は緩和できそうだな。と。

ということで、こういうときの実験台には当方作成のevacで実験をします。入力をiCal、出力をPOSTリクエスト指定すればよさそう。

なお、出力で指定しているtokenはこのページで取得できます。

以下の様なYAMLを用意して、evacで実行。

in:
  ical:
    url: https://calendar.google.com/calendar/ical/hideack〜/basic.ics
    within: 1
out:
  httpPost:
    url: "https://slack.com/api/users.profile.set"
    body:
      form:
        token:profile: '{"status_emoji":":clock2:", "status_text":"__word__"}'

これを定期的に実行すると実行時から1時間以内の予定があればSlackのステータスが更新されます。

例えば、下は4月16日 12:00〜 「slackステータス更新試してみるテスト」という予定があった場合。

ステータスを示すアイコンにマウスカーソルを合わせると

f:id:hideack:20170416113246p:plain

といった感じで表示されますし、DMを送ろうとすれば入力欄に

f:id:hideack:20170416113310p:plain

と表示される様になるので当方がいま外出しているかだったり、ミーティング中なのかだったりはお知らせできそうな感じがします。

Slackはこういった形で基本的なコミュニケーションツールとしての基礎の上にプログラマブルに拡張できたりしていく仕掛けを備わっているのが本当に素敵だなぁ。といつも思う。

参考

qiita.com