自架服務
rmyndharis/OpenWA avatar
rmyndharis/OpenWA

OpenWA:一個明確風險的自托管 WhatsApp API 閘道

OpenWA 是一個自託管 WhatsApp API 網關,適用於需要在自己的伺服器上傳送訊息和管理會話的應用程式。

14,181 個 Star3,300 個 ForkTypeScriptMIT

秒懂

它是什麼?
OpenWA 倉庫提供了一個可插拔、自托管的 WhatsApp 閘道,但其 README 對非官方連線和帳號封鎖風險的說明,與對功能集的介紹一樣清楚。
適合誰用?
OpenWA 是一個自托管閘道,明確說明了自身的非官方狀態和帳號風險取捨。它提供廣泛的功能、可插拔的設定模型,以及專注於非 root 執行和 socket 代理的安全架構。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫在最近一天內有新的提交。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

OpenWA|1|一個具有可插拔核心的自托管閘道

OpenWA 是一個用 TypeScript 編寫的免費、開源、自托管的 WhatsApp API 閘道。README 將其描述為一種讓開發者無需供應商鎖定即可執行自己的訊息基礎設施的方式。其可插拔架構允許你透過設定而不是應用程式碼變更來選擇資料庫引擎(SQLite 或 PostgreSQL)、備份和遷移儲存後端(本機磁碟或 S3)以及快取層(停用或 Redis)。發送或接收的媒體檔案會以內聯方式傳回給 API 和 webhook 消費者;README 說明它們不會自動持久化到儲存後端。倉庫元資料列出 12,423 個 star、2,817 個 fork 和 6 個未解決的問題。

在 rmyndharis/OpenWA 的專屬觀察是:這個專案使用 TypeScript,預設分支為 main,授權標示為 MIT。README 把能力放在自己的命令、模組與資料格式中,不能只用一句產品描述取代這些邊界。README 未說明的效能上限、部署規模與相依版本,也不能由倉庫星數或描述推導。

針對 rmyndharis/OpenWA 的第 1 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

這一節的判斷還要留意責任邊界:rmyndharis/OpenWA README 有明確寫出的內容才可作為事實,沒有寫出的整合方式、容量數字或可靠性保證應保留疑問。對採用者來說,關鍵是知道 OpenWA 的入口是否能在指定版本重現,以及失敗時哪一層留下可讀訊息。

OpenWA|2|非官方連線及其明確風險

README 直接說明了 OpenWA 不是 Meta 的官方產品。它透過逆向工程用戶端連線到 WhatsApp,具體來說是 whatsapp-web.js 和 Baileys,而不是透過 Meta 的 Cloud API。README 警告說,帳號被限制或封鎖的風險始終不為零,並建議使用一個你承受得起損失的專用號碼。兩種引擎有不同的取捨:whatsapp-web.js 驅動無頭 Chromium,看起來像真實的 WhatsApp Web 流量,封鎖風險較低,但每個會話大約消耗 300 到 500 MB 記憶體;Baileys 直接使用多裝置協定,更容易被識別,每個會話大約消耗 30 到 80 MB。README 還列出了安全發送指南:新號碼先預熱、不要向陌生人批次發送、限制發送速率、使用已選擇接收的收件人、為關鍵流程保留非 WhatsApp 的備用通道,並注意資料中心 IP 更容易被標記。它還指出,首次向全新聯絡人發送的訊息可能被 WhatsApp 的伺服器端策略丟棄,被限制的帳號無法由 OpenWA 恢復。對於受監管的環境,README 建議改用 Meta 的官方 Cloud API。

針對 rmyndharis/OpenWA 的第 2 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

OpenWA|3|功能表覆蓋了哪些內容

README 的功能列表分為核心、訊息、進階和基礎設施四組。核心功能包括 REST API、多會話管理、帶 HMAC 簽章和可選智慧預分發過濾器的 webhook、Web 儀表板、API 金鑰認證和 Swagger 文件。訊息功能涵蓋文字、媒體、表情回應、編輯、批次發送以及送達和已讀狀態。進階能力包括群組管理、個人資料更新、帶每會話自動拒接的來電事件、WhatsApp 頻道支援、標籤、每會話代理設定、可設定的速率限制、CIDR 白名單,以及針對 API 金鑰、會話、整合執行個體和基礎設施管理操作的稽核日誌。基礎設施功能包括 SQLite 和 PostgreSQL、可選的 Redis 快取、S3/MinIO 媒體目錄備份和遷移、Docker 部署、Kubernetes 就緒的健康檢查,以及後端之間的資料遷移。README 將所有這些都標記為已完成;它沒有提供基準數字或獨立驗證。

針對 rmyndharis/OpenWA 的第 3 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

OpenWA|4|兩種快速啟動路徑與生產設定

