iPadでChatGPT APIを用いたSlack botを作成してみた。

[前回](https://qiita.com/katsuki_ono/items/df8830c8b07e3a59f354)、 ChatGPT APIを用いたLINE botを思ったより簡単に作れたので、今回はChatGPT APIを用いたslack botを作成してみました。

私は自力でゼロからコードを書けないので、調べたり、ChatGPTやbingに教えてもらいながら製作するのですが、今回はあまり良い情報が見つからなかったので、ゼロから全てChatGPTにコードを書いてもらい、私が修正しています。

今回もGoogle  Colabを使ってpythonでコードを書いています。


私が実際に行った製作プロセスとは異なりますが、Slack APIの設定をしてからコードを作成するという手順でプロセスを記載します。

# ⒈Slack APIを設定する
## ⒈⒈appを作成する
自分のワークスペースにログインした状態で、[Slack API](https://api.slack.com)のページにアクセスして、create an appを押します。
ページが開いたらcreate new app を押します。![38BA7D06-8F25-4333-A5B5-91E08F9A3DBF.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/84b10500-d266-3fae-c6c4-a02a3ddd29bf.jpeg)

メニューが開いたら、from scratchのの方を選択します。![B67C091E-5086-497B-A768-FF6251EFC9BE.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/6ff0ae93-f98f-cb62-6316-10794061278d.jpeg)

アプリ名とアプリを使用するワークスペースを入力します。![48A79AB9-ECD5-4D05-881B-3437293356EB.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/95bec50c-49a4-7d55-eb92-f6302dc64b8f.jpeg)

これで設定するappが作成されました。

## ⒈⒉設定しながら必要な情報を得る
まず、はじめに開くBasic Informationのページで、Signing Secretを取得してメモします。![21890052-D4B8-4399-84DA-2CDE3799B9A2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/31f0e16a-5773-faee-7abc-f977c943309f.jpeg)

次に左のメニューからOAuth & Permissionsを開いて、Scopesを設定します。
今回は、chat:writeとhistory系のものを入れます。![A70D7EF3-8245-4B5E-ACFC-CF90D42AF1C1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/687cc57a-d7bb-206c-0771-fd789d654193.jpeg)


設定したらOAuth Tokens for Your Workspaceのところまで上にスクロールして、install to Workspace を押して、一度ワークスペースにインストールします。
インストールしたら、Bot User OAuth Tokenを入手可能になるので、入手してメモします。

ここまで終わったら左のメニューからSocket Modeを開いてEnable Socket Modeをオンにして、トークン名を設定して、Generateします。
Generateしたらトークンが発行されるので、メモします。
この設定を行うことでwebhookが不用になります。


トークンを取得したら、左のメニューからEvent Subscriptionsを開きます。
まず、Enable Eventsをオンにします。


オンにしたら、Subscribe to bot eventsを設定します。
今回はmessage 系のものを入れます。入れたら、右下のSave Changeを押して登録します。![21DFD811-377C-48F7-8797-1E8EA59CBFB9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/30c2b25b-ba87-6ce4-bda0-3a357498e4f5.jpeg)

これで、slackからのイベントを受け取れるようになります。

最後に、上に表示される黄色のポップアップかOAuth & Permissionsからアプリをワークスペースに再インストールしたらslackの設定は完了です！![EF8490C7-208E-4E55-A9CC-A3F08E27392C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/11ca91b2-9286-369a-49e1-717b560bedb1.jpeg)


# ⒉コードを作成する
まず、openaiとslack boltをインストールします。

```
!pip install --upgrade pip
!pip install setuptools wheel
!pip install openai

!pip install slack-bolt
```

次に必要なインポートと⒈⒉で取得したトークンなどを環境変数に入れる、openaiの APIキーの登録を行います。

``` python
import openai
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os

#Bot User OAuth Token
os.environ["SLACK_BOT_TOKEN"] =  ""

#Signing Secret
os.environ["SLACK_SIGNING_SECRET"] = ""

#Token 
os.environ["SLACK_APP_TOKEN"] =  ""

#openaiの APIキー
openai_api_key = ""
```

次に下記のコードをコピペして、全てのコードを実行します。

``` python
app = App(
    token=os.environ.get("SLACK_BOT_TOKEN"),
    signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
)

openai.api_key = openai_api_key
assist1 = ""

@app.event("message")
def handle_message(event, say):
    global assist1
    text = event["text"]
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "好きな設定を書く。例：あなたは占い師です。"},
            {"role": "assistant", "content": assist1},
            {"role": "user", "content": text},
        ]
    )
    assist1 = response["choices"][0]["message"]["content"]  # assist1を更新
    say(assist1)

if __name__ == "__main__":
    handler = SocketModeHandler(app,app_token=os.environ.get("SLACK_APP_TOKEN"))
    handler.start()
```

実行後、作成したアプリをインストールしたワークスペースにテストチャンネルを作成して、アプリをインバイトして、そのチャンネルで、何かメッセージを送信してみます。
以下のようになったら、成功です！![6D3D4AA1-D986-4FCC-8E14-91035A41D79F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287642/04eee3a6-18d5-5df2-e5b9-3eb5f37367b9.jpeg)

# 最後に
今回は、slackの設定からコードの作成までほぼ全てChatGPTを頼りに行いました。
 ChatGPTの登場で世界が変わるのを強く感じます。
また何か作ってみます。