この記事でできること
画像の通り、BOTにメンションを送るとSlackに通知が飛んできます
事前準備
AWSのアカウントを用意してください
Slackのアカウントがあり、appsにアクセスできる状態にしておいてください
BOTの作成
- SlackApiのAppsにアクセスします
SlackApi
https://api.slack.com/apps/
- 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
- 関数名
- 作成後、設定 > 関数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を使った応用例を書いていきます