MuseにLINEを読ませるには
MuseにはLINEの連携機能がない
Museは個人的に使っているAIエージェントで、毎朝の予定確認などを任せています。
予定確認の情報源は
- Googleカレンダー
- Gmail
- Teams(学校の連絡)
- Moodle(課題の締切)
- Discord
と揃ってきたのですが、私的な予定が入っているLINEだけがどうしても繋げませんでした。
というのも、MuseにはLINE用のコネクタが用意されておらず、メッセージ連携で使えるのもWhatsAppだけだったりするんですよね。
そこで、非公式な方法を使ってLINEを読めるようにします。
今回はその方法を説明します。
コマンドを打つのはエージェントのほう
- どんな指示を投げればいいのか
- 補足(技術詳細)
の2つに分けて書きます。技術詳細は「エージェントが裏で何をしているのか知りたい人」向けです。読まなくても大丈夫です。
全部非公式な方法ですので、自己責任でお願いします。
どんな指示を投げればいいのか
1. コピペ用指示文
公式ルートが全部ダメだったので、非公式のCLIツールを使うことにしました。
https://github.com/kongesque/line-cli
非公式のCLIツール「line-cli」を使ってLINEに接続してください。導入とログインをお願いします。(https://github.com/kongesque/line-cli)
VMが置き換わっても、LINEのセッションが消えないようにしてください。セッションの保存先を、VMが置き換わっても残る場所にしてください。
ここからはエージェントが作業してくれます。
人間の出番はログインのときだけです。
- エージェントからログイン用QRコードの画像が送られてくるので、スマホのLINEで読み取る
- 読み取り後、認証番号(6桁)が伝えられるので、すぐにスマホへ入力する
認証番号の有効時間はかなり短いです。伝えられたら即入力するくらいでちょうどいいです。
QRコードも約5分で失効するので、スマホを手元に用意してから始めてもらうのがおすすめです。
2. (お好みで) 運用の指示を出す
最後に、使い方を決めて伝えます。
毎朝の予定確認に、LINEも含めてください。読み取り専用で確認するだけで、送信やリアクションはしないでください。
私の場合は、毎朝7時の「今日の予定」と、16時の「明日の予定」の確認にLINEも混ぜてもらっています。
※読んでも既読は付かない
CLIでメッセージを読んでも既読は付きません。
ドキュメントにも明記されていますし、ソースを確認しても、既読を送る処理 SendChatCheckedはライブラリ内にあるだけで、どのコマンドからも呼ばれていませんでした。
相手に「既読」が表示されることも、スマホ側の未読が消えることもありません。地味にありがたい仕様です。
指示まとめ
投げる指示はこれだけです。
非公式のCLIツール「line-cli」を使ってLINEに接続してください。導入とログインをお願いします。(https://github.com/kongesque/line-cli)
VMが置き換わっても、LINEのセッションが消えないようにしてください。セッションの保存先を、VMが置き換わっても残る場所にしてください。
補足(技術詳細)
ここからは、エージェントが裏で何をしていたのかの補足です。(ここからはMuse君に書いてもらった)
なぜChrome拡張機能がダメだったのか
Museが操作するブラウザはChromium系で、公式のChrome版LINEは入りませんでした。
- ウェブストアのボタンが「Chrome に追加」のまま変わらない(「Chrome に切り替えてください」という案内が出る)
- 拡張機能のページを直接開いても ERR_BLOCKED_BY_CLIENT でブロックされる
そもそもインストールの時点でできませんでした。
なぜVM内のChromeもダメだったのか
VMにGoogle Chrome本体を入れ、拡張機能のファイル(CRX)も公式の配布元から取得して検証まではできました。
が、Chromeからどのページも開けません。ログを調べると、VMの出口プロキシがChromeからの通信にだけ 403(policy_denied)を返していました。
curlやpythonからの通信は普通に通り、LINEのサーバーにも届きます。ChromeやLINEの問題ではなくVM側のポリシーの問題で、内側からは解除できませんでした。
line-cliについて
https://github.com/kongesque/line-cli
BeeperのLINE実装が元になった非公式CLIで、Chrome版LINEと同じ方式で接続します。Letter Sealing(E2EE)にも対応しています。
動作には gnome-keyring と libsecret-tools が必要でした。
主なコマンドはこのあたりです。
line login line auth status line chats --json --details line messages "会話名" --json --limit 20
ログインはQRコード方式で、端末に表示されたQRを画像化して送ってもらい、スマホで読み取りました。端末の幅が足りないとQRが表示できない、といった細かい詰まりどころもありました。
Chrome版LINEとは併用できない
Chrome方式のセッション枠は1つだけです。
line-cliでログインするとその枠を使うため、Chrome拡張機能版のLINEとは併用できません。私の場合は拡張機能版がどのみち使えなかったので実害なしでした。
セッションの仕組みと、消えないようにする方法
line-cliのセッションは次の2点セットでできています。
- 暗号化されたセッションファイル session.enc(保存先は XDG_CONFIG_HOME/line-cli/)
- その復号鍵(Secret Serviceに保存され、実体は XDG_DATA_HOME/keyrings/login.keyring)
初期状態ではこの2つがVMの置き換わりで消える場所に置かれていたため、セッションが失われました。
対策は、ラッパースクリプトで次の2つを設定し、保存先を永続領域に向けることです。
export XDG_CONFIG_HOME=/永続化したい場所/state/config export XDG_DATA_HOME=/永続化したい場所/state/data
この状態でログインし直すと、セッションが最初から残る場所に保存されます。ダミーのセッションで検証してから本番のログインをやり直しました。
定期バックアップ方式にしなかった理由は、アクセストークンの更新のたびにリフレッシュトークンが差し替わり、session.enc自体が書き換わるからです。古いコピーを戻すとかえって使えなくなる可能性があるので、「コピーする」のではなく「最初から残る場所に置く」ほうが安全でした。
それでも、LINE側からセッションを無効化された場合(別のChrome版LINEでログインするなど)だけは、どの方法でも再ログインが必要です。
おわりに
- MuseにLINEの公式連携はないので、方法は全部非公式
- 読むだけなら既読は付かない
お疲れさまでした!
















