Workato：SlackとChatGPTを連携してAIチャットボットを実装してみる

# はじめに
OpenAIが提供する対話型言語モデル「ChatGPT」が話題になっています。ChatGPTはREST APIを提供しているため、WorkatoでもREST APIでChatGPTを利用することが可能です。

また、WorkatoにはWorkbot for Slackをはじめとした、チャットボットをノーコードで簡単に構築できるコネクタが用意されており、Workatoの強みの１つでもあります。

今回は、Workbot for SlackとChatGPTを組み合わせて、簡単なAIチャットボットを実装してみました。

# 手順
## 【１】ChatGPTの準備
### １．ChatGPTへログインする
以下のURLへアクセスし、ChatGPTへログインします。アカウントが無い場合は、「Sign up」をクリックし、サインアップを進めます。

https://chat.openai.com/auth/login

### ２．APIキーの取得
以下のURLへアクセスし、OpenAIのAPIキーを発行します。

https://beta.openai.com/account/api-keys

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/471eedc6-64d4-57ab-217c-98ff492fbbf7.png)

## 【２】Workatoコネクションの追加
Workato上で、必要なコネクションの追加を行います。

### １．「Slackコネクタ」のコネクションを追加
Slackのイベントを取得するための「Slackコネクタ」コネクションを追加します。

以下の記事を参考にSlackカスタムアプリの追加ならびに、Workato上への「Slackコネクタ」コネクションの追加を進めます。

https://qiita.com/tabimoba/items/050c5566866d6c534dbe 

なお、Slackチャンネル上に投稿されたメッセージを取得するため、 `message.channels` あるいは `message.groups` をBot User Eventに追加する必要があります。また、投稿されたメッセージを取得したいチャンネル上へボットユーザーの追加も必要となります。上記とあわせて、それぞれ対応を進めます。

### ２．「Workbot for Slackコネクタ」のコネクションを追加
Slackに対するメッセージ投稿のための「Workbot for Slackコネクタ」コネクションを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/f68f299b-7e3f-974e-0658-53767744447f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/1f0a6812-f45e-4fbd-b9f2-b5a752f48382.png)

### ３．「HTTPコネクタ」のコネクションを追加
ChatGPTへ接続するためのコネクションを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b9a38ff2-f30c-f1e8-e362-f137041f9213.png)

以下を参考に設定のうえ、「Connect」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/0e361b2b-27fa-07e4-f8f9-c8dfd2894b5c.png)

| 項目                                    | 値                                                      |
|:----------------------------------------|:--------------------------------------------------------|
| Connection name                         | 任意の名称                                              |
| Location                                | 任意のプロジェクトまたはフォルダ                        |
| Connection type                         | Cloud                                                   |
| Authentication type                     | Header auth                                             |
| Header authorization                    | Key: Authorization, Value: Bearer \<OpenAIのAPIキー\>   |
| Base URL                                | https://api.openai.com/v1/                              |
| Use custom TLS/SSL certificate settings | No                                                      |

## 【３】Workatoレシピの作成
Workato上でレシピを作成します。

### トリガー
Slackコネクタをトリガーに追加し、「New event」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/077273ef-fc3c-4bf0-48cd-e4821c049dbd.png)

### アクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/4574d88e-202c-d7b3-d4e7-c4b6c1cb0e01.png)

#### Step2 （HTTPコネクタ）
HTTPコネクタを追加し、次の通り設定します。

##### Request name
任意の名称

##### Request
###### Method
POST

###### Request URL
completions

###### Request content type
JSON

###### Request body
以下を参考ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/df5b36a1-8873-5f36-bad1-6d5dc4ceb2a0.png)

```json
{
  "model": "text-davinci-003",
   "prompt": "<Text | Step1>",
   "max_tokens": 2048
}
```

\<Text | Step1 \> （データピル）の箇所は、Step1のEvent > Textを追加します。（以下参照）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/7f578a99-7e79-1316-eaef-852f657c3c27.png)


##### Response
###### Response content type
JSON

###### Encoding
UTF-8

###### Response schema
「Use JSON」をクリックし、以下のJSONを貼付してスキーマを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/bbf3810d-9e0f-6527-0b27-edc2835dea1c.png)

```json
{
    "id": "xxxxxxxxxxxxxxxxxxxxxx",
    "object": "text_completion",
    "created": 1670220225,
    "model": "text-davinci-003",
    "choices": [
        {
            "text": "test",
            "index": 0,
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 16,
        "completion_tokens": 138,
        "total_tokens": 154
    }
}
```

生成されたスキーマは次の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/df7fcfd5-33be-6ab3-d91c-91c0c180be9a.png)


#### Step3 （Workbot for Slack）
Workbot for Slackコネクタを追加し、次の通り設定します。

##### Action

「Post message」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/49a7a17a-4c9f-7b12-350c-4e2188d44a73.png)

##### Setup
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/d1084e33-c49e-f433-21ac-6670e4f5b24c.png)

###### Channel name / DM
Step 1の `Event > Channel` を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/f9c88c0a-76f3-e709-0055-91d8fb0baf08.png)

###### Notification text
Step2の `Response > Choices > Text` を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/8fc14a56-02b1-8b75-1865-56bea210a40f.png)

## 【４】Slackへボットユーザーを追加
以下のユーザーをボットユーザーを追加します。

### Slackカスタムアプリのボットユーザー
「【２】Workatoコネクションの追加」の手順内で作成されたアプリのボットユーザー
（Event subscription でSlack上のイベントを取得する際に使用）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e4110a55-918c-2934-61dc-bfa66285946c.png)

### 「Workbot」ボットユーザー
（チャンネルへメッセージを投稿する際に使用）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/8c9aab75-0a9d-ddee-e3ab-882cf110c31a.png)

## 【５】トリガーの調整
### Slack：Workbot ボットユーザーのIDを取得
#### １）workbotアプリを右クリックし、「アプリの詳細を表示する」をクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c795e4be-4621-ba66-1adb-3b337adcc88f.png)

#### ２）メンバーIDを確認します。（後続の手順で使用します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/1d1f140c-5c26-95f3-e506-2b0eca5d2b27.png)

### Workato：レシピ編集
#### １）レシピ編集画面でトリガーを選択し、「Set trigger condition」を有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/205e25de-088c-582c-072a-f1b2e94004d7.png)

#### ２）以下の通りトリガーの設定を行います。
##### Trigger data
Step1の `Event > User` へ追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/3dbe59ea-216d-d7f0-5ef3-aed14e9f1ff6.png)

##### Condition
does not equal

##### Value
上記「Slack：Workbot ボットユーザーのIDを取得」で確認したメンバーIDを追加します。

## 【６】Workatoレシピのスタート
以上を設定が完了後、レシピをスタートします。

# 動作結果
Slackチャンネルへメッセージを投稿すると、Workato(Workbot)がChatGPTへ問合せを行い、その結果がメッセージとして返されます。（メッセージが返されるまで、10～20秒程度かかります）なお、選択されたモデルにより、出力される結果は異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/02c55d7a-51a8-9dc9-b045-646536ec100d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/a8567e28-a71c-3273-263c-c8b2c0759d75.png)

# 参考

https://chat.openai.com/chat

https://beta.openai.com/docs/api-reference/completions

https://dev.classmethod.jp/articles/chatgpt-line-chat-bot/