← 一覧に戻る

Telegram プラグイン 永続メッセージキュー 実装レポート

2026年5月3日 15:31 更新
MD から自動変換されたページです。内容について質問があれば右下の ? ボタンからどうぞ。

何が起きていたか

健人が Telegram で連投したメッセージのうち、中間が静かに消える問題があった。

何を直したか

プラグインに永続メッセージキューを追加し、以下の動作に変えた。

  1. メッセージを受信したら、まず ~/.claude/channels/telegram/queue.jsonl に 1 行書き込む (enqueue 行)
  2. Claude Code 本体に通知を送る (今までと同じ)
  3. 送信成功したら queue に delivered 行を追加で append
  4. セッション再起動時、delivered 行が付いていない enqueue 行を古い順に再送する
  5. 全部送り終えたら queue ファイルを compact (完了済みを削除して書き直し)

これで Claude Code 本体の coalesce が起きても、再起動 = busy 解除のタイミングで pending を押し流して全メッセージを秘書に届ける。

実装内容

追加ファイル

server.ts の変更

重要な副次効果

どう確認したか

単体テスト

$ bun test queue.test.ts
 12 pass
 0 fail
 21 expect() calls
Ran 12 tests across 1 files. [123.00ms]

カバーしたケース:

構文チェック

$ bun build ./server.ts --target=bun --outdir=/tmp/tg-buildcheck
  ./server.js  1066.67 KB
[27ms] bundle 244 modules

バンドル成功 = 型と import パスに問題なし。

未解決の残課題

反映手順 (秘書セッション再起動後に読むこと)

  1. 秘書セッションを /exit で終了するか、Telegram プラグインプロセス (PID ps aux | grep server.ts で確認) を kill する
  2. プラグインが再起動すると新 server.ts と queue.ts が読み込まれる
  3. 初回起動時は queue.jsonl が空なので replayPendingQueue は即 return (ログに何も出ない)
  4. メッセージを送って ~/.claude/channels/telegram/queue.jsonl に enqueue と delivered 行が追加されるか確認
  5. 連投テスト: 秘書を Bash で busy にしつつ 4 連投 → 最初は一部しか届かなくても、次回起動時に pending が replay される

関連ファイル

📝 質問モード — テキストを選択してね
✓ 質問を送信しました