Slackにインスタントな翻訳機能を提供する-カスタムワークボット設定編-

[前回の記事](https://qiita.com/yabikkio/items/2bd496684b317fc03d2e) の続きです。

# そもそもワークボットとは
WorkatoではSlackへの双方向処理を簡単に構築できる仕組み「ワークボット」が提供されています。

ワークボットには次の２種類があります。

### 標準ワークボット
* Workatoが配布するSlack Appを媒介して動作
* スコープやイベントは固定
* 大抵の処理はこれで十分実現できる

### カスタムワークボット（Enterprise Workbot）
* 自作のSlack Appを媒介して動作
* 対象のイベントやスコープは自由に設定でき、拡張性に優れる
* 標準ワークボットよりもできることが多い
* エディションにより利用個数に制限あり


さて、今回実現することに話を戻します。

> 1. Slackの投稿に絵文字リアクション :flag_jp: が付けられたら起動

これには、Slackイベント「reaction_added（リアクションが追加された）」の受信が不可欠ですが、標準ワークボットでは非対応のため、カスタムワークボットを使用します。

# カスタムワークボット利用までの道のり
＜工程１＞必要なイベントやスコープの洗い出し
＜工程２＞Custom OAuth profileを作成する
＜工程３＞コネクションを作成する
＜工程４＞ボットをチャンネルに追加する

おや？肝心のSlack Appは作らないの？と疑問に思うかもしれません。安心してください。
工程２のガイドの中で、Slack Appもついでに作れるようになっています。


# ＜工程１＞必要なイベントやスコープの洗い出し

今回受信したいイベントは１つです。

* ``reaction_added（リアクションが追加された）``

ここで注意したいのが、リアクション追加イベントを受信した際のペイロードには、肝心のメッセージの**テキストは含まれていない**ことです。

https://api.slack.com/events/reaction_added

そうなると、メッセージテキストを取得する処理が別途必要となります。

Slackの[APIメソッド一覧](https://api.slack.com/methods)から、今回使うメソッドは
* ``conversations.history``

かな？とアタリを付けて、必要なスコープを確認しておきます。

https://api.slack.com/methods/conversations.history

# ＜工程２＞Custom OAuth profileを作成する
Workatoの左サイドメニューから Tools > Custom OAuth profiles の順にクリックします。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/1238a1f6-b851-e767-22c7-69a17f451a6e.png">

「＋ New OAuth profile」をクリックして、「New custom profile」と書かれた画面に遷移します。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/5ae86e70-eb1a-9902-65ea-021ddabb3a66.png">

* Step1の**Application**：`Workbot for Slack`を選択
* Step2の**Name**：任意の値を入力

上記設定のうえ、「Create new app」ボタンをクリックします。

別ウィンドウが開かれ、ログイン中のSlackに自動で遷移します。
（利用するSlackの環境によっては、適用先のSlackのワークスペースを選択する画面が途中で表示されることがあります。その際は、適宜選択してください）

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/dd48f67a-2256-b0c7-5a37-ba2f0eef3cf1.png">

ここでは、何やらこまごまとした設定が施されたAppを作っていいかを問われています。
これはワークボットとして最低限動作するためのスコープなどが初期設定されているものです。
「Create」ボタンを押すと、Slack Appが作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/23e7e0b8-1f2c-e8eb-6059-b6c94ba2558d.png)

WorkatoのCustom OAuth profileの設定画面に戻り、先ほど作成したSlack AppのClientIDなどの情報を転記し、「Save」ボタンで保存します。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/01b0bc0e-32f5-ecdf-5d79-ef5fa102bb58.png">

最下部の「Done」ボタンも忘れずに押しておきます。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/89577f35-fa13-2e5b-24c4-ce22a5fddb85.png">

## 設定のカスタマイズ
今回の用途に合わせて、Slack App側の設定を追加します。

### 受信イベントの追加
SlackAppの「**Event Subscriptions**」の画面に遷移して、Subscribe to bot events で以下を追加します。
* reaction_added

### スコープ追加
SlackAppの「**OAuth & Permissions**」の画面に遷移して、Scope > Bot Token Scopes で以下を追加します。
* channels:history
* groups:history
* im:history
* mpim:history

## Slack Appのインストール
作成したSlack Appを、Slackワークスペースにインストールします。
多くの場合、ワークスペースの管理者がアプリの制限をしているため、承認を経てからのインストールという流れになります。
SlackAppの「**Install App**」の画面に遷移して、「Request to Install」ボタンをクリックします。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/0d52a143-dcf5-f206-b52a-68e3175886b6.png">

この時点では、申請した状態です。（未インストール）
管理者の承認が下りたらインストールし、工程３に進みます。

# ＜工程３＞コネクションを作成する

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/8d7011ae-c7b6-a3a5-bd6e-0e22226e9378.png">

* **Custom OAuth profile**：先ほど作成したプロファイルを選択します。
これにより、意図したSlackAppと紐づけることができます。

「Connect」ボタンでSlackの画面に遷移しますので、「許可する」ボタンをクリックします。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/f59a5fde-6893-c0ce-40c8-70bfbdc397cc.png">

コネクションのステータスが`Connected`となれば完了です。

# ＜工程４＞ボットをチャンネルに追加する
ボットユーザーも人間のユーザーと同様に、**参加しているチャンネルならばイベントに気づける／投稿できる**というSlackの基本仕様が適用されます。

このため、ボットを該当のチャンネルに参加させる必要があります。

該当のチャンネルで、ボットをメンションするとSlackbotから返信が届くので、「招待する」ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/82383880-fc3f-e4b1-a5e8-7ee7ae48d302.png)

:::note info
別の方法もあります。
* チャンネルで、インテグレーション＞アプリの追加
* アプリで、「＋チャンネルにこのアプリを追加する」
:::

:::note info
チャンネル追加は、**あくまでチャンネルに関する送受信をおこなう場合に必要**な工程です。
:::

# できればやっておくこと
Slack Appの初期アイコンは、人間ユーザーと同様の画像が適用されるため見分けがつきにくいです。
一目でボットと分かるアイコンに変更しておくと無難です。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/f373958f-5fd8-a73c-4843-b87f3dd096e8.png">

Slack Appの「**Basic Information**」の画面に遷移して、Display Informationで任意のアイコンに変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/df55b4e8-e374-d314-04a9-d4bb86f1fffd.png)


# さいごに
これで難所は越えました。
次回は、[**レシピ構築編**](https://qiita.com/yabikkio/items/cb728e63e37191e78421)です。