Alexa で Slack を操作してみる 【IFTTT 編】

# はじめに
コロナ自粛中はフルリモートで勤務をしておりました。その中で、離籍中や会議中、お昼休みなどはステータスを変えるという会社のルールがあったのですが、Alexa を使ってできたらちょっとだけ楽になるなと思ったので実際に作ってみました。

---

# 作ったもの
今回作ったのは Alexa で Slack のステータス絵文字を変更する IFTTT アプレットです。

「アレクサ、勤務開始トリガー」という発話で Slack のステータスアイコンが :house: に切り替わります。

こんな感じのイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/e1467cab-6964-66ca-be09-b2f2e75eae90.png)


「アレクサ勤務開始トリガー」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/034d044a-4339-2f42-52c9-84cbcb29a38d.png)

---

# 必要なもの
- Alexa 搭載のデバイス（スマホの Alexa アプリでもOK）
- Amazon アカウント
- IFTTT アカウント
- Slack アカウント

---

# IFTTT とは？
- IF（もし）
- THIS（これをしたら）
- THEN（そのあと）
- THAT（あれをする）

の略で、様々なウェブサービス同士を簡単に連携させてオリジナルのアプリを作成できるサービスです。基本的な情報や使い方は下記などを参考にしてみてください。

https://chasuke.com/smarthome-ifttt/


---
# 作り方
---

## Alexa をトリガーとして設定する
Alexa は IFTTT で連携できるサービスの中でも代表的なものです。様々なイベントを取得できますが、今回はユーザが Alexa に特定のフレーズを話しかけたときにイベントが発生するように設定します。

---

- IFTTT のメニューから Create を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/d587bd00-7219-9d9f-48da-9a6a1d35e9ab.png)

---

- This のとなりの＋マークをクリックしてイベントの内容を定義していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/416dd2af-9898-46cb-41b0-df90c2b41b54.png)

---

- Alexa を検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/978c289e-301c-6819-cc1e-f30ae25d12b9.png)

---

- connect をクリックして Amazon アカウントでログインする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/5a047aef-a9e2-2c5f-32fc-ae6960db916b.png)

---

- Say a Specific Phrase トリガーを選択する

このトリガーは、特定のフレーズに対してイベントを発生させる、というものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/a538ffad-829b-093d-0c89-4d54cebbb02b.png)

---

- このアプレットを起動するためのキーワードを入力してトリガーを作成します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/87fa56d1-6e75-8c03-14c4-f25f3493e954.png)

---

## Slack の設定

Slack も IFTTT と連携できますが、現在公式に利用できるのはあるイベントが発生したときに、特定のチャンネルに投稿する、というものだけです。そこで、Webhooks を利用して Slack API を叩くことで、ステータスの変更を実現します。
ここからの作業は先ほどの IFTTT 画面を保持したまま、別タブで行うなどしてください。

---

- Slack のアプリ管理ページを開いてCreateNewApp をクリック

https://api.slack.com/apps

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/124d3847-7c62-02a2-66ae-bb688f3ec099.png)

---

- アプリ名と作成するワークスペースを入力して Create App をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/4f002e9e-ddc9-8d42-cd7c-eeac71f1d6f5.png)

---

- メニューバーの OAuth & Permissions をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/d1eb0824-e815-91cf-a7c5-3acc2aef21ec.png)

---

- スコープを設定する

今回はユーザのステータスを変更したいので、該当する権限`users.profile:write`を User Token Scopes の方に追加します。
スコープについての説明は下記などをご参照ください。
https://api.slack.com/lang/ja-jp/understanding-oauth-scopes-bot

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/18167c3b-69a5-ce8a-a2f9-9e8d54eaced2.png)

---

- アプリをワークスペースにインストールする

OAuth Tokens & Redirect URLs の Install App To Workspace をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/4baa579c-2cb9-5e72-7d80-2fd59eae857d.png)

---

- 正しい権限が付与されているか確認して許可

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/8b7a836a-141d-8ef6-0a75-36b0abf1cb67.png)

---

- トークンを取得

後ほど使用するので控えておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/e16c1388-7100-cc50-2e1f-565ecb751f09.png)

---

## IFTTT の処理の設定

再度 IFTTT の画面に戻ります。

- That の隣の＋マークをクリックしてイベント発生時の動作を定義していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/aa621dde-e9ec-0f11-bacf-0ce1e4c35e31.png)

---

- Webhooks を検索して選択

Webhook は HTTP リクエストを叩いたり、逆に叩かれるエンドポイントを作成をしたりということが簡単にできる仕組みのことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/2729008b-e213-4155-5fd4-534610870877.png)

---

- Make a web request を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/215798b6-b478-787f-9d8c-8b39afa171db.png)

---

- API を叩くために必要な情報を記入

今回使用するのは users.profile.set メソッドです。
[Slack の公式ドキュメント](https://api.slack.com/methods/users.profile.set) に従って項目を入力していきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/f05cfe65-7d54-d3b9-cbf9-d2a0bc6ee326.png)

記入する内容は下記です。

|項目 |内容 |
|:--|:--|
|URL|https://slack.com/api/users.profile.set|
|Method|POST|
|Content Type|application/x-www-form-urlencoded|

Body は下記のように記入します。`xoxp-XXXXXXXXX...`の部分に自分のトークンを入れてください。

```:Body
token=xoxp-XXXXXXXXXXXXXXXXXXXXXXX&profile={"status_emoji": ":house:"}
```

ここまで記入したら Create Action をクリックしてアプレットを作成します。

※今回、json 形式ではなくx-www-form-urlencoded 形式にしたのは、IFTTT の Webhooks ではリクエストのヘッダに Charset など、Slack  API の仕様で定められているプロパティが設定できないためです。

---

- 最後にアプレットの内容を記入して Finish をクリックして完成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/319be73f-c18a-4e79-8374-3e9d5363f973.png)

---

# 実際に動かしてみる

最初のステータスを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/e1467cab-6964-66ca-be09-b2f2e75eae90.png)


「アレクサ勤務開始トリガー」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/034d044a-4339-2f42-52c9-84cbcb29a38d.png)

できました！！！！！！

---

# まとめ

Alexa と Slack を IFTTT を利用することで非常に簡単に連携させることができました。Slack API には他にも様々なメソッドが用意されているので、今回と同様の方法で多様な動作を実現できると思います。是非チャレンジしてみてください。