1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node-REDのLINE Messaging APIノードのアップデート2025 既読処理など

Last updated at Posted at 2025-12-24

こんにちは、のびすけです。

年末恒例になってきましたがLINE Messaging APIノードのアップデートをしました。

最新ぽいあたりに対応したり、Node-RED Conでコメントもらったバグ対応など諸々です。

以下まとめています。

既読 - Mark As Readノード

CleanShot 2025-12-25 at 02.41.26.png

既読機能

少し前のLINE Messaging APIの機能追加で既読をつける機能が追加されました。

LINEから送られてくるメッセージオブジェクトにmarkAsReadTokenというものが付与されて送られてくるようになりました。

$ node app.js
listening on 3001
{
  type: 'message',
  message: {
    type: 'text',
    id: '593436378864812122',
    quoteToken: 'QzDbcIu5WeNySMCZ5bS1wI.....',
    markAsReadToken: 'Miz26Y4JPyHcrQEjZ4yBHDi-.....',
    text: 'ほげほげ'
  },
  webhookEventId: '01KD76EJ4DAMEF9XRH2GZHJHZY',
  deliveryContext: { isRedelivery: false },
  timestamp: 1766546949776,
  source: { type: 'user', userId: 'Ud267f1e29292354a587273f391e7a923' },
  replyToken: '925bf551c8674b8e9293ab8c1e331ad3',
  mode: 'active'
}

昔と比べるとquoteTokenやらmarkAsReadTokenやら送られてくる情報が増えましたね。

Node.jsのSDK側もv10.5.0で対応してました。

client.markMessagesAsReadByToken({
  markAsReadToken: event.message.markAsReadToken
})

ちなみに管理画面でチャットのところをONにしないと使えません。

CleanShot 2025-12-24 at 12.46.39.png

CleanShot 2025-12-24 at 12.46.49.png

ONになってないと以下のエラーがAPIで返ってきます。

CleanShot 2025-12-24 at 12.45.55.png

 body: '{"message":"Failed to mark messages as read. Please ensure that chat is enabled."}'

ノード対応

メソッドを呼び出すだけなので特殊なことはないですがエラーメッセージ出力もしておくようにしました。

{"message":"Failed to mark messages as read. Please ensure that chat is enabled."}

試しに別のトークンを送ってみるとしっかりエラーメッセージがデバッグパネルに表示されます。

CleanShot 2025-12-24 at 20.19.33.png

CleanShot 2025-12-24 at 20.25.03.png

この辺りイマイチノードによって対応状況が異なっている...

利用はこんな感じでリプライメッセージを送る前に既読を付けるイメージです。

CleanShot 2025-12-24 at 20.51.12.png

メソッド呼び出し的に以下のように逆にしても特にエラーは出なさそうでした。

await client.replyMessage(event.replyToken, {
    type: 'text',
    text: config.replyMessage || event.message.text
});

..省略..

const res = await client.markMessagesAsReadByToken({ markAsReadToken: markAsReadToken });

ただ、メッセージを読んでいない(既読をつけていない)のに返信をするのは基本的にはありえないと思うのでサンプル的にはmarkAsRead => Replyの流れとしています。

ローディングアニメーション - Loadingノード

ローディングアニメーションを表示するAPIが去年くらいに出ていて以前どこかのバージョンのノードで対応しました。

ただ、なぜかUserIDを指定しないと動かないバグがあり、報告も受けていたので改修です。

基本的には返信をするときに時間が掛かる処理をしているというときにアニメーションを表示させる使い方を想定してると思うので、メッセージオブジェクトが送られてくるリプライメッセージと同時に利用し、UserIDは特に指定しなくても使えるような形に修正です。

また、ローディングアニメーションを表示しているときに実際に処理もスリープさせる機能も追加しておきました。

CleanShot 2025-12-24 at 23.26.29.png

const { setTimeout: sleep } = require('node:timers/promises');

//省略
    
if (waitForCompletion) {
    await sleep(loadingSeconds * 1000); // 指定秒数待機させる
}

ただこれはDelayノードで指定した方が良い気もしたのでチェックして切り替えられるようにしています。

CleanShot 2025-12-24 at 23.28.30.png

                const res = await client.showLoadingAnimation({
                    chatId: chatId, //現状user idのみ
                    loadingSeconds: loadingSeconds,
                });
                if (waitForCompletion) {
                    await sleep(loadingSeconds * 1000); // 指定秒数待機させる
                }

                // レスポンスが {}(空のJSONオブジェクト)なら成功らしい
                if (res && Object.keys(res).length === 0) {
                    node.log('ローディングが成功したかも?: {} が返却されました');
                } else {
                    node.warn('ローディング処理失敗:', res);
                }

その他

外観やパッケージの細かい情報を整備したりしました。

結構やれてないところが多いですね。

締め

Node-REDでLINE Bot作るときには結構作りやすいと思うので機会があれば触ってみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?