wacli:具備本機 SQLite 搜尋和傳送命令的終端機 WhatsApp 用戶端
WhatsApp CLI:同步、搜尋、發送。從原始碼建立 wacli 需要 Go 1.26.5 或更高版本並使用 go-sqlite3,因此需要 cgo + C 編譯器。
秒懂
- 它是什麼?
- 一個可編寫指令碼的 WhatsApp 用戶端,以已連結裝置方式配對,把訊息鏡射到本機 SQLite 儲存,並透過子命令提供搜尋、傳送和聊天管理。
- 適合誰用?
- README 清楚說明了 wacli 是什麼以及如何執行,但沒有對效能、安全或支援水準作出承諾。需要進一步驗證的地方包括 Docker 的具體用法、webhook 負載格式,以及不同帳戶上 history coverage 的實際行為。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 1 天前。
- 用什麼語言寫的?
- 主要是 Go(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
一個透過 WhatsApp Web 協定配對連結裝置的用戶端
wacli 是一個命令列 WhatsApp 用戶端,為需要從終端機工作的人和工具而設計。它以已連結裝置的方式配對,把收到的訊息鏡射到本機 SQLite 儲存中,並透過子命令提供搜尋、傳送和聊天管理。README 說明它透過 whatsmeow 函式庫使用 WhatsApp Web 協定,且與 WhatsApp 或 Meta 沒有隸屬關係。專案首頁是 wacli.sh,完整文件也放在那裡。倉庫中沒有提到獨立伺服器或託管元件;用戶端在本機執行。
透過 Homebrew、歸檔包或 Go 原始碼安裝
在 macOS 和 Linux 上,README 記載的安裝方式是 Homebrew:`brew install openclaw/tap/wacli`。預先編譯的壓縮檔被列為可從 GitHub Releases 取得,支援 macOS、Linux 和 Windows。要從原始碼建置,README 要求 Go 1.26.5 或更新版本、C 編譯器,並給出命令:`CGO_ENABLED=1 CGO_CFLAGS="-Wno-error=missing-braces" go install -tags sqlite_fts5 github.com/openclaw/wacli/cmd/wacli@latest`。它也指向安裝指南,涵蓋發行壓縮檔、Docker 和平台相關建置需求,但 README 本身沒有包含 Docker 步驟,所以確切的 Docker 設定仍是待驗證的問題。
配對、首次同步和傳送訊息
配對從 WhatsApp 的「已連結裝置」畫面掃描終端機 QR Code 開始,`auth` 命令在配對後執行首次同步。README 顯示的快速開始序列是 `wacli auth`,接著是 `wacli messages search "meeting"` 和 `wacli send text --to +15551234567 --message "hello"`。它說明傳送需要一個你有權聯絡的接收者,接收者可以是電話號碼、WhatsApp JID,或已同步的聯絡人、群組和聊天名稱。快速開始文件還涉及手機號碼配對、命名帳戶、媒體和診斷,但 README 沒有重述這些內容。
持續同步和基於本機索引的離線搜尋
執行 `wacli sync --follow` 會開始持續同步。工作階段和可搜尋訊息索引分別存放在兩個 SQLite 資料庫中,搜尋讀取本機索引,因此不依賴即時 WhatsApp 連線也能運作。README 給出的範例包括 `wacli messages search "invoice" --has-media` 和 `wacli --json messages list --limit 20`。它還提醒 WhatsApp Web 只會盡力提供歷史訊息,並建議在向主要手機請求更早訊息前,先用 `history coverage` 檢查本機已經有哪些資料。
指令碼輸出、唯讀模式和鎖行為
預設輸出是人類可讀的表格。一次性命令可以使用 `--json` 取得 JSON,長時間執行的命令可以用 `--events` 取得 NDJSON 生命週期事件。進度和錯誤都寫到 stderr。整合方可以傳入 `--read-only` 或設定 `WACLI_READONLY=1`,以避免修改 WhatsApp 或本機儲存。寫入命令會取得每個儲存的鎖;當 `sync --follow` 持有該鎖時,受支援的傳送命令會委派給正在執行的同步程序。README 指向整合文件以了解 webhook 和唯讀 SQLite 存取,但沒有列出 webhook 的負載格式,這仍然是一個待驗證的問題。
命令分組和儲存設定
命令按領域分組:`auth` 和 `accounts` 負責配對和隔離儲存;`sync` 和 `history` 負責鏡射和請求歷史;`messages` 和 `calls` 負責本機記錄;`send` 和 `media` 負責傳送和下載;`contacts`、`chats`、`groups` 和 `channels` 負責聯絡人與聊天狀態;`profile` 和 `presence` 負責帳戶詳情;`store` 和 `doctor` 負責儲存檢查和診斷。預設儲存在 Linux 上是 `~/.local/state/wacli`,其他平台是 `~/.wacli`,可以用 `--store DIR` 或 `WACLI_STORE_DIR` 覆蓋。命名帳戶,如 `wacli accounts add work` 和 `wacli --account work sync --follow`,讓每個 WhatsApp 身分有獨立的工作階段、資料庫和鎖。
開發、致謝和授權
開發環境要求 Go 1.26.5、Node.js 24 或更新版本、pnpm、cgo 和 C 編譯器。README 給出的建置和測試序列是 `pnpm install --frozen-lockfile`、`pnpm build` 以及 `pnpm format:check && pnpm lint && pnpm test`。它把 whatsapp-cli 和作者 Vicente Reig 列為重要靈感來源,列出 @steipete 為建立者、@dinakars777 為目前維護者,並採用 MIT 授權,版權歸 Peter Steinberger。授權文本授予使用、複製、修改、合併、發布、散布、再授權和銷售副本的權利,同時包含標準的不提供擔保條款。README 沒有描述發布節奏、支援管道或生產就緒程度。
openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。openclaw/wacli 的使用判斷要落在 README 已寫出的介面。快照顯示最新標籤為 v0.17.1,預設分支是 main,授權識別為 MIT。這些資訊只能界定本文的來源範圍。實際操作時,應把 wacli 的命令列參數、輸入格式、輸出欄位與錯誤處理分開看待。若 README 指向 docs、scripts、設定檔或 Releases,應逐一對照其名稱,而不是把專案描述延伸成未經文件證實的能力。對 macOS、Windows、Linux 或瀏覽器等環境的支援,也只能採用來源明確列出的部分。這樣整理後,讀者可以知道哪個判斷來自 openclaw/wacli,哪個問題仍留在文件範圍之外。
編輯結論
README 清楚說明了 wacli 是什麼以及如何執行,但沒有對效能、安全或支援水準作出承諾。需要進一步驗證的地方包括 Docker 的具體用法、webhook 負載格式,以及不同帳戶上 history coverage 的實際行為。 針對 openclaw/wacli,先依 README 的具體入口檢查 v0.17.1、相關設定與輸出,再決定是否納入工作流程;若環境不符合文件列出的前提,這篇文章不把未說明的相容性視為保證。
社群筆記