【node.js】メールをトリガーにslackへ通知を飛ばしたい

Nagiosからの通知メールをslackに飛ばしたいと思った時のメモ

 

slackのwebhookを作成

まずはslackのwebhookを作成しましょう

slackを開いてAppをクリック

 

 

「Incoming Webhook」で検索

 

 

「Slackに追加」をクリック

 

 

通知を飛ばしたいチャンネルを選択

※今回の場合は「#hook_teset」

「 Incoming Webhook インテグレーションの追加」をクリック

 

 

追加されました

 

 

 

webhook URLをコピーする

 

 

 

windowsのコマンドプロントなどから以下の内容(curlコマンド)を実行してみてください。

うまくできていればSlackに通知が行くはずです

 

 

slackに通知を飛ばすcurlを自動で作成する

今回はタイトル通りNode.jsでメールを受信して、slackにcurlで通知を飛ばします。

 

以下がコードです。(raspberry piで動かしているのでraspberry-botという名前でslackに通知しています)

 

Node.jsのinboxモジュールでimapメールを受信してメールのタイトルを確認し、

「CRITICAL」が含まれていればslackに通知を送ります。

//inboxモジュール読み込み
var inbox = require("inbox");

//メールアカウント情報
const server = "mail.exampl";
const user = "exampl_user";
const password = "examplpass";

//slackの情報
const url =
    "https://hooks.slack.com/services/exampl1F/exampl2H/examplexamplexampl";
const channel = "#nagios通知アラート";
const username = "raspberry-bot";
const icon_emoji = ":troll:";
const head = "[ラズパイアラート]\n";

//inboxモジュールでメールアカウントに接続
var client = inbox.createConnection(false, server, {
    secureConnection: true,
    auth: {
        user: user,
        pass: password
    }
});

//メールに接続確認
client.on("connect", function() {
    console.log("connected");
    client.openMailbox("INBOX", function(error) {
        if (error) throw error;
    });
});

client.connect();

//新着メールが来たら
client.on("new", function(message) {
    //jsonに変換
    const payload = {
        channel: channel,
        username: username,
        icon_emoji: icon_emoji,
        text: head + "```" + message.title + "```"
    };

    // console.log('日時:' + message.date);
    // console.log('送信者:' + message.from.name + '-' + message.from.address);
    // console.log('タイトル:' + message.title);

    //メールタイトルに「CRITICAL」が含まれていた場合
    if (message.title.indexOf("CRITICAL") !== -1) {
        //コマンド作成
        var command =
            "curl -d '" +
            JSON.stringify(payload) +
            "' -H 'Content-Type: application/json' " +
            url;

        //コマンド実行
        const execSync = require("child_process").execSync;
        const result = execSync(command);

        // console.log('command = ' + command);
    }
});


 

コメント

タイトルとURLをコピーしました