【enebular】専用ノードや functionノードを使わず templateノードと Node-RED 3.0 の新機能で実現する LINE Notify での通知（Sticker送信も）

## はじめに
以下の enebular（Node-RED）で templateノードを使う話の記事を書いた際に、「過去に記事にしていた内容でも、templateノードを活用できそうかも？」と思って着手したのが、今回の記事の内容です。

●【enebular（Node-RED）】天気情報を API で取得してダッシュボード上でテーブル表示 - Qiita
　https://qiita.com/youtoy/items/01836b9c4a5efc013977

具体的には、「templateノード」だけでなく「Node-RED 3.0 の新機能」も含めた 2つの内容が関係する話です。

### 今回の内容の元にする過去記事
そして、「過去に記事にしていた内容でも活用できそうかも？」と頭に思い浮かんだ記事というのは、具体的には以下になります。

●Node-RED で functionノードや専用ノードを使わず LINE Notify を利用する（changeノードを利用、Sticker送信も試す） - Qiita
　https://qiita.com/youtoy/items/ad4651b6438040a353f6

## 今回の記事の概要
[上で掲載していた 2つ目の記事](https://qiita.com/youtoy/items/ad4651b6438040a353f6)では、Node-RED の changeノードを利用して [LINE Notify](https://notify-bot.line.me/ja/) による通知を行っていました。その部分を、「templateノード」と「Node-RED 3.0 の新機能」を使った処理に置きかえます。

それによりノードでの設定の一部分は、前より少しシンプルにできたように思います。

### 過去の記事で changeノードを使っていた部分
過去の記事で changeノードを使っていた部分は、以下の 2つです。

__1つ目：HTTPヘッダの設定__
![changeノードを使っていた部分1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/2f5cc379-56e2-b84f-86cf-109bd8de12d1.png)
__2つ目：Sticker送信のための設定__
![changeノードを使っていた部分2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/65e87e60-3d51-692d-c1b1-92fc2e190431.jpeg)

この部分を「templateノードを使った形 ＋ Node-RED 3.0 の新機能を活用した形」にすると良さそうだと思ったので、実際に試してみます。

## enebular上で試してみる
今回の内容を試す環境は、[上で掲載していた 1つ目の記事](https://qiita.com/youtoy/items/01836b9c4a5efc013977)でも使っていた enebular を利用します。

### 下準備
LINE Notify を使うための事前準備などは、[過去の記事](https://qiita.com/youtoy/items/ad4651b6438040a353f6)で触れていますので、詳細はそちらをご覧ください。

### 今回利用したフロー
enebular（Node-RED）を使ったビジュアルプログラミングで処理を作成します。

LINE Notify でSticker送信も含む通知を行うための処理（フロー）は以下のとおりです。
![今回のフロー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/c6460e90-2cd6-ef57-7516-c87801c8a1a7.png)
デバッグ出力用の部分を除いたノードの設定などをについて、この後に補足していきます。

#### 通知するメッセージの本文（injectノードの設定）
通知するメッセージの本文は、[過去の記事](https://qiita.com/youtoy/items/ad4651b6438040a353f6)と同様に injectノードで設定しました。

とてもシンプルな内容なので、ここではノードの設定画面・設定項目の内容のそれぞれの掲載のみ行います。
![通知するメッセージの本文（injectノードの設定）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/64daefa7-3b43-996c-f564-56804d25a7db.png)

- 設定項目と設定値
   - `msg.payload.message` : `通知のテスト`

#### LINE の Sticker送信の設定（templateノード）
次に、LINE通知に含める Sticker の設定です。これは、過去の記事では changeノードを使っていましたが、今回は templateノードを使います。

まず、templateノードの設定は以下の通りです。Sticker送信に関する設定値は、[過去の記事](https://qiita.com/youtoy/items/ad4651b6438040a353f6)と同じにしています。
![LINE の Sticker送信の設定（templateノード）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3a1ee12b-9b67-5348-3993-bbdc987e31c7.png)

templateノードの設定で、デフォルトから変更している部分は「テンプレート」の内容と「出力形式」で、設定値などは以下のとおりです。

__出力形式__ : `JSON`

__テンプレートの内容: ↓以下のとおり__

```json
{
    "message": "{{payload.message}}",
    "stickerPackageId": 8515,
    "stickerId": 16581242
}
```

上記の `{{payload.message}}` の部分は、injectノードで設定していたテキストを示しています。これで、通知用の本文と Sticker送信用の設定が、msg.payload にセットされます。

#### LINE Notify のトークンなどの設定（http requestノード）
最後に、http requestノードの設定について記載します。

[過去の記事](https://qiita.com/youtoy/items/ad4651b6438040a353f6)との差分は、Node-RED 3.0 の新機能により、「ヘッダに指定する以下の値が http requestノード内で設定できるようになった」ことです。

- リクエストの HTTPヘッダの設定項目
   - Authorization
   - Content-Type

ノードの設定画面と、設定値（デフォルトから変更した部分）は以下の通りです。
![LINE Notify のトークンなどの設定（http requestノード）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6b20cf09-e40e-4f8c-64c5-bc4b7d7af0f7.png)

- 設定項目と設定値
   - メソッド： `POST`
   - URL： `https://notify-api.line.me/api/notify`
   - ヘッダ
      - Content-Type： `application/x-www-form-urlencoded`
      - Authorization： `Bearer 【アクセストークン】`

※ 上記で、簡単のためアクセストークンを設定値に直接記載していますが、本来はアクセストークンは環境変数経由で取得する形が良いです

### 実際に通知を行ってみる
上記のフローの作成ができたら、あとはフローを保存し、injectノードのボタン押下して処理を実行してみましょう。

以下は、自分が実際にフローを動作させてみた結果です。LINEアプリに、Sticker がついた通知が行われたのを確認できました。
![動作確認の結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d58e5df0-3f19-812a-7454-ca15d15e72fc.jpeg)

## おわりに
今回、直近では別件で使った templateノードと、その話の関係で知った Node-RED 3.0 の新機能の 1つを活用し、LINE Notify を利用した LINEアプリへの Sticker付の通知を行いました。

過去の記事では changeノードで実現していた部分を http requestノード内の設定におさめられた部分は、内容がスッキリしたように思います。

しかし templateノードを用いた部分は、以前の changeノードを用いたものと、あまり差は感じられないというのが正直なところです。ただし、例えば通知用のテキストを何か加工するような処理・通知用のテキストに msg内に含まれる別の値を組み込むような処理を用いる場合など、もう少し複雑な処理を行うとした場合には今回よりも差が出るかもしれないとも思います。

## 余談
### LINE Notify などを扱うためのノード
今回の記事では利用していないですが、LINE Notify を Node-RED で扱う時に活用できるノードがあるので、紹介をしておきます。

●node-red-contrib-line-messaging-api (node) - Node-RED
　https://flows.nodered.org/node/node-red-contrib-line-messaging-api

このノードは、LINE Bot用のサーバー処理を Node-RED で行うこともでき、便利なノードです。自分も、過去にこのノードを使ってみたり、以下の記事を書いたことなどがあります。

●LINE Messagin API を利用できる Node-RED のノードの新機能（Bot の返信で画像を利用）を enebular 上で試す - Qiita
　https://qiita.com/youtoy/items/287a0782fdd185fc2004

### LINE Notify について
LINE Notify を使うと、スマホへの通知を手軽に扱えるため、過去の試作でいろいろ使ったり記事を書いたりしています。その過去に書いた記事の一部を、以下に抜粋して紹介してみます。

- LINE Notify に関して書いた記事の抜粋
   - [Zoom Webhook との組み合わせ](https://qiita.com/youtoy/items/8d2aa5257c0f4e9e3cc7)
   - [iPhone の Siri との組み合わせ](https://qiita.com/youtoy/items/4534daf4d44f330ed1ab)
   - [Azure IoT Hub との組み合わせ](https://qiita.com/youtoy/items/b907e93767ce2e9239de)
   - [Azure Functions との組み合わせ](https://qiita.com/youtoy/items/1f4dcd6dca2ea3a2fd97)
   - [ビジュアルプログラミング環境「MIT App Inventor」で開発した Android・iPhone アプリとの組み合わせ](https://qiita.com/youtoy/items/210661fa9641800a98a8)
   - [通信機能付きのデバイス「M5Stack」とビジュアルプログラミング環境「UIFlow」との組み合わせ](https://qiita.com/youtoy/items/76586479c2d4c5893c5b)

よろしければ、ご覧ください。