世界を動かす技術を、日本語で。

Wacli – WhatsApp CLI

概要

wacli は、 whatsmeow ベースのWhatsApp CLIツール。 ローカルでの メッセージ履歴同期高速検索送信 に特化。 連絡先・グループ管理 やメディア対応も可能。 公式WhatsApp非公認の サードパーティ製 CLI。 Homebrew または ローカルビルド で導入可能。

wacli — WhatsApp CLIの概要

  • whatsmeow を基盤とした WhatsApp用CLIツール
  • ローカルでのメッセージ履歴同期継続キャプチャ 機能
  • オフラインでも高速な全文検索
  • メッセージ送信 (テキスト・ファイル・キャプション付き対応)
  • 連絡先・グループ管理機能 (参加者管理やグループ名変更など)
  • WhatsApp Webプロトコル を利用、 公式とは無関係
  • Homebrew または Goビルド で簡単インストール

主な機能・特徴

  • 認証 :QRコード表示によるインタラクティブ認証
  • 同期 :初回同期後は非インタラクティブで自動同期
  • 検索 :メッセージ、リアクション、リプライ、メディア種別も表示対応
  • 送信 :テキスト・ファイル・ファイル名指定・キャプション対応
  • グループ :リスト表示・名称変更・参加者管理
  • ストレージ :デフォルトは~/.wacli、オプションで変更可能
  • 環境変数 でデバイスラベルやプラットフォーム指定可能

インストール方法

  • Homebrewでインストール
    • brew install steipete/tap/wacli
  • ローカルビルド
    • go build -tags sqlite_fts5 -o ./dist/wacli ./cmd/wacli

クイックスタート

  • 認証と初期同期
    • pnpm wacli auth
  • 継続同期(認証済み後)
    • pnpm wacli sync --follow
  • 診断コマンド
    • pnpm wacli doctor
  • メッセージ検索
    • pnpm wacli messages search "meeting"
  • 過去メッセージのバックフィル
    • pnpm wacli history backfill --chat 1234567890@s.whatsapp.net --requests 10 --count 50
  • メディアダウンロード
    • ./wacli media download --chat 1234567890@s.whatsapp.net --id <message-id>
  • メッセージ送信
    • pnpm wacli send text --to 1234567890 --message "hello"
  • ファイル送信・ファイル名指定
    • ./wacli send file --to 1234567890 --file /tmp/abc123 --filename report.pdf
  • グループ一覧・名称変更
    • pnpm wacli groups list
    • pnpm wacli groups rename --jid 123456789@g.us --name "New name"

利用上の注意点

  • バックフィル はベストエフォート
    • WhatsApp側の仕様で全履歴取得不可の場合あり
    • プライマリデバイス(スマホ)オンライン必須
    • 1チャットごとにリクエスト
  • 出力形式
    • デフォルトは人間可読、--jsonで機械可読に切替可能

参考・クレジット

  • whatsapp-cli (Vicente Reig氏)から着想・学習
  • 詳細設計はdocs/spec.md参照
  • ライセンス :プロジェクト内LICENSE参照

便利なスクリプト例:全チャットのバックフィル

  • ローカルDB内の全チャットをループ処理
    • pnpm -s wacli -- --json chats list --limit 100000 \
    • | jq -r '.[].JID' \
    • | while read -r jid; do pnpm -s wacli -- history backfill --chat "$jid" --requests 3 --count 50; done

環境変数設定例

  • WACLI_DEVICE_LABEL :リンクデバイスのラベル指定
  • WACLI_DEVICE_PLATFORM :デバイスプラットフォーム指定(未設定時はCHROME)

まとめ

  • wacli はWhatsAppをCLIで効率的に操作したいユーザー向け
  • 履歴同期・検索・送信・管理 がコマンドラインで完結
  • 非公式ツール のため、利用時は自己責任

Hackerたちの意見

これは本当に統合が必要なポイントだね。ピーターがまだツールを出してるのを見るのはクールだ。メタがテレグラムみたいに協力しないのは残念だな。彼らはさらに厳しくするか、もしくはWhatsAppが今後数年でAIシステムの一般的なコントロールプレーンになるって気づいてくれるといいんだけど。後者の方になることを願おう。WhatsMeowはBaileysと比べてどうなの?

WhatsMeowは安定してるけど、Baileysはメンテナンスに問題があるね。

カスタムクライアントを使ってる人を見つけたら、禁止されるんじゃないの?その件について何か読んだ気がする。

