こんにちは。今年の川崎フロンターレが残念すぎて、実はまだ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) と連携させてみようと思います。