💡作ったもの
Slack の特定の Reaction に反応し、Reactionで反応し返してくれるサーバレスBOTです。
Slack の BOT と Subscribe を使うことで、全ての Reaction を API-Gateway 経由で Lambda に受信します。
特定の Reaction だった場合は Slack API を呼び出して、Reaction を複数つけ返します。
Slack BOT は手動で設定する必要がありますが、AWS 側は Serverless Framework を使うことで環境構築を自動化しています。
Serverless Framework なしで作る手順は前回記事参照。
成果物
saitota/SlackServerlessReactionBot
✋構築手順
必要なもの
- AWS アカウント
- Serverless Framework
- Slack アカウント
導入手順
1. ここ からBOT作成
- Bot User
- Display Name
- Default Username
- Permissions
- OAuth & Permissions
- Scopes
- channels:history
- channels:write
2. トークンを2つ取得
- Permissions
- OAuth & Permissions
- OAuth Access Token
- Bot User OAuth Access Token
3. リポジトリをClone
$ git clone https://github.com/saitota/SlackServerlessReactionBot.git
4. Serverless の設定ファイルを編集、先程のトークンで書き換えてください
OAUTH_TOKEN: 'xoxp-000000000000-000000000000-000000000000-0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x'
BOT_TOKEN: 'xoxb-000000000000-0x0x0x0x0x0x0x'
5. Serverless Framework でデプロイ (事前にaws-cliの初期設定が必要です)
$ sls deploy ./SlackServerlessReactionBot
...
api keys:
None
endpoints:
POST - https://0x0x0x0x0x.execute-api.ap-northeast-1.amazonaws.com/prod/
functions:
fnc: SlackServerlessReactionBot-prod-fnc
6. Slack BOT のエンドポイント設定と、Subscribe設定をします
- Event Subscriptions
- Request URL:
set your endopint url(you can see in your deploy log)
- Request URL:
- Subscribe to Workspace Events
- reaction_added
- reaction_removed
7. 設定完了!
Slackで HOOK_REACTION
のリアクション(デフォルトは👍)をつけてみましょう
ハマった所
Lambda が実行されると Slack から下記メールが届いて、勝手に Subscribe が Disable されることがありました。ググっても情報なくログ見てもわからず、API-Gateway と Lambda-Function を再作成すると治りました。根本原因わかりませんでしたが、HTTP Return Code が悪かったのかもしれません。
Events are disabled for BOTNAME.
Something's gone awry with BOTNAME, so we've temporarily stopped sending events to it. Not to worry—we're sure you can get it fixed right up.
Please log in to correct the problem, and feel free to reply to this email if you need help.
📝あとがき
公開用に Serverless Framework を使ってみました、クラウド環境構築部分をコード化でき、配布可能な形にできるのでとても素敵です。BOT 作成のところも自動化できるといいんですけどね。