Node-RED で functionノードや専用ノードを使わず LINE Notify を利用する（changeノードを利用、Sticker送信も試す）

Node-RED で LINE Notify を利用する話ですが、よく見かける functionノードや専用ノードを使った方法ではなく、changeノードを利用したやり方の話です。

## LINE Notify を使う
LINE Notify は、LINEアプリにお手軽に通知を送ることができる仕組みです。この仕組みを使うためには、アクセストークンの発行という手順をふむ必要があります。

### LINE Notify のアクセストークンを取得する
以下の記事などを参考にして、LINE Notify のアクセストークンを取得してください。

- [【LINE】Notify アクセストークンを発行する方法](https://algorithm.joho.info/windows10/line-notify-access-token/)
- [【2021年】はじめてのLINE Notify、IoTデバイスから通知を送ってみる with obniz - Qiita](https://qiita.com/mochan_tk/items/e1f390cc88046f92eec6)

### curl を用いた LINE Notify の動作確認
先ほど取得したアクセストークンと curl を使って、LINE Notify を試してみます（説明などは以下の記事を参照ください。）。

●コマンドラインから LINE にメッセージを送れる LINE Notify
　https://engineering.linecorp.com/ja/blog/using-line-notify-to-send-messages-to-line-from-the-command-line/

まずは、シンプルなメッセージの送信を行います。以下を実行してメッセージが送られることを確認してください。

```bash
curl -X POST -H "Authorization: Bearer 【アクセストークン】" -F "message=メッセージのテスト" https://notify-api.line.me/api/notify
```

上記の「【アクセストークン】」の部分にはご自身のアクセストークンを設定いただき、上記の「メッセージのテスト」と書いている部分は、適宜変更して利用してみてください。

また、以下の公式の情報に書かれている「LINE Notify の Sticker送信」というものもあるので、こちらも使ってみます。

- [LINE NotifyにSticker送信機能と画像アップロード機能が追加されました - LINE ENGINEERING](https://engineering.linecorp.com/ja/blog/using-line-notify-to-send-stickers-and-upload-images/)
- [送信可能なスタンプリスト | LINE Developers](https://developers.line.biz/ja/docs/messaging-api/sticker-list/)

実行するコマンドはこのようになります。

```bash 
curl -X POST -H "Authorization: Bearer 【アクセストークン】" -F "message=メッセージのテスト" https://notify-api.line.me/api/notify -F 'stickerPackageId=8515' -F 'stickerId=16581242'
```

今度はメッセージと Sticker がセットで送信されました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINE Notify の Sticker送信機能、curl を使ってお試しを。 <a href="https://t.co/XcNE81b0fn">pic.twitter.com/XcNE81b0fn</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1512815365746995202?ref_src=twsrc%5Etfw">April 9, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Node-REDのフローを作って実行する
LINE Notify の動作確認がうまくいったところで、Node-RED　のフローの準備を進めていきます。

### 簡単なテキスト送信を試す
まずは、お試しの 1つ目で行ったテキスト送信をやってみます。
作成したフローは以下のとおりです。
![作成したフロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/081ec78a-d002-61fc-420c-9a0064ee7e0b.jpeg)

このフローでは、以下のノードを組み合わせています。

1. injectノード
1. changeノード
1. http requestノード
1. debugノード

この中で設定を変更したのは「injectノード」、「changeノード」と「http requestノード」の 3つで、具体的には、以下の内容が POST されるような設定にします。

- メソッド： 「POST」
- URL： 「https://notify-api.line.me/api/notify」
- リクエストの HTTPヘッダ
   - Authorization： 「Bearer 【アクセストークン】」
   - Content-Type： 「application/x-www-form-urlencoded」
- リクエストボディ
   - message： 「【送信するテキスト】」

#### http requestノードの設定
先に http requestノードの設定を行います。設定を変える部分は、以下の 2箇所です。
![http_requestノードの設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/00b53dd0-022a-3e35-7875-f0cd0cff1d75.jpeg)

あとは、この http requestノードでの POST時にヘッダ等が設定された状態にする方法を、ヘルプを見て確認します。headers と payload を用いれば良さそうです。
![http requestノードの入力について.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a4276974-8dec-8bb7-a351-e21d78fe4b17.jpeg)

#### changeノードの設定
上記の HTTPリクエストの HTTPヘッダを設定するため、changeノードを用います。
具体的な設定は、以下のとおりです。
![changeノードの設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f2254ada-6fd7-93cf-84df-b9d4d023b186.jpeg)

値の代入を 2つセットしており、そこで以下を設定しています。

- msg. 「headers.Content-Type」 に 文字列「application/x-www-form-urlencoded」を代入
- msg. 「headers.Authorization」 に 文字列「Bearer 【アクセストークン】」を代入

本当は、アクセストークンは環境変数経由で取得するような形にするべきかな、と思いますが、とりあえずの動作確認ということで上記でやってみます。

#### injectノードの設定
残る設定は、injectノードでリクエストボディを作成する部分です。
![injectノードの設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9a0554e5-7125-035d-43a2-0cc1daa44eda.jpeg)

上記の画像では、設定内容の一部が隠れていますが、以下を設定しています。

- msg. 「payload.message」 に 文字列「メッセージのテスト」を代入

#### 動作確認
あとは、フローをデプロイして実行してみましょう。自分の場合は、以下のメッセージが送信されたことを確認できました。
![Node-REDからLINE Notifyを利用](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5aca4ee0-ba61-133c-6756-2fd3dc5e27f1.jpeg)

### Node-RED で Sticker送信を使ってみる
curl によるお試しで用いた、LINE Notify での Sticker送信もやってみます。
上記のフローの中で、以下のように changeノードの設定を少し足してやります。
![Sticker送信を利用](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/85867b15-8ac4-d3f8-8e5c-7a37c7d2e4b8.jpeg)

- 追加した設定（値の代入を 2つ）
   - msg. 「payload.stickerPackageId」 に 文字列「8515」を代入
   - msg. 「payload.stickerId」 に 文字列「16581242」を代入

再度、フローをデプロイして実行すると、以下のメッセージが送られたことを確認できました。
![Sticker送信の利用.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9252761e-8705-dc4a-be1e-8ac18b0274e6.jpeg)