ChatGPTとSlack上で会話するアプリを10分で構築しよう（後編：AWS Lambda）

# 使用するOSS
https://github.com/seratch/ChatGPT-in-Slack
- 言語：Python

# ゴール
AWS LambdaでChatGPTと連続的な会話を実現するSlackアプリを構築する

# AWS Lambdaで動かす
本記事は、以下の記事の後編です

https://qiita.com/rubita/items/f143f199e20b0310980a

ローカル環境で動作確認できたら、次はこれをLambdaにデプロイしてみましょう
（そこまでできれば、社内用ツールとして利用できるようになります）


## Slack API
### Slack APIで新しいAppを作成
最初に、SlackAppを作成します

- Slack Apiで`Create New App`をクリックします
  - https://api.slack.com/apps

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/b8bfb280-69d2-8d76-ba23-ede43e231cdd.png)

- `From an app manifest`を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/21ccaaa4-c077-64a6-0072-ee9939f9c2cb.png)

- `Enter app manifest bellow`を入力します
  - `manifest-prod.yml`の内容をコピペします
  - `request_url`等はこの時点ではまだ確定していませんので、後で変更します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/572e3b4a-8b9d-90a0-b463-d29e53fcc698.png)

### Slack APIで必要な認証情報を控えます
- `Basic Information` > `App Credentials`から以下を控えます
  - Client ID
  - Client Secret
  - Signing Secret

![FireShot Capture 015 - Slack API_ Applications - Sample Slack - api.slack.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/9be16185-96e1-f67c-9774-bec620d6925f.png)


## OpenAI API
- OpenAI API keyを作成し、控えます
https://platform.openai.com/account/api-keys

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/09ba8898-40fe-139b-94c0-d763c6510d22.png)


## AWS S3Bucketの準備
- 以下の3つが必要になります
  - For SLACK_INSTALLATION
  - For SLACK_STATE
  - For OPENAI

## ServerlessFrameworkの実行
- 以下のコマンドを実行してください

```sh
export SLACK_CLIENT_ID=${YOUR SLACK_CLIENT_ID}
export SLACK_CLIENT_SECRET=${YOUR SLACK_CLIENT_SECRET}
export SLACK_SIGNING_SECRET=${YOUR SLACK_SIGNING_SECRET}
export SLACK_SCOPES=app_mentions:read,channels:history,groups:history,im:history,mpim:history,chat:write.public,chat:write,users:read
export SLACK_INSTALLATION_S3_BUCKET_NAME=${YOUR SLACK_INSTALLATION_S3_BUCKET_NAME}
export SLACK_STATE_S3_BUCKET_NAME=${YOUR SLACK_STATE_S3_BUCKET_NAME}
export OPENAI_S3_BUCKET_NAME=${YOUR OPENAI_S3_BUCKET_NAME}
npm install -g serverless
serverless plugin install -n serverless-python-requirements
serverless deploy
```

- 質問にはそれぞれ以下のように答えてください

```sh
? Do you want to login/register to Serverless Dashboard? (Y/n)
# -> Y

? No AWS credentials found, what credentials do you want to use? (Use arrow keys)
# -> AWS Access Role (most secure)
```

- CloudFormationのテンプレートを用意してくれるので、指示通り作成を進めます

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/78614068-e33c-708a-3104-5fb82cb0aa29.png)

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/17f3e4a0-3fd7-7876-fe0f-f819d29f52ac.png)

![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/0990eaa9-70ac-e2a3-28e0-b907b0081ab8.png)


## Slack APPにURLを登録
- デプロイが完了すると、以下のような結果が出力されます

```sh
✔ Service deployed to stack slack-chat-gpt-bot-dev (48s)

dashboard: https://app.serverless.com/xxxxxxx/apps/slack-chat-gpt-bot/slack-chat-gpt-bot/dev/us-east-1                                                        
endpoints:
  POST - https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/events                                                                                         
  GET - https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/install
  GET - https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/oauth_redirect
functions:
  app: slack-chat-gpt-bot-dev-app (2.6 MB) 
```

### Request URL
- 以下の2か所に`Request URL`を設定します
  - `Interactivity & Shortcuts` > `Request URL`
  - `Event Subscriptions` > `Request URL`

- URL: https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/events

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/1b018810-b303-7112-f2ba-b5a53b02bdf2.png)

![FireShot Capture 018 - Slack API_ Applications - Sample Slack - api.slack.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/5a1d3c18-4130-448c-8360-3000e4814784.png)

### `Redirect URLs`
- `OAuth & Permissions` > `Redirect URLs`に以下を設定します
  - https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/oauth_redirect
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/71bd2dab-83db-bf35-3506-f94714d50f56.png)

## Slack APP Installation & Configure
### Installation
- 以下のURLからSlack AppをWorkSpaceにインストールします
https://xxxxxxx.execute-api.us-east-1.amazonaws.com/slack/install

### Configure
- SlackのアプリのホームからConfigureを押します
- OpenAI API keyを入力し、OpenAI Modelを選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/b02155a6-e812-3e1b-5f3f-2061183922d9.png)


# Slackで会話してみましょう
- 普通にWebで会話するように会話してみましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643664/cdc3e54f-b8a0-2278-6bdc-acf1318666e6.png)