0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SlackBOTからAWS Lamdbaを動かし、Slackに通知する(NodeJS)

Posted at

この記事でできること

chat2.gif
画像の通り、BOTにメンションを送るとSlackに通知が飛んできます

事前準備

AWSのアカウントを用意してください
Slackのアカウントがあり、appsにアクセスできる状態にしておいてください

BOTの作成

  • CreateNewAppから新規アプリを作成します
- App名
わかりやすいもの(今回はSlackに通知するのでSlack-Post)
- インストールするワークスペース
そのBOTを使いたいワークスペースを選択
  • OAuth & Permissions > ScopesからBOTの権限を追加
- app_mentions:read
BOTがメンションを受け取る事ができるようになる
- chat:write
Slackに書き込む事ができるようになる
  • OAuth & Permissions > OAuth Tokens for Your Workspace > Bot User OAuth Tokenをメモっておく
  • Slackにインストールする

これでSlack側にBOTが登録されました
一旦、Slack側の準備はこれで置いておきます

次はAWS Lambda側に移ります

関数(Lamdba Function)の作成

  • 検索バーからLambdaを検索し、選択します
  • 左のメニュー > 関数 > 関数の作成を選択します
  • 以下を設定し、関数の作成をします
    • 関数名
      今回はNodeJSでBOTを動かし、Slackから通知を送るのでSlack-Post-NodeJS
    • ランタイム
      Node.js 18.x

以下のように作成できればOK

  • 作成後、設定 > 関数URL > 関数URLの作成を選択
    API GateWayは使わないやり方でやりたいので関数URLの作成をします
  • 以下を設定し、関数URLの作成をします

認証タイプ
NONE
公開ヘッダー
date, keep-alive
許可ヘッダー
date, keep-alive
許可メソッド
*
最大経過時間
86400
許可認証情報
チェック

  • 関数URLが作られたのでメモっておきます

次はLambdaに配置するファイルを準備します

スクリプトの準備

  • SlackAPIに必要なパッケージをインストール
    @slack/web-api
$ cd [作業するディレクトリ]
$ npm init
$ npm i @slack/web-api
  • index.jsを作り、以下の用に記載
const { WebClient } = require('@slack/web-api');
exports.handler = async (event) => {

    const body = JSON.parse(event.body);
    // BOTの認証用、認証後は削除してもOK
    if (body.challenge) {
      return {
        statusCode: 200,
        body: {
          challenge: body.challenge
        }
      }
    }

    // Slackからの通知の再送対策
    if (event.headers.hasOwnProperty("x-slack-retry-num")) {
      return {
        statusCode: 200
      }
    }
    
    const client = new WebClient(process.env.SLACK_BOT_USER_ACCESS_TOKEN);
    const channel = body.event.channel;
    const text = "TEST";
    await client.chat.postMessage({ channel, text });

    return {
      statusCode: 200,
    }
};
  • Lamdbaにアップロードする為にzip化します
$ zip -r lambda.zip ./index.js ./node_modules/

以下のような構成になったと思います

コードの準備はこれで完了です
Lamdba側に戻ります

Lamdbaにスクリプトの配置

  • Lamdbaの関数 > コードからzipをアップロードする

配置できればコード側は完了です

  • 環境変数の設定
    設定 > 環境変数からコードで使っているSLACK_BOT_USER_ACCESS_TOKENを追加します

Lamdba側の設定は完了です
最後にSlack側の設定です

SlackBOTとLamdbaの疎通設定

  • Event Subscriptions > Enable Events をOnにし、Request URLの欄にLamdbaで設定した関数URLを張り付け認証します

先程index.jsに記載した、

    if (body.challenge) {
      return {
        statusCode: 200,
        body: {
          challenge: body.challenge
        }
      }
    }

こちらが認証用処理となり、認証できたら削除しても大丈夫です

  • Subscribe to bot eventsにapp mentionを追加

設定後、フッターからSaveChangeを押して保存

  • SlackでBOTを呼び出し、メンションを送ってみる

BOTを通してLamdbaからSlackに通知できました!お疲れ様でした

次回はこの通知とChatGPTを使った応用例を書いていきます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?