【2021年】はじめてのLINE Notify、IoTデバイスから通知を送ってみる with obniz

こんにちは、もっちゃんと申します。

LINEのAPIといえばMessaging API(LINE Botを作る時に使う)のイメージが強いですが、LINEを活用した通知の機能を導入するにあたってシンプルな仕組みのLINE Notifyというプロダクトがあります。
そこで今回はこのLINE Notifyがどういうもので、どう使うのかを改めて見ていこうと思います。

## LINE Notifyとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/a00756f8-f4d4-ac92-fab1-e15a7624f27a.png)

>Webサービス、アプリケーション、IoTデバイスなどから、LINEが提供する公式アカウント"LINE Notify"に通知を届けます。
複数のサービスと連携でき、グループでも通知を受信することが可能です。

https://notify-bot.line.me

ちなみに、テキスト以外のメッセージを送ることも可能です。現在対応しているメッセージの形式は下記です。

<details><summary>対応しているメッセージ形式をAPIリファレンスから抜粋</summary><div>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/0ee2904c-1990-3b7e-3676-3d42dead16df.png)

</div></details>

* テキスト
* 画像
* ステッカー



また、下記のサービスと連携していることを公式サイトで謳っています。

* [GitHub](https://notify-bot.line.me/github/repos/select)
* [IFTTT](https://ifttt.com/line)
* [Mackerel](https://mackerel.io/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/f22d9b3f-906e-897a-6e7c-81fc4e657898.png)

## LINE Notifyの仕様

LINE Notifyは使い方が非常にシンプルになっています。OAuth2に準拠する形で認可してアクセストークンを取得し、HTTPSのNotify APIを実行して通知を行う流れです。
LINE Notifyの管理画面で、LINE Notifyと連携させたい自身の[サービスの登録](https://notify-bot.line.me/my/services/)を行い、OAuth2の認可の手順を実装し、NotifyのAPIにアクセストークンを渡して通知を実行します。

* https://linedevday.linecorp.com/jp/2016/#A-2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/7c384da4-585e-049d-e114-78ceb034e8b9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/d926c525-e529-07a5-6b0a-1b0f792979f9.png)


しかし、OAuth2の認可の手順を実装するのも面倒だという開発者のために、LINE Notifyではさらに`パーソナルアクセストークン`を発行する機能まで管理画面に設けています。
これでより簡単にLINE Notifyを使えるので、下記以降で使い方を見ていきましょう！


## LINE Notifyの使い方

### STEP1: LINE Notify公式アカウントと友達になる

まずは公式サイトに記載されているQR Codeをスマホで読んでLINE Notifyの公式アカウントとお友達になります。（大前提としてLINEアプリはインストールしておいてください）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/d73d4bad-56e5-41b9-4f39-38727a9297ce.png)

### STEP2: 管理画面からパーソナルアクセストークンを取得する

マイページからアクセストークンを発行するボタンがあるのでポチッと押して、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/3dd906a4-9b41-6ef3-e63e-cbed82ca1b3e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/0ef221ca-dc33-acca-8a19-fcfd4297ff42.png)

すると下記のようにトークンを発行するのに必要な情報入力などが求められるので、案内通りに進めます。（ちなみに通知先にグループも選べます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/b0b07c1e-e726-7487-d055-36bf5e3f2720.png)

最後にパーソナルアクセストークンが表示されるので忘れずにメモしておきましょう。（ここでトークンをメモし忘れると二度と表示されません、忘れた場合はトークンを新規で発行しなおしですね）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/f48b0776-8b6f-e969-1943-9afe2c97dafd.png)

### STEP3: Notify APIを実行する

アクセストークンが手に入ったのでさっそく通知を試してみましょう。
[公式ドキュメント](https://notify-bot.line.me/doc/ja/)に記載されているサンプルのコマンドを実行します。

**サンプル**

```shell
## 下記<access_token>の部分を先ほど取得したパーソナルアクセストークンに置き換えます
$ curl -X POST -H 'Authorization: Bearer <access_token>' -F 'message=foobar' \
https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}

```

シェルを実行するだけで簡単に通知が実現できました❗️

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/7c9cfc43-a769-255b-5d78-6a5637b01a78.png)

## obnizでもやってみた

とりあえずobnizの左上のボタンを押したら、通知が飛ぶようにしてみます！(obnizの詳細な使い方については[公式サイト](https://blog.obniz.com/news/japanese-hands-on1-2018-8-22.html)などをご覧ください！）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/22b1b7e8-8025-9e94-5706-b6dc7f5e2221.png)


コードは下記です。(そんなに良いコードでは無いので参考まで！)

<details><summary>ココを展開するとコードが見れます</summary><div>

* app.js

```js
const Obniz = require("obniz");
const request = require('request');

const LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify";
const TOKEN = <access_token>;

const OBNIZ_ID = <obniz ID>

const MESSAGE = "obnizの左上ボタンが押されたやで！";

const HEADERS = {
  "Content-Type": "application/x-www-form-urlencoded",
  "Authorization": "Bearer " + TOKEN
};

const OPTIONS = {
    url: LINE_NOTIFY_URL,
    method: "POST",
    headers: HEADERS,
    json: true,
    form: {
      message: MESSAGE,
      stickerPackageId: 11537,
      stickerId: 52002735
    }
  }

const obniz = new Obniz(OBNIZ_ID);
obniz.onconnect = async function () {
    // called while online.
    obniz.onloop = async function() {
        // Javascript Example
        var state = await obniz.switch.getWait();
        if (state === "push") {
            console.log("pressed");
            await request(OPTIONS, async(error, response, body) => {
                console.log(body);
                if(error){
                  console.log(error);
                }
            });
        }
    }
}
```

* package.json

```json
{
  "name": "my-obniz",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "obniz": "^3.17.0",
    "request": "^2.88.2"
  }
}

```

</div></details>

あとはnodeを起動して、obnizの左上ボタンを押してみます！...
(ちなみにコード書いたりnode実行したりを全て[GitHub Codespaces](https://github.com/features/codespaces)で行っています！nodeもデフォルトで入ってるし色々楽すぎますw）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/65e75c96-e321-d70e-abe8-70f031213923.png)

**ｷﾀ━━━(ﾟ∀ﾟ)━━━!!**🎉🎉🎉

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/b9df373f-486f-724e-09d2-375d6dfd71d1.png)


## まとめ

LINE Notifyがめちゃくちゃ簡単に使えることがお分かりいただけたと思います。
また、obnizもドキュメントや開発者用の管理画面など充実しており、IoTでの開発をとっても楽にしてくれますね！

皆さまも是非１度ためしてみてください〜

## 参考

* https://notify-bot.line.me/doc/ja/
* https://notify-bot.line.me/
* https://blog.obniz.com/make/notify-line-mail-arrives
* https://obniz.com/ja/doc/reference/common/switch