WhatsApp 設置
Hermes 通過基於 Baileys 的內置橋接器連接 WhatsApp。該方式通過模擬 WhatsApp Web 會話實現——並非通過官方的 WhatsApp Business API。無需 Meta 開發者賬號或商業驗證。
WhatsApp 不官方支持除 Business API 之外的第三方機器人。使用第三方橋接器存在一定的賬號限制風險。為降低風險,請:
- 使用專用手機號碼作為機器人(不要使用你的個人號碼)
- 不要發送批量/垃圾消息——保持使用場景為對話式交流
- 不要自動向未主動發消息的人發送消息
WhatsApp 會定期更新其 Web 協議,這可能導致第三方橋接器暫時不兼容。發生這種情況時,Hermes 將更新橋接依賴。如果在 WhatsApp 更新後機器人無法工作,請拉取最新版 Hermes 並重新配對。
兩種模式
| 模式 | 工作方式 | 適用場景 |
|---|---|---|
| 獨立機器人號碼(推薦) | 為機器人專用一個手機號碼。用戶直接向該號碼發送消息。 | 清晰的用戶體驗、多用戶支持、更低的封禁風險 |
| 個人自聊模式 | 使用你自己的 WhatsApp。通過給自己發消息與 Agent 交互。 | 快速設置、單用戶、測試用途 |
前提條件
- Node.js v18+ 和 npm —— WhatsApp 橋接器以 Node.js 進程運行
- 一部安裝了 WhatsApp 的手機(用於掃描二維碼)
與舊版基於瀏覽器的橋接器不同,當前基於 Baileys 的橋接器 不需要本地 Chromium 或 Puppeteer 依賴棧。
第一步:運行設置嚮導
hermes whatsapp
嚮導將執行以下操作:
- 詢問你希望使用的模式(bot 或 self-chat)
- 如需,安裝橋接依賴
- 在終端中顯示一個 二維碼
- 等待你掃描
掃描二維碼的方法:
- 在手機上打開 WhatsApp
- 進入 設置 → 已連接的設備
- 點擊 連接設備
- 將攝像頭對準終端中的二維碼
配對成功後,嚮導會確認連接並退出。你的會話將自動保存。
如果二維碼顯示混亂,請確保你的終端寬度至少為 60 列,並支持 Unicode。你也可以嘗試使用其他終端模擬器。
第二步:獲取第二個手機號碼(機器人模式)
在機器人模式下,你需要一個尚未在 WhatsApp 上註冊的手機號碼。有三種選擇:
| 選項 | 成本 | 說明 |
|---|---|---|
| Google Voice | 免費 | 僅限美國地區。訪問 voice.google.com 獲取號碼。通過 Google Voice 應用接收短信完成 WhatsApp 驗證。 |
| 預付費 SIM 卡 | 一次性 5–15 美元 | 任意運營商。激活後,驗證 WhatsApp,之後 SIM 卡可存放於抽屜中。號碼必須保持活躍(每 90 天打一次電話)。 |
| VoIP 服務 | 免費–每月 5 美元 | TextNow、TextFree 等。部分 VoIP 號碼被 WhatsApp 屏蔽——若首個號碼無效,可嘗試其他號碼。 |
獲取號碼後:
- 在手機上安裝 WhatsApp(或使用雙卡版 WhatsApp Business 應用)
- 使用新號碼註冊 WhatsApp
- 運行
hermes whatsapp並從該 WhatsApp 賬號掃描二維碼
第三步:配置 Hermes
將以下內容添加到你的 ~/.hermes/.env 文件中:
# 必填
WHATSAPP_ENABLED=true
WHATSAPP_MODE=bot # “0”或“1”
# 訪問控制 — 從以下選項中選擇 ONE:
WHATSAPP_ALLOWED_USERS=15551234567 # 以逗號分隔的電話號碼(帶國家/地區代碼,無 +)
# WHATSAPP_ALLOWED_USERS=* # 或使用 * 允許所有人
# WHATSAPP_ALLOW_ALL_USERS=true # 或者設置此標誌(與 * 效果相同)
設置 WHATSAPP_ALLOWED_USERS=* 可允許 所有 發送者(等同於 WHATSAPP_ALLOW_ALL_USERS=true)。這與 Signal 群組允許列表 保持一致。若想使用配對流程,請移除這兩個變量,並依賴 私信配對系統。
可選的行為設置項,位於 ~/.hermes/config.yaml 中:
unauthorized_dm_behavior: pair
whatsapp:
unauthorized_dm_behavior: ignore
unauthorized_dm_behavior: pair是全局默認值。未知私信發送者將收到配對碼。whatsapp.unauthorized_dm_behavior: ignore會使 WhatsApp 對未經授權的私信保持靜默,對於私有號碼而言通常是更優選擇。
然後啟動網關:
hermes gateway # 前景
hermes gateway install # 安裝為用戶服務
sudo hermes gateway install --system # 僅限 Linux:啟動時系統服務
網關將自動使用已保存的會話啟動 WhatsApp 橋接器。
會話持久化
Baileys 橋接器將會話數據保存在 ~/.hermes/platforms/whatsapp/session 目錄下。這意味著:
- 會話在重啟後依然有效——你無需每次重啟都重新掃描二維碼
- 會話數據包含加密密鑰和設備憑證
- 切勿共享或提交此會話目錄——它將賦予對 WhatsApp 賬號的完全訪問權限
重新配對
如果會話中斷(手機重置、WhatsApp 更新、手動解除綁定),你將在網關日誌中看到連接錯誤。修復方法如下:
hermes whatsapp
這將生成一個新的二維碼。再次掃描後,會話將重新建立。網關會自動處理 臨時 斷開連接(網絡波動、手機短暫離線)的情況,具備重連邏輯。
語音消息
Hermes 支持 WhatsApp 的語音消息功能:
- 入站: 語音消息(
.oggopus 格式)將自動通過配置的語音轉文字(STT)服務進行轉錄:本地faster-whisper、Groq Whisper(需設置GROQ_API_KEY)或 OpenAI Whisper(需設置VOICE_TOOLS_OPENAI_KEY) - 出站: TTS 回覆將以 MP3 音頻文件附件形式發送
- 默認情況下,Agent 回覆會以 "⚕ Hermes Agent" 作為前綴。您可以在
config.yaml中自定義或禁用此前綴:
# ~/.hermes/config.yaml
whatsapp:
reply_prefix: "" # 空字符串禁用標題
# reply_prefix: "🤖 *My Bot*\n──────\n" # 自定義前綴(支持換行符 \n)
故障排除
| 問題 | 解決方案 |
|---|---|
| 二維碼無法掃描 | 確保終端寬度足夠(至少 60 列)。嘗試使用其他終端。確認您正在掃描正確的 WhatsApp 賬號(機器人號碼,而非個人賬號)。 |
| 二維碼過期 | 二維碼每約 20 秒刷新一次。如果超時,請重啟 hermes whatsapp。 |
| 會話無法持久化 | 檢查 ~/.hermes/platforms/whatsapp/session 是否存在且可寫。若容器化部署,請將其掛載為持久化卷。 |
| 意外登出 | WhatsApp 在長時間無活動後會解除設備綁定。請保持手機開機並連接網絡,如需可重新使用 hermes whatsapp 配對。 |
| 網關崩潰或陷入重連循環 | 重啟網關,更新 Hermes,並在會話因 WhatsApp 協議變更被無效化時重新配對。 |
| WhatsApp 更新後機器人停止工作 | 更新 Hermes 以獲取最新網橋版本,然後重新配對。 |
macOS:提示“未安裝 Node.js”但終端中 node 可用 | launchd 服務不會繼承您的 shell PATH。運行 hermes gateway install 以將當前 PATH 重新快照到 plist 文件中,然後運行 hermes gateway start。詳情請參見 網關服務文檔。 |
| 消息未被接收 | 確認 WHATSAPP_ALLOWED_USERS 包含發送者號碼(含國家代碼,不帶 + 或空格),或設置為 * 以允許所有人。在 .env 中設置 WHATSAPP_DEBUG=true 並重啟網關,可在 bridge.log 中查看原始消息事件。 |
| 機器人向陌生人回覆配對碼 | 若希望未授權的私信被靜默忽略,請在 ~/.hermes/config.yaml 中設置 whatsapp.unauthorized_dm_behavior: ignore。 |
安全性
上線前請配置訪問控制。通過設置 WHATSAPP_ALLOWED_USERS 並指定具體電話號碼(含國家代碼,不含 +),使用 * 允許所有人,或設置 WHATSAPP_ALLOW_ALL_USERS=true。若未設置以上任一選項,網關將拒絕所有入站消息,作為安全措施。
默認情況下,未授權的私信仍會收到配對碼回覆。若希望私有 WhatsApp 號碼對陌生人完全靜默,可設置:
whatsapp:
unauthorized_dm_behavior: ignore
~/.hermes/platforms/whatsapp/session目錄包含完整的會話憑據,請像保護密碼一樣保護它- 設置文件權限:
chmod 700 ~/.hermes/platforms/whatsapp/session - 使用專用電話號碼作為機器人,以隔離與個人賬號的風險
- 若懷疑憑證洩露,請在 WhatsApp 中解綁設備 → 設置 → 已鏈接設備
- 日誌中的電話號碼已部分脫敏,但仍需審查您的日誌保留策略