📮

Node-REDでSlackへメッセージを投稿する

2022/07/19に公開

Node-REDの「slack-web-api」ノードを利用して、Slackへメッセージを投稿する方法について説明します。

Slackの準備

ワークスペースとチャンネルの作成

Slackへメッセージを投稿するための「ワークスペース」と「チャンネル」を準備します。
Slackアプリから、ワークスペースとチャンネルを新規作成するか、 既に作成されている場合は、そちらを利用します。
ワークスペースとチャンネルの作成については、以下のページを参考にしてください。
https://slack.com/intl/ja-jp/help/articles/206845317-Slack-ワークスペースを作成する
https://slack.com/intl/ja-jp/help/articles/201402297-チャンネルを作成する#:~:text=サイドバーで、「チャンネル」,チャンネルを共有します。

今回は、ワークスペース「Node-RED開発」のチャンネル「node-red_alert」にメッセージを投稿します。

Slackアプリの作成

Slack APIページにアクセスして、Slackアプリを作成します。

  1. Slackのワークスペース「Node-RED開発」のメニューをクリックして、「設定と管理」を選択し、「アプリを管理する」をクリックします。

  1. slack app directoryのページが表示されるので、「ビルド」をクリックします。

  1. slack apiのページが表示されるので、「Create an App」ボタンをクリックします。

https://api.slack.com/apps

  1. 「From scratch」を選択します。

  1. App Nameに作成するアプリ名(ここでは、「Node-RED_notify」)を入力して、Pick a workspace to develop your app inでメッセージを投稿するワークスペース(ここでは、「Node-RED開発」)を選択し、「Create App」ボタンをクリックします。

  1. Slackアプリ「Node-RED_notify」が作成されます。

スコープの追加

スコープは、Slackでの機能を実行する権限をアプリに付与するために使用します。
今回は、テキストによるメッセージを投稿する機能と画像を投稿する機能を実行する権限を付与します。

  1. メニューの「OAuth & Permissions」を選択します。

  1. 下にスクロールし、ScopesのBot Token Scopesの「Add an OAuth Scope」ボタンをクリックして、次の2つのスコープを追加します。
    • chat:write
    • files:write

「chat:write」は、メッセージを投稿するのに必要なスコープで、「files:write」は、画像を投稿するのに必要なスコープです。

Slackにアプリを登録してトークンを取得

  1. メニューの「App Home」を選択します。
    Your App’s Presence in SlackのDisplay Name (Bot Name)とDefault Nameに文字列が入っていることを確認します。

  1. メニューの「Install App」を選択して、「Install to Workspace」ボタンをクリックします。

  1. 「許可する」ボタンをクリックして、権限のリクエストを許可します。
    ▼ボタンをクリックすると、付与したスコープを見ることができます。

  1. Slackアプリのトークンが生成されます。「Copy」ボタンをクリックして、トークンをコピーしておきます。

チャンネルにアプリを追加

メッセージを投稿するチャンネルにアプリを追加します。

  1. チャンネル「node-red_alert」を右クリックして、「チャンネル詳細を開く」を選択します。

  1. 「インテグレーション」タブを選択して、「アプリを追加する」ボタンをクリックします。

  1. Slackアプリ「Node-RED_notify」の右側の「追加」ボタンをクリックします。

これで、アプリ「Node-RED_notify」からチャンネル「node-red_alert」にメッセージを投稿することができるようになりました。


Node-REDによるフローの作成

Node-REDで、Slackへメッセージを投稿するためのフローを作成します。
Node-REDのインストール方法は、以下のページを参考にしてください。
https://nodered.jp/docs/getting-started/local

node-red-contrib-slackのインストール

  1. Node-REDをWebブラウザで開きます。
  2. 右上にある「三」のボタンをクリックしてメニューを開き、「パレットの管理」をクリックします。

  1. 「ノードの追加」タブを選択して、検索のテキストボックスに「slack」と入力します。
    検索されたノードから「node-red-contrib-slack」の「ノードを追加」ボタンをクリックします。

  1. パレットの「ソーシャル」グループにslackのノードが4つ追加されます。

ノードの設定

  1. Node-REDのワークスペースに以下のノードを追加し、図のように配置します。
    • injectノード
    • functionノード
    • slack-web-outノード
    • debugノード

  1. slack-web-outノードをダブルクリックして、「新規にslack-configを追加」をクリックします。

  1. Tokenに先程コピーしたSlackアプリのトークンを貼り付け、「追加」ボタンをクリックします。

  1. 「完了」ボタンをクリックします。

  1. functionノードをダブルクリックして、以下のコードを入力します。

functionノード
msg.topic = "chat.postMessage";
msg.payload = {
    "channel": "node-red_alert",
    "text": "メッセージです。"
};
return msg;
  1. 「完了」ボタンをクリックします。
  2. 「デプロイ」ボタンをクリックします。

  1. 完成したフローです。

作成したフローのJSONを以下に貼っておきます。
Node-REDのメニューから「読み出し」->「クリップボード」で配置することができます。
slack-web-outノードのTokenは再設定してください。

[{"id":"55eff45ccb1bc837","type":"inject","z":"4d5dad1573c7a3cc","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":320,"wires":[["87d98b47ad61e1dd"]]},{"id":"02578aeb7a71e16d","type":"debug","z":"4d5dad1573c7a3cc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":320,"wires":[]},{"id":"87d98b47ad61e1dd","type":"function","z":"4d5dad1573c7a3cc","name":"","func":"msg.topic = \"chat.postMessage\";\nmsg.payload = {\n    \"channel\": \"node-red_alert\",\n    \"text\": \"メッセージです。\"\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":320,"wires":[["49d4a90f712910b8"]]},{"id":"49d4a90f712910b8","type":"slack-web-out","z":"4d5dad1573c7a3cc","client":"6ae2c9c9875bddff","name":"","x":500,"y":320,"wires":[["02578aeb7a71e16d"]]},{"id":"6ae2c9c9875bddff","type":"slack-config","name":""}]

動作確認

injectノードの左側のボタンをクリックすると、Slackのチャンネル「node-red_alert」へメッセージが投稿されます。

Discussion