はじめに
以下で、EventBridgeを使い、ShopifyイベントとLambdaを連動させる方法は説明している。
ここでは、LambdaからSlackのWebhookを呼び出す方法を検討する。
開発
通知を受け取るためのSlackチャンネルを作成
Slackでwebhook urlを作成
- slackにログインした状態で以下にアクセスする
https://slack.com/services/new/incoming-webhook
- チャンネルを選択し、Incoming Webhookインテグレーションの追加を押すと、URLを入手できる
これは、slack app「Incoming Webhook」によるカスタムインテグレーションで実現している。
登録済みのURLを確認するには、アプリ検索から「Incoming Webhook」を開き、設定を確認する。
SlackのwebhookへメッセージをPOSTするLambdaのコード例
import https from "https";
export const handler = async (event) => {
// Slack Webhook URL
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
const url = new URL(webhookUrl);
const hostname = url.hostname;
const path = url.pathname;
// メッセージの内容を構築
const message = {
text: `New event received: ${JSON.stringify(event, null, 2)}`
};
const postData = JSON.stringify(message);
const options = {
hostname: 'hooks.slack.com',
port: 443,
path: path,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData)
}
};
return new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
let responseBody = '';
res.on('data', (chunk) => {
responseBody += chunk;
});
res.on('end', () => {
if (res.statusCode === 200) {
resolve({
statusCode: 200,
body: 'Message sent successfully'
});
} else {
reject(new Error(`Slack API returned status code ${res.statusCode}: ${responseBody}`));
}
});
});
req.on('error', (e) => {
reject(new Error(`Problem with request: ${e.message}`));
});
// Write data to request body
req.write(postData);
req.end();
});
};