Slack へ Event API で投稿をモニタリング、投稿にアクションする Slack Bot 作成

2020年11月13日

概要

やりたいこと

slackbotを作って、Slackに通知があったら自動でアクションをとりたい。

最終的に AWS アラートに対して色々なアクションを行う Slack Bot を作成したい。

Slack Bot

こちらの記事を見ると 5 種類ぐらい作り方があるようだ。

  1. Incoming webhooks
  2. Slash command
  3. Bot users (RTM API)
  4. Bot users (Event API)
  5. Bot users (フル)

今回は 4 で。

スコープ

ボットとして API を実行する際のスコープを設定する

  • Bot Token Scopes  : Bot(プログラム)からアクションしたい場合
  • User Token Scopes  : ユーザとしてアクションしたい場合

手順

投稿用 Slack App 作成

以下のリンクから Slack App を作成する。

App Name と Slack Workspace を入力。

サイドバー「OAuth & Permission」の Scopes セクションがある。
Bot Token Scopes と User Token Scopes の両方に以下のスコープを追加。

ページ上部の「Install App to Workspace」でアプリをワークスペースに追加する。

Slack Workspace との連携後に、アクセストークンが発行される。

Slack チャンネル Slackbot を追加する。以下のコマンドで入れる。

/invite @sec-aws-alert

Bot ユーザのトークンで Slack チャンネルに投稿。

curl -X POST 'https://slack.com/api/chat.postMessage' \
-d 'token=xoxb-9467446806-1519384772064-sQrJiX819diAZBgpKjz9iKsJ' \
-d 'channel=#test-sec-alert' \
-d 'text=テキスト'

以下のように Slack チャンネルに投稿できた。

投稿をモニタリングする Slack App 作成

以下を参考にする。AWS API を作成するパターン。

プライベートチャンネルにもモニタリング・投稿したいため、Slack App のスコープには以下を選択(groups がプライベートチャンネル用)。

サイドバー「Event Subscriptions」より、Enable Events を On にし、Request URL を登録。

Subscribe to bot events に以下2つを設定。
message.groupsはプライベートチャンネル用。

対象のチャンネルに slack bot を招待した状態で、アラートを投げる。

Slack Event API 再送対応(X-Slack-Retry-Numヘッダー)

Slack Events APIの再送仕様と回避方法まとめ(Serverless on AWS)

  1. API Gateway コンソール
  2. API を選択
  3. リソース
  4. POST を選択
  5. 統合リクエスト
  6. lambda 統合プロキシにチェック
  7. APIを再デプロイ

なぜなら Slack Events API 再送を防ぐため

def handle_slack_event(request: dict, context) -> str:
    header = request['headers']
    slack_event = json.loads(request['body'])

    logging.info(json.dumps(header))
    logging.info(json.dumps(slack_event))

    if 'X-Slack-Retry-Num' in header:
        logging.info('X-Slack-Retry-Num: ' + header['X-Slack-Retry-Num'])
        return 200

エラー

Your request URL responded with an HTTP error. Update your URL to receive a new request and challenge value.

challenge が通らない。。

参考

Slack APIを使用してメッセージを送信する

Slack Botの種類と大まかな作り方

[slack]もしかしてRTMはもう使えなくなったのか(2020/03/11)?

AWS初心者でもわかる! ブラウザ上で完結! AWS+Slack Event APIを使ったSlackボット超入門

Slack & monitor private messages

AWS, Slack

Posted by さいき