位置情報を使ってSlackのステータスを更新してみた

# はじめに
第3回「研究室のみんなそれぞれ1日使って何か作ろう！」の日。
他のメンバーの記事：
[プログラミング初心者がSwiftでマルバツゲームのiOSアプリ作ってみた](https://qiita.com/mitsu09/items/156e6de5cd19d33c1ab2)
[指定したユーザーのツイートをしゃべるRaspberry Piの作り方](https://qiita.com/hayashi1989/items/dabd1a4f7b747ef7c4e1)

研究室のメンバーや先輩、先生とSlackで話をしながら「今学校いる？」とよく聞かれる。
Slackには「ステータス」という便利な機能があり、これを都度変更すればSlackのメンバー全員が僕の状況を把握できる。
<img width="245" alt="スクリーンショット 2020-02-12 17.41.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/9704e3f3-6633-46c1-013d-f8e5a5818102.png">
でも毎回自分で変更するのはめんどくさいし変更し忘れていたら元も子もない。

**自分で操作することなく、学校に来たらSlackのステータスを「学校」、それ以外の時は「外出」などにしたい！**

# 既存の記事
探してみたら「コレコレ！」となるものがあった。
[オフィスにいる間は、Slackのステータスを自動で会社の絵文字 🏢 にする](https://www.tam-tam.co.jp/tipsnote/tool/post13583.html)
定めたWifiに携帯が繋がったらSlackのステータスを「会社」にするという内容だ。しかしこの「Wifiに繋がったら〜」のトリガーがAndroidにしかないみたい。僕を含め研究室のメンバーはほとんどiPhone使いなので渋い。

次に見つけたのがこの記事だ。
[【IFTTT】会社を出たらSlackに自動投稿するレシピの作り方](http://www.sukicomi.net/2016/03/ifttt-area-slack.html)
位置情報に従って、会社を出たらSlackに自動投稿するという内容である。位置情報のトリガーはiPhoneでも使えるっぽい。

上の２つの記事を組み合わせて、**位置情報を使ってslackのステータスを更新する**ことにした。

# Slackでtokenを取得
下の記事を参考にさせていただいた。
[Slack API 推奨Tokenについて](https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21)

Appを作成したら「OAuth & Permissions」のタブへ。
<img width="228" alt="スクリーンショット 2020-02-12 17.02.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/c72c95df-eb69-50d4-8c8d-27548ab76e5e.png">

Permission scopesの設定。[users.profile.set](https://api.slack.com/methods/users.profile.set)をみてみると、ステータスを変更するためには`users.profile:write`が必要と書いてあるのでそれを追加。
<img width="691" alt="スクリーンショット 2020-02-12 17.06.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/3cc825eb-4737-b489-991b-da08e06c49c6.png">

「Install App to team」を押せばtokenが発行される。

※以後、このtokenを`<slack_token>`と記述する。

# IFTTTで位置情報と関連付ける
※学校に来たときの挙動のみ説明する。Locationのenterとexitを逆にすれば学校から帰るときの設定ができる。

上記の「既存の記事」2つを参考にさせていただいた。

[IFTTT](https://ifttt.com/)のページに行って「Explore」を押すと、「Make your own Applets from scratch」という文字が出てくる（めちゃ分かりにくい）。
<img width="1469" alt="スクリーンショット 2020-02-12 17.13.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/3f1bc069-b55d-95b7-81a6-61762f23a58a.png">

＋ボタンを押して「This」のところに「Location」を選択。「You enter an area」を選択してエリアを指定する。
「That」のところには「Webhooks」を選択。「Make a web request」を選択する。
中身はこんな感じ。
<img width="384" alt="スクリーンショット 2020-02-12 17.25.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/58957a72-ceb7-b355-5824-de08ae3491a1.png">
コピペ用

```text:URL
https://slack.com/api/users.profile.set
```
```text:Body
token=<slack_token>&profile={"status_text":"学校","status_emoji":":school:"}
```

これで「Create action」を押して名前を決めればAppletが完成する。

# 実験
設定したエリアから出ないといけないので、お散歩に行ってみた。
エリアから出たときのステータス：
<img width="249" alt="スクリーンショット 2020-02-12 17.33.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/f7ee1890-f571-686d-bd96-b6d4222a9bda.png">
エリアに帰ったときのステータス：
<img width="237" alt="スクリーンショット 2020-02-12 17.34.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269742/6af8b18f-fd2d-7576-1cc1-5667e1e6614b.png">
できたー

# まとめ
かなり簡単だった。ノーコードだったし。ただ、エリアを出てからSlackのステータスが変わるまでに多少時間がかかるっぽいので注意が必要。Slack側の更新頻度の問題かな？

IFTTTは簡単にいろんなことができて楽しい！