README 提供了兩種執行 OpenWA 的方式。推薦的 Docker 路徑是複製倉庫並執行 docker compose -f docker-compose.dev.yml up -d。這會啟動 API,儀表板綁定在同一連接埠上;儀表板位於 http://localhost:2785,API 位於 /api,Swagger 位於 /api/docs。對於本機開發,說明是 npm ci 後執行 npm run dev,儀表板由 Vite 開發伺服器在連接埠 2886 提供,API 在 2785。生產部署使用主 docker-compose.yml 和可選設定檔:postgres 新增 PostgreSQL,redis 新增 Redis,minio 新增 S3 相容儲存,full 啟用全部三個。README 指出官方 GHCR 映像支援 linux/amd64 和 linux/arm64 多架構,並且對於 TLS 或公開暴露,你應該將自己的反向代理放在前面。Podman 無根使用者被告知要啟動 podman socket 並設定 DOCKER_HOST。

針對 rmyndharis/OpenWA 的第 4 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

OpenWA|5|生產容器的安全措施

README 中有兩項安全措施值得注意。首先,生產堆疊不會將 Docker socket 直接暴露給應用程式容器。一個基於 tecnativa/docker-socket-proxy 的 docker-proxy 邊車是存取 Docker 守護程式的唯一閘道,並且只啟用了容器編排所需的操作。README 警告說,這是一個操作閘道,而不是細粒度的權限邊界:啟用了 POST 後,代理無法限定容器建立負載的範圍,因此被攻破的 API 容器可能等同於主機 root。其次,生產映像以非 root 使用者執行 Node.js 程式。啟動鏈使用 dumb-init 作為 PID 1,docker-entrypoint.sh 僅以 root 身分執行來 chown 命名磁碟區,然後由 gosu 切換到 openwa 使用者。README 說明命名磁碟區的擁有權會在每次啟動時自動修正。

針對 rmyndharis/OpenWA 的第 5 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

OpenWA|6|API 範例、webhook 與可選的 MCP 伺服器

README 包含用於建立會話、啟動並取得 QR code、發送文字訊息以及註冊 webhook 的 curl 範例。Webhook 註冊接受 URL、事件清單和用於 HMAC 驗證的選用密鑰。可以透過 conditions 物件新增智慧過濾器,使用 AND 邏輯,欄位包括 sender、recipient、body、type、mentions、fromMe、hasMedia 和 isGroup。沒有過濾器的 webhook 行為與之前相同。MCP 伺服器是獨立的,預設關閉。設定 MCP_ENABLED=true 會在現有伺服器上的 POST /mcp 掛載一個無狀態的 Streamable-HTTP 傳輸,暴露大約 39 個精選工具,用於會話、訊息、聯絡人、基本群組操作和 webhook 讀取。README 說每個工具呼叫都遵循與 REST 相同的 API 金鑰認證、角色和每會話範圍。它建議使用專用的、最小權限的、會話範圍的金鑰,警告帶有 IP 允許清單的金鑰會被拒絕,因為 MCP 上沒有真實的用戶端 IP,並且說 /mcp 的公開暴露應該放在認證代理後面;OAuth 2.1 尚未建置。

針對 rmyndharis/OpenWA 的第 6 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

OpenWA|7|技術棧、文件與授權

技術棧表列出了 Node.js 22 LTS、NestJS 11.x、TypeScript 6.x、TypeORM 和 Docker。WhatsApp 引擎透過 ENGINE_TYPE 變數選擇,預設是 whatsapp-web.js,替代方案是 Baileys。倉庫結構顯示 src 目錄包含 session、message、webhook、group、contact、auth、infra 和 health 模組,外加一個 React 儀表板和 docs 資料夾。docs 資料夾包括專案概述、需求規格、系統架構、安全設計、資料庫設計、API 規範、開發指南和遷移指南。該專案以 MIT 授權發布。授權文字授予使用、複製、修改、合併、發布、分發、再授權和出售副本的權利,並聲明軟體按現狀提供,不附帶任何形式的保證。README 沒有聲明超出授權和架構描述的任何支援承諾或安全保證。

針對 rmyndharis/OpenWA 的第 7 節,應從 README 列出的安裝或執行命令開始,保存命令使用的參數,再對照它宣稱的輸出、設定檔與錯誤訊息。若文章涉及 OpenWA 的版本行為,請以 GitHub Releases 的版本標記核對,並把本機環境、輸入資料與輸出結果分開記錄。這個核對只回答該功能是否按文件運作,不代表其他模組也有同樣結果。

編輯結論

OpenWA 是一個自托管閘道,明確說明了自身的非官方狀態和帳號風險取捨。它提供廣泛的功能、可插拔的設定模型,以及專注於非 root 執行和 socket 代理的安全架構。README 也清楚說明它不提供什麼:沒有官方 WhatsApp API、沒有針對受監管用途的合規批准、也不能保證號碼不會被限制。 對 rmyndharis/OpenWA 而言,適合由能控制 TypeScript 執行環境的開發者先從 README 指定入口開始;不適合把倉庫描述直接視為跨版本或跨平台保證。採用前,請先執行 rmyndharis/OpenWA README 寫出的最小命令,記下實際版本、輸入、輸出與錯誤,再按文章所述功能逐項比對。MIT 授權對修改、散布或託管方式的影響,也要放回你的交付模式中確認。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記