whatsmeowはBeeperのブリッジアーキテクト、Tulir Asokanによって作られ、維持されています。多くのBeeperユーザーが毎日問題なく使っています。これが私たちのWhatsAppブリッジの中心です: https://github.com/mautrix/whatsapp Baileysも素晴らしいライブラリで、大きなコミュニティがあります。その主なメンテイナーの一人も、私たちのブリッジ/whatsmeowを手伝ってくれています。私たちの古いアプリ、TextsのWhatsApp統合はこれで作られました: https://github.com/textshq/platform-whatsapp 私たちが積極的に関わっていて、完璧に動作させるためのインセンティブがあるので、Baileysよりもwhatsmeowをお勧めします。スケールでの問題を検出するためのデータポイントもたくさんありますしね。

彼らの厳しい管理が、WhatsAppをスパムのない環境にしているのです。自由な連邦プロトコルを持ちながらスパムがないというのは無理です。APIの洪水ゲートを開けると、すぐにナイジェリアの王子のエージェントが現れるでしょう。

俺はただテレグラムを使ってる。昨日、ボットを設定したんだけど、ボットファーザーを使えば簡単だし、アプリも設定したよ(クロードが作ったけど、ちょっといじらなきゃいけなかった)。これはPagerDutyみたいに動くけど、ダウンタイムやエラーをクラウドフレアワーカーを使ってプッシュするんだ(Graphanaから)ウェブフック経由で「全画面、DNDをバイパス、アラート、音楽大音量で、これだよ: https://www.youtube.com/watch?v=H0IQBWWabuU」と名付けたアプリ「サイレン」。プロダクション環境の重要なアラートを見逃さないようにするのは簡単じゃないけど、これが一銭もかからないのがいいところ。テレグラムのグループアラートは、俺のチームメンバー(小さなチームで3人)からボットを通じて来る。サイレンは俺専用で、10個のマイクロサービスを持つバックエンドを担当してるから、Graphana、アロイ、ロキを使った集中ログ、メトリクスにはPrometheusを使ってる。これがうまく機能してるから、問題が悪化する前に修正できて生活が楽になるよ。

テレグラムがE2EEをやってないのは本当に残念だ。そうじゃなければ、間違いなく最高のメッセンジャーなのに :(

これに賛成です。彼らのAPIはとても使いやすく、他のメッセンジャープラットフォームよりも自動化に優れています。採用率も良いですし、プライバシーを考慮すればSignalが本当の勝者です。

私はWhatsAppが好きで使っているわけじゃなく、単に私の国の連絡先が全員そこにいるから使っています。ここではSMSよりも公式に使われています。私の場合、選択肢はありません :/

でも気をつけてね - Telegramはかなり危険だよ。例えば、たった2日前に彼らのバックエンドが、アメリカン・エキスプレスの紹介リンクをロシアの人たちのカスタム紹介コードに置き換えてた(だから、友達に紹介リンクを送ったら、チャット履歴には別の紹介リンクが表示された)。彼らのセキュリティチームは「大丈夫」って言ってるけど、無駄な情報のために使うならともかく、他のものを使った方がいいよ。

「私はただTelegramを使ってる。」 それで、どうやって話したい人全員にTelegramを使わせるの?

「Telegramはボットに最適」って意見に賛成だね。これがOpenClawユーザーが使う理由だよ。しばらく前にOpenClawの使用をやめたけど、OpenClawで使ってた基本的な自動化をコード化したよ。Telegramと連携させるのは簡単だった。チャットにはTelegramを使ってない。実際、人とIMツールを使うのはなるべく避けてる。 ;-)

これがどれだけ安全かについて触れてほしいな。数年前、サードパーティのクライアントでログインしただけで禁止されたことがあるから、メッセージを送ってもいなかったのに。WhatsAppが一部の人にとってどれだけ重要か、そして禁止がどれだけ永久的かを考えると、大きなリスクだよね。

ボット用には別のWhatsAppアカウントを使った方がいいよ。最近、友達とのグループチャットに別のWhatsAppアカウントを使ったんだけど、1週間後にそのアカウントが無効にされて、再度有効にする方法がなかった。

もしこれが本物のウェブブラウザを使ってなかったら、WhatsAppアカウントが停止される可能性が高いから気をつけて。大事なアカウントでは使わない方がいいよ、データを全部失うことになるから。実際、俺も新しいアカウントを作った後、公式のウェブクライアントを使っただけでWhatsAppアカウントが停止されたことがある(異議申し立てして復活したけど)。

今、WhatsAppにはたくさんのボットがいるのを見かけます。

OT#1ですが、投稿タイトルに「元の」著者の名前を入れる編集方針には賛成できません。OT#2: Goプロジェクトにpackage.jsonを置くのは、{Make,Just}fileの代わりとして一般的ですか?

(注意:私はhttps://wassist.appの創設者です - WhatsAppエージェントプラットフォーム)このツールを使ってWhatsAppを自動化する際は非常に注意してください。メッセージを送りすぎると、すぐにバンされる可能性があります。これはWhatsAppによって公式にサポートされているAPIではなく、バンされるリスクは比較的高いです。

Beeperで働いている者として言わせてもらうと、メッセージの自動化は個人用にだけ使って、誰かをスパムしたり、自分がアプリ内でやらないことには使わないでください。乱用せずに、人間の使用範囲内に収めていれば大丈夫です。

結果を知っておきたいんだけど - 禁止は永久なの?異議申し立てのプロセスはあるの?

このライブラリの開発中にどれだけの番号が燃やされたり禁止されたのか、ちょっと気になるな。

いいね!数日前にCodex、Docker Compose、Ansibleを使って自己ホストのMatrixサーバーを立ち上げたよ。今はめちゃくちゃ簡単にできるね。月3.99ユーロのHetznerのVMで動かしてる。数時間ごとにバックアップをバケットに取って、バックアップがちゃんとできてるか監視するためのスクリプトもいくつか用意してる。これやったのは、OpenClawのWhatsAppやSlackとの統合が不安定でちょっとイライラしてたから。最小限の手順で30分で立ち上げられたよ。WhatsAppはなんとか動くけど、自分とチャットしてる感じになっちゃって、OpenClawが自分の名前でメッセージを投稿するのは理想的じゃないね。WhatsAppで新しいユーザー(またはボットユーザー)を簡単に作るのは難しい。多分ボットAPIはあるんだろうけど、あんまり調べてない。OpenClawでSlackを動かすのは結局うまくいかなかった。数時間試したけど、SlackチームはこのAIの話に全然気を使ってないみたい。もし誰かがまだこの手のことに注目してるなら、内部で声を上げてみてほしい。とにかく、APIを使って生産的なことをするのがめちゃくちゃ難しい。権限管理のUIは複雑すぎてひどい。権限を追加すると、UIが15秒間フリーズして、自動でリロードされて、また動き出す。次の権限を追加する時も、何をやっても、いつも一つ忘れてる権限がある。愚痴終了 WhatsAppやSlackに比べて、MatrixはOpenClawやCodexと統合するのがめちゃくちゃ簡単。今、Slackを引退させようとしてる。エージェント駆動のチャットボットが至る所で使えるようになってきたから、ボット関連の煩わしさをなくしたいんだ。意図的にそれを妨げたり、通行料のように扱うプラットフォームには用はない。Matrixなら、手動でボットユーザーを作るかAPIを使えばいい。パスワードを設定して、アクセストークンを取得して、好きなことができる。API制限もないし、QRコードの面倒もない。権限の地獄(Slack)もなし。普通に動く。ドキュメントも充実してるし、エンドツーエンドの暗号化もある。必要なだけボットユーザーを作れるし、APIコールやユーザー数を気にする必要もない。すごく楽。もちろん他のOSSメッセージングプラットフォームもあるけど、どれがいいかはまだ強い意見はない。でも、管理やメッセージ送信ができるMatrix CLIが欲しいな。多分もうあるだろうけど、なければ自分で作るかも。Macliって名前がいいかもね。

WhatsAppの周りには、商品ブローカーやトレーダー向けにツールやサービスを提供する小さな産業があるよ。主にコンプライアンスや既存顧客への一括メッセージングのためにね。Metaはデスクトップアプリでの一括転送を制限して、業界はこれを回避するためにサードパーティツールに移行した。実際、誰もスパムを送ってるわけじゃなくて、みんな同意してるし、リスクも理解してる。ただ、たくさんの市場がWhatsAppネットワークに依存してて、コンプライアントなチャットソリューションがあっても、既存のネットワーク効果が現状を維持してる。WhatsAppの前は、Yahoo Messengerで市場が運営されてて、移行の理由は2016年にYahooがそれを閉鎖したから。もしMetaの誰かがこれを読んでるなら、あなたたちのマネージャーと話したことがあって、この市場に対しては全く興味がないみたい。市場のニーズを解決するために、無料でデザインを手伝うつもりだよ。

MetaはWhatsAppを次のSlackに変えることができるよ。チームコミュニケーションに使ってるビジネス(特に国際的なもの)がたくさんあるからね。Teamsよりずっといいと思う。彼らは小さな市場だと思ってるのかな?それとも、広告で企業をマネタイズするのは難しいってことかも。

これって利用規約違反になるのかな?