🖼️

Node-REDでLINEへ画像を送信する

2022/07/19に公開

Node-REDの「line-notify」ノードを利用すると、メッセージや画像を送信することができますが、画像は、インターネットに公開されている画像のみが送信できます。
LINEへローカルの画像を送信するには、「function」ノードと「http request」ノードを利用してできるので、その方法について説明します。

LINEの準備

LINEの準備は、以下の記事を参考にしてください。
https://zenn.dev/dsl_gunma/articles/78218c47efa9d8


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

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

ノードの設定

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

  1. read fileノードをダブルクリックします。ファイル名に送信したいローカルの画像の絶対パスを入力して、出力形式に「バイナリバッファ」を選択します。「完了」ボタンをクリックします。

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

functionノード
const img = msg.payload;  // read fileノードで読み込んだバイナリデータ

msg.payload = {
    "message": "メッセージと画像です。",
    "imageFile": {
        "value": img,
        "options": {
            "filename": "LINE_logo.png",
            "contentType": "image/png"
        }
    }
};

msg.headers = {
    "authorization": "Bearer [アクセストークンを貼り付ける]",
    "content-type": "multipart/form-data"
};
return msg;

https://notify-bot.line.me/doc/ja/

  1. 「完了」ボタンをクリックします。
  2. http requestノードをダブルクリックします。メソッドに「POST」を選択して、URLに「https://notify-api.line.me/api/notify」を入力します。「完了」ボタンをクリックします。

  1. 「デプロイ」ボタンをクリックします。

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

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

[{"id":"6445471eb98eb025","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":240,"wires":[["c50af3ee90f641b7"]]},{"id":"c50af3ee90f641b7","type":"file in","z":"4d5dad1573c7a3cc","name":"","filename":"D:\\logo\\LINE_logo.png","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":360,"y":240,"wires":[["a97f47347ccfbddc"]]},{"id":"a97f47347ccfbddc","type":"function","z":"4d5dad1573c7a3cc","name":"","func":"const img = msg.payload;\n\nmsg.payload = {\n    \"message\": \"メッセージと画像です。\",\n    \"imageFile\": {\n        \"value\": img,\n        \"options\": {\n            \"filename\": \"LINE_logo.png\",\n            \"contentType\": \"image/png\"\n        }\n    }\n};\n\nmsg.headers = {\n    \"authorization\": \"Bearer \",\n    \"content-type\": \"multipart/form-data\"\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":240,"wires":[["cc7e3293cd4b2888"]]},{"id":"66ec029d2f0fb686","type":"debug","z":"4d5dad1573c7a3cc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":910,"y":240,"wires":[]},{"id":"cc7e3293cd4b2888","type":"http request","z":"4d5dad1573c7a3cc","name":"","method":"POST","ret":"txt","paytoqs":"ignore","url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","senderr":false,"credentials":{},"x":730,"y":240,"wires":[["66ec029d2f0fb686"]]}]

動作確認

injectノードの左側のボタンをクリックすると、LINEへメッセージとローカルに保存したLINEのロゴが送信されます。

Discussion