ライブラリ「LINE Bot Notify」を使った LINE Bot への Push通知【LINEDC】

この記事は、「[LINEDC Advent Calendar 2024](https://qiita.com/advent-calendar/2024/linedc)」の 19日目の記事です。

## はじめに
この記事では、LINEDC Advent Calendar 2024 の 13日目の記事に登場した @miso_develop さん作のライブラリ「LINE Bot Notify」を使ってみます。

●LINE BotにサクッとPush通知するだけのライブラリ「LINE Bot Notify」 - Qiita
　https://qiita.com/miso_develop/items/b13bd0bbf8fc04912f64
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5204580f-3000-6a0e-f44b-5c048f3ea93f.png)

リポジトリは、以下になるようです。

●miso-develop/linebot-notify: A library for easily sending push notifications to LINE Bot
　https://github.com/miso-develop/linebot-notify

## 仕様などの確認
上記の記事に書かれたサンプルや仕様は、以下となっています。

### サンプル

```javascript
import { LineBotNotify } from "linebot-notify"

const channelAccessToken = "<Channel Access Token>"
const notify = new LineBotNotify({ channelAccessToken })

const main = async () => {
	const remainingQuota = await notify.push("LINE Bot Notify!")
	console.log(remainingQuota)
}
main()
```

### 仕様

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/08e9b03f-cfb2-8e65-d749-2845549305bf.png)

### こだわりポイント
このライブラリのこだわりポイントは以下になるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ead98225-fd05-7725-a4de-dd48c0365f53.png)

## サクッと試す
それでは実際に試します。

仕様について、「トークン発行までの手軽さを重要視し、チャネルアクセストークンを発行せずともチャネルIDとシークレットだけでも使えるようにしました」という話があります

これについて、今回はチャネルアクセストークンのほうを試してみました。
※ チャネルアクセストークンの発行までを個人的に試したかったため

:::note info
【追記】チャネルID とシークレットの組み合わせを使う方も試したので、記事に追記しています
:::

### LINE Messaging API を使うための下準備
詳細は省略しますが、LINE公式アカウントを作成したりして、Messaging API を利用できる環境を作ります。

●Messaging APIを始めよう | LINE Developers
　https://developers.line.biz/ja/docs/messaging-api/getting-started/#create-oa

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ed356200-d447-2c6a-3887-d1253802dbe2.png)

手順は ↓こちらも参照しました。

●LINE Notifyの代替方法として、LINE Messaging APIを利用して、LINEグループに送る。 - Qiita
　https://qiita.com/MikH/items/d9876b6e50f7c8510d0b

#### 「Channel ID」「Channel secret」の発行
「LINE Official Account Manager」から、とりあえず「Channel ID」「Channel secret」を発行しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/717572aa-8497-4fd8-06a9-33a836c8ba6d.png)

この時点で、既に「LINE Bot Notify」を使った通知が行える情報はそろっているようです。

#### チャネルアクセストークンの発行
個人的に、チャネルアクセストークンの発行までを試して進めてみたかったので、その後、「LINE Developersコンソール」からチャネルアクセストークンも発行しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b2d405b1-a5f0-6174-b264-8298b0ba92b4.png)

#### LINEアプリに登録
この後に進む前に、プッシュ通知先の準備をしました。

QRコードを使って LINEアプリへの登録を行い、準備完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4091a940-7ae7-13c7-c5eb-92186a807378.png)

### 簡単なテスト
準備は整ったので、簡単なテストをやってみます。

Node.js で `npm i linebot-notify` などというコマンドで、パッケージを準備します。

コードは、上で掲載していたサンプルを用います。その中の「`<Channel Access Token>`」の部分は、先ほど自分で準備したチャネルアクセストークンに置きかえます（環境変数を使うほうが良いところですが、今回は環境変数は使わず）。

以下、再掲です。
import が使われていますが、それに簡易に対応するためにファイルの拡張子を mjs にしました（もちろん、他の対応方法でも可）。

```javascript
import { LineBotNotify } from "linebot-notify"

const channelAccessToken = "<Channel Access Token>"
const notify = new LineBotNotify({ channelAccessToken })

const main = async () => {
	const remainingQuota = await notify.push("LINE Bot Notify!")
	console.log(remainingQuota)
}
main()
```

そして上記を実行した結果、LINEアプリへプッシュでメッセージが送られたのが確認できました。さらに、プッシュするメッセージを書きかえて、2回目の送信もやってみました。

以下は、2回のプッシュを行った後の LINEアプリの画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/51f5f20b-2757-15ff-a1b1-cfd69e273597.png)

2回分のメッセージが届いたのが確認できました。

#### 【追記】チャネルID とシークレットの組み合わせも試す
こだわりに書かれていた「チャネルID とシークレットの組み合わせ」のほうも、試してみたので追記します。

使い方は GitHub のリポジトリに書かれている以下となるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/eaf58185-7737-316e-4018-bf6c7ffb0a35.png)

先ほどのコードの以下の部分を書きかえます。

```javascript
const channelAccessToken = "<Channel Access Token>"
const notify = new LineBotNotify({ channelAccessToken })
```

書き換え後は以下です。
「`<Channel ID>`」と「`<Channel secret>`」は、ご自身のものに置きかえてください。

```javascript
const channelId = "<Channel ID>";
const channelSecret = "<Channel secret>";
const notify = new LineBotNotify({ channelId, channelSecret });
```

:::note info
※「オブジェクトリテラルのプロパティ名省略記法」が使われているので、上記の `{ channelId, channelSecret }` の ID・シークレットを格納する変数は、スペルを同じにしてください

 ⇒ `{ channelId, channelSecret }` が `{ channelId: channelId, channelSecret: channelSecret }` の意味となる省略記法
:::

あと、送るテキストを「"Channel ID・Channel secretでプッシュ！"」という内容にして実行してみました。そうすると、以下のように通知が行われたのが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5a73ba5a-c4cd-555d-69d3-3e4551ac2025.png)

## おわりに
今回、「LINE Bot Notify」を使うことで、簡単にプッシュ通知を行うことができました。