こんにちは。今年の川崎フロンターレが残念すぎて、実はまだJリーグ開幕していないのでは?と思っている今日このごろなのですが、本当にJリーグって開幕しているのですか?うそっていってくれよ!!
…さて、今回は掲題にある通りAPI GatewayからSlackへ通知を行ってみようと思ったので、そちらの作業ログを残していきたいと思います。
ちょっと長くなってしまったので、今回はSlack Appを作るところまでです。
やろうとしていること
- API Gatewayでエンドポイントを作成
- API GatewayのトリガーとしてLambdaを作成
- このLambdaからSlackのWebhookURLに送信
- Slack Appの
Incoming Webhooksを利用 ← 今回の対象
- Slack Appの
直接、WebhookURLにcurlで送ればいいじゃん!!と思うかもしれませんが、まぁ、あれです、素振りってやつです。
じゃあやってみましょう!
Slack App の作成
Slackへの通知はIncoming Webhooksを利用すればよいと、ググれば出てくるのでその通りにやってみます。
ちょっと前まではカスタムインテグレーションで設定するのが定番だったようですが、今はAppを作成したほうがいいみたいですね。
※ 2020年よりカスタムインテグレーションは非推奨になったようです
注意点
以降の作業は自分個人のSlackアカウントで行ったものになります。つまり管理者権限での実行になるので、そのへんは考慮していただけると幸いです。
※ 会社用などで別に管理者がいる場合は、そこのルールに則っていただければと思います
通知先チャンネルを作る
SlackのWebhookを通じて通知を受け取るチャンネルを適当に作っておきます。
後のApp作成で必要になります。
アプリの管理画面に遷移
- Slackの左メニューにある、
アプリを追加するからAppディレクトリを参照するボタンをクリック

- 遷移した画面の右上にある
管理をクリック

- 遷移した画面の右上にある
ビルドをクリック

- Slack API: Applications | Slack に遷移していたらOK
管理者であれば、直接 https://api.slack.com/apps/ に遷移した方が早いかもしれません。
Appの作成
Create an Appをクリック

From scratchをクリック

- App Name(アプリ名)の入力とwarkspaceを選択して、
Create Appボタンをクリック

- Basic Information から、
Incoming Webhooksをクリック

- Webhookをアクティベート(右上のトグルをONに)して、
Add New Webhooks to Workspaceをクリック

- 失敗した
こんな感じで失敗しました。これは、Webhookを受け取ってチャンネルに送信するユーザー(ボット)が存在しないからです。なので、ボットを作成します。
画面下の〜へ戻るボタンをクリックします。 - Basic Information から、
Add features and functionalityをクリック

Botsを選択

Editを選択

- Display Name(Bot名)の入力と、Botのusernameを入力して
Addボタンをクリック

- ボットの追加が終わったら、
Install to Workspaceをクリック

- 権限のリクエストを求められるので通知先のチャンネルを選択するのと許可を行う

- Basic Information から、
Incoming Webhooksをクリック(WebhookURLの確認)

- 発行されているコマンドをコピーする

- Basic Information から、
Permissionsの確認
よく見ると、今までの手順でPermissionsの付与が行われているので見てみます。

Permissionsをクリックします。

OAuth & Permissions->Scopes->Bot Token Scopesを見ると、OAuth Scopeにincoming-webhookでBotがやれることが書かれています。
試す
コピーしたコマンドをターミナルから叩いてみます。
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Hello, World!"}' \
https://hooks.slack.com/services/TxxxxxU/B0xxxxxNVC/pAxxxxxxxxxxEg # これがWebhook用URL
ok # okと返却されたら成功
Slackに飛んできていることを確認してみます。

OK、飛んでいました!
これで、発行されたWebhookURLへ決められたリクエストをPOSTさえすればSlackに通知することが出来るようになりました。
おわりに
手順は少しめんどくさかったですが、Slack AppのIncoming Webhooksを使って簡単にSlackへ通知することが出来ました。
次回は、APIGateway -> Lambda -> Slack(WebhookURL) と連携させてみようと思います。