ClawdbotにLINEがなくて絶望した私が、自作Extensionで救われた話
この記事は、clawdbotにより作成され人間による確認を経て投稿させれています。
TL;DR
- Clawdbotは最高だが、デフォルトでLINEが使えないという致命的な弱点(?)があった
- なければ作る。それがエンジニアという生き物ではないか。
- BlueBubblesのソースコードを写経...いや「参考に」して爆速で実装。
- LINE Messaging APIの闇(署名検証)を乗り越え、無事双方向通信に成功。
はじめに
最強のAIエージェント、Clawdbot。
Telegram、Discord、Slack... 欧米の主要プラットフォームは完璧に網羅されている。
しかし、ここ日本において「LINE」がないというのは、もはや刀を持たずに戦場に赴くようなものではないだろうか。
「LINEでジョー(私のエージェント)と会話したい...」
その一心で、私は深夜のテンションと共にエディタを立ち上げたのである。
先に成果物を置いておく
「御託はいいからコードを見せろ」という方はこちら。
👉 GitHub: clawdbot-line-extension
1. LINE Developersという名の迷宮へ
まずは敵を知ることから。LINE Messaging APIを使うには、LINE Developersでのチャンネル作成が必須だ。
ここでは特に「チャンネルシークレット」と「アクセストークン」という2つの聖遺物を入手する必要がある。これらを忘れると、Clawdbotはただの「沈黙の機械」と化す。
2. 巨人の肩に乗る(BlueBubbles編)
一から実装するのは骨が折れる。そこで私は、iMessage連携を実現している「BlueBubbles」エクステンションの魂を覗き見た。
「なるほど、Webhookで受けて内部ディスパッチャーに流し込めばいいのか...!」
この気づきが、実装時間を大幅に短縮してくれた。先人の知恵には感謝しかない。
3. 実装の儀
コードはGitHubに投げたので、ここではClawdbotへの組み込み方を。
cd ~/.clawdbot/extensions
git clone https://github.com/ryuseisuda/clawdbot-line-extension line
そして、秘伝の書(.env または clawdbot.json)に取得したトークンを刻み込む。
4. Webhook検証という名の壁
一番の難所は、LINEからのリクエストが本物かどうかを判定する「署名検証」だ。
x-line-signature ヘッダーとチャンネルシークレットを使ってHMACを計算するのだが、これが1ビットでも違うと「Invalid signature」と冷たくあしらわれる。
数回のデバッグと、一抹の祈りを捧げた結果、コンソールに「OK」の文字が出た時の感動は、まさに「世界が開けた」瞬間であった。
5. ついに、繋がる
ngrokという名のトンネルを掘り、LINEコンソールにWebhook URLを登録。
スマホを手に取り、「おーい」と送ってみる。
数秒後。
「🌅 おはよう!今日の予定は...」
...キタ。
ついに、ジョーがLINEに降臨したのである。
まとめ:なせば成る
Clawdbotのエクステンションシステムは非常に柔軟だ。
registerChannel と registerHttpHandler を使いこなせば、もはや繋げないサービスなど存在しないのではないかという錯覚すら覚える。
「LINEがないなら作ればいいじゃない」
そんなマリー・アントワネット的発想が、豊かなAIライフへの近道だったというわけだ。
参考リンク
この記事は、LINEの通知で深夜に起こされるエンジニアの悲喜交々をお届けしました。