API Gateway->Lambdaを経てSlackのWebhookURLへ送信する-その1-

投稿日:

こんにちは。今年の川崎フロンターレが残念すぎて、実はまだJリーグ開幕していないのでは?と思っている今日このごろなのですが、本当にJリーグって開幕しているのですか?うそっていってくれよ!!

…さて、今回は掲題にある通りAPI GatewayからSlackへ通知を行ってみようと思ったので、そちらの作業ログを残していきたいと思います。
ちょっと長くなってしまったので、今回はSlack Appを作るところまでです。

やろうとしていること

  • API Gatewayでエンドポイントを作成
  • API GatewayのトリガーとしてLambdaを作成
  • このLambdaからSlackのWebhookURLに送信
    • Slack AppのIncoming Webhooksを利用 ← 今回の対象

直接、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の作成

  1. Create an Appをクリック
  2. From scratchをクリック
  3. App Name(アプリ名)の入力とwarkspaceを選択して、Create Appボタンをクリック
  4. Basic Information から、Incoming Webhooksをクリック
  5. Webhookをアクティベート(右上のトグルをONに)して、Add New Webhooks to Workspaceをクリック
  6. 失敗した
      
    こんな感じで失敗しました。これは、Webhookを受け取ってチャンネルに送信するユーザー(ボット)が存在しないからです。なので、ボットを作成します。  
    画面下の〜へ戻るボタンをクリックします。
  7. Basic Information から、Add features and functionalityをクリック
  8. Botsを選択
  9. Editを選択
  10. Display Name(Bot名)の入力と、Botのusernameを入力してAddボタンをクリック
  11. ボットの追加が終わったら、Install to Workspaceをクリック
  12. 権限のリクエストを求められるので通知先のチャンネルを選択するのと許可を行う
  13. Basic Information から、Incoming Webhooksをクリック(WebhookURLの確認)
  14. 発行されているコマンドをコピーする
  15. Basic Information から、Permissionsの確認
    よく見ると、今までの手順でPermissionsの付与が行われているので見てみます。

    Permissionsをクリックします。

    OAuth & Permissions -> Scopes -> Bot Token Scopes を見ると、OAuth Scopeincoming-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) と連携させてみようと思います。

投稿日:
カテゴリー: Slack

作成者: shimabox

Web系のプログラマをやっています。 なるべく楽しく生きていきたい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください