Shopifyのwebhookをslackで受信する設定

Shopify

はじめに

以下で、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();
    });
};

関連記事

カテゴリー

アーカイブ

Lang »