waha

devlikeaproApache-2.0活跃维护

把 WhatsApp 封装成可一键配置的 HTTP REST API,内置 WEBJS、NOWEB、GOWS、WPP 多种引擎,方便接聊天机器人和自动化流程。

WAHA - WhatsApp HTTP API (REST API) that you can configure in a click! Multiple engines: WEBJS (browser based), NOWEB (websocket nodejs), GOWS (websocket go), WPP (browser)

2026.10.1发布于 2026-10-28 09:15 UTC7,792star +25 / 7 天1,890fork同步于 2026-11-10 11:32 UTC

怎么上手

由 README 提炼,执行前请确认
docker pull devlikeapro/waha
docker run -it --rm -p 3000:3000/tcp --name waha devlikeapro/waha
硬件要求按 README 说明

README 未说明硬件要求,只要求已安装 Docker

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管 WhatsApp HTTP API,用 REST 接口收发消息,几分钟内跑起来

把 WhatsApp 封装成可一键配置的 HTTP REST API,内置 WEBJS、NOWEB、GOWS、WPP 多种引擎,方便接聊天机器人和自动化流程。

核心能力

  • 用 REST 接口管理会话并发送文本消息
  • 支持多引擎:WEBJS、NOWEB、GOWS、WPP
  • 单个容器内可启动多个 WhatsApp 账号会话
  • 通过截图接口获取二维码并扫码登录
  • 内置 Swagger 文档和 Dashboard 页面

容易踩的坑

需要手机上的 WhatsApp 扫码登录才能开始发消息;chatId 要用不带 + 的国际号码加 @c.us 后缀;从源码开发需 node>=22 并额外安装 Bun、Rust nightly 和 wasm-pack

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本2026.10.1
  1. 2026.10.1最新正式版2026-10-28 · 2026-10-28 09:15 UTC

    🆕 New

    🧩 ChatWoot

    🛠️ Fixes

    • 2026.10.1 - GOWS - use FAILED on connection failures (ban, client outdated, etc) - #2318
    • 2026.10.1 - GOWS - swap link preview headers - #2322
    • 2026.10.1 - GOWS - fix setting status (about) - #2326
    • 2026.10.1 - GOWS - fix missing video preview (ffmpeg partial file) - #1942
    • 2026.10.1 - GOWS - fix GET /api/{session}/lids/{lid} returning own phone number for @lid - #2241, #2299
    • 2026.10.1 - GOWS - reduce noisy logs for retry receipts - #1942
    • 2026.10.1 - S3 - fix saving media with non-ASCII and double spaces in file name - URL-encoded filename - #2279 - #2308
    • 2026.10.1 - GOWS - fix sending non-disappearing messages to chats with disappearing messages enabled (@lid vs @c.us chats)
    • 2026.10.1 - GOWS - fix labels sync - #2290
    • 2026.10.1 - 🏷️ Labels - a bunch of small fixes
    • 2026.10.1 - WEBJS - fix updating and deleting 🏷️ Labels
    • 2026.10.1 - 🏷️ Labels - sort labels by id
    • 2026.10.1 - 🏷️ Labels - label name - max 100 lenght
    • 2026.10.1 - NOWEB - fix sending non-disappearing messages to chats with disappearing messages enabled
    • 2026.10.1 - NOWEB - fix app state sync - #2298, #2297 - #2304
    • 2026.10.1 - NOWEB - fix GET /api/{session}/lids/count returning 500 on PostgreSQL - #2306 - #2307
    • 2026.10.1 - NOWEB - fix missing @lid to phone number pairs the engine already knows - #2305
    • 2026.10.1 - 👥 Groups - fix setting empty group subject - #2294
    • 2026.10.1 - Validate event field in POST /api/{session}/events - #2303
    • 2026.10.1 - Redact x-api-key from websocket connection logs - #2301
    • 2026.10.1 - Reject non-string x-api-key values (arrays, objects) in header and query

    📊 Dashboard

    ⚙️ Updates

    • 2026.10.1 - Node.js - fix CVE-2026-111497 (Brotli decoder RCE) - #2324
    • 2026.10.1 - file-type - fix CVE-2026-31808 (media parser infinite loop on malformed ASF header) - [#23
  2. 2026.9.22026-10-02 · 2026-10-02 06:09 UTC
    查看更新说明

    🆕 New

    🛠️ Fixes

    • 2026.9.2 - NOWEB - fix delete channel message - #2038 - #2284
    • 2026.9.2 - NOWEB - fix edit media caption in channels
    • 2026.9.2 - NOWEB - fix update contact - #2285
    • 2026.9.2 - GOWS - fix update contact
    • 2026.9.2 - WEBJS - fix forward message - #2278
    • 2026.9.2 - WEBJS - fix get and revoke group invite code
    • 2026.9.2 - WEBJS - fix create group
    • 2026.9.2 - WEBJS - fix set profile name
    • 2026.9.2 - WEBJS - fix hiding “What’s new” modal on start - use the app’s cooldown days

    📊 Dashboard

    • 2026.9.2 - Dashboard - fix chat not refreshing on new messages (@lid vs @c.us chats)

    ⚙️ Updates

    • 2026.9.2 - WPP - up engine
    • 2026.9.2 - GOWS - up engine

    What's Changed

    New Contributors

    Full Changelog: https://github.com/devlikeapro/waha/compare/2026.9.1...2026.9.2

  3. 2026.9.12026-09-22 · 2026-09-22 03:45 UTC
    查看更新说明

    🧩 Apps

    • 2026.9.1 - Phone Numbers - resolve numbers to the WhatsApp chatId before sending, with optional regexp rules (^52(\d{10})$ => 521$1)
    • 2026.9.1 - Phone Numbers: Argentina - resolve numbers with or without the mobile 9 (54... / 549...) - #2260
    • 2026.9.1 - Phone Numbers: Mexico - resolve numbers with or without the old 1 after the country code (52... / 521...)

    🧩 ChatWoot

    • 2026.9.1 - Show delivered and read ticks in Chatwoot on messages agents send from Chatwoot (conversations.syncMessageStatus) - 🧩 ChatWoot - #2264
    • 2026.9.1 - Show messages you send from the WhatsApp app or API as regular outgoing messages (conversations.outgoing: private-note | message) - #2249
    • 2026.9.1 - Update names of existing Chatwoot contacts from your phone book (wa/contacts pull --update-names no|if-raw|always) - #1245
    • 2026.9.1 - Deleting a message with attachments in Chatwoot deletes every part in WhatsApp, not only the last one

    🛠️ Fixes

    • 2026.9.1 - WEBJS - Fix sending media - Data passed to getter must include an id property - #2271, #2273
    • 2026.9.1 - WEBJS - Joining a group via invite link failed with 500 on current WhatsApp Web
    • 2026.9.1 - WEBJS - Getting and subscribing to presence failed with 500 on current WhatsApp Web - #2262
    • 2026.9.1 - WEBJS - presence.update events were missing on current WhatsApp Web
    • 2026.9.1 - GOWS - Clearing a group description with an empty string hung - #2257
    • 2026.9.1 - Setting an empty group subject returns 400 instead of hanging - #2257
    • 2026.9.1 - Sending a poll with empty or duplicate options returns 400
    • 2026.9.1 - NOWEB - Fix downloading interactiveMessageTemplate with "templateMessage" message is not a media message - #2275
    • 2026.9.1 - NOWEB - Downloading media expired on WhatsApp servers asks the phone to re-upload it instead of failing
    • 2026.9.1 - GOWS - Downloading media expired on WhatsApp servers asks the phone to re-upload it in more cases (404/410)
    • 2026.9.1 - NOWEB - Messages from history sync now have image thumbnails (jpegThumbnail) for newly linked sessions
    • 2026.9.1 - Dashboard - Chat media thumbnails didn’t show for NOWEB sessions

    What's Changed

    New Contributors

    Full Changelog: https://github.com/devlikeapro/waha/compare/2026.8.2...2026.9.1

  4. 2026.8.22026-09-01 · 2026-09-01 08:42 UTC
    查看更新说明

    Full Changelog: https://github.com/devlikeapro/waha/compare/2026.8.1...2026.8.2

    🆕 New

    • 2026.8.2 - API - POST /api/sendSticker - send stickers (WebP) - 📤 Send messages - #1287, #2240
    • 2026.8.2 - Media - granular download control for events and API - ⚙️ Configuration - #2211
    • 2026.8.2 - Groups - approve new members setting - GET/PUT /api/{session}/groups/{id}/settings/security/membership-approval - 👥 Groups - #2200
    • 2026.8.2 - Groups - join requests API - GET /api/{session}/groups/{id}/participants/join-requests + /approve and /reject - 👥 Groups
    • 2026.8.2 - Groups - group.v2.participants.join-request event - a request to join a group is created, rejected or revoked - 👥 Groups
    • 2026.8.2 - OpenTelemetry trace context - trace_id/span_id in logs, traceparent response header, no export by default - 🔍 Observability
    • 2026.8.2 - Prometheus metrics - GET /metrics (optional) - 🔍 Observability - #2245
    • 2026.8.2 - Docs - how to extend WAHA with apps, modules and session plugins - 🛠️ Development

    🧩 Apps

    • 2026.8.2 - Brazilian Phone Numbers - resolves the 9th digit for Brazilian numbers - #2180
    • 2026.8.2 - Purge API - POST /api/apps/{id}/purge - delete the app’s stored data, keep the app configured - 🧩 Apps
    • 2026.8.2 - Logout purge - POST /api/sessions/{session}/logout accepts {"apps": {"purge": true}} to purge apps’ storage on logout
    • 2026.8.2 - Unique apps - one instance per session for ChatWoot, Reject Calls and Brazilian Phone Numbers

    🧩 ChatWoot

    • 2026.8.2 - match existing contacts by resolved phone number for @lid chats and backfill missing phone_number - #2208
    • 2026.8.2 - name LID contacts by push name instead of raw @lid id - #1493

    🛠️ Fixes

    • 2026.8.2 - WEBJS, NOWEB - Channels - reply_to was silently ignored when sending messages to channels - #2233
    • 2026.8.2 - WEBJS - Channels - deleting a message in a channel failed - #2236
    • 2026.8.2 - WEBJS - first incoming message triggered events 2-3 times - #2235
    • 2026.8.2 - GOWS - fromMe messages mirrored to the wrong contact/conversation - #2241
    • 2026.8.2 - GOWS - unable to retrieve WhatsApp groups - #2234
    • 2026.8.2 - GOWS - group messages carrying a new sender key in @lid groups were silently lost - #2242
    • 2026.8.2 - GOWS - undecryptable messages are logged at error level instead of being silently dropped
    • 2026.8.2 - Media - keep the o
  5. 2026.8.12026-08-14 · 2026-08-14 12:09 UTC
    查看更新说明

    🆕 New

    • 2026.8.1 - GOWS - storage.contacts and storage.messageSecrets session config flags to disable contact and message secret storage - GOWS - #2207
    • 2026.8.1 - Message Capping - GET /api/sessions/{session}/capping, me.messageCapping and session.status events - #2186
    • 2026.8.1 - Reachout Timelock - GET /api/sessions/{session}/timelock (GOWS, NOWEB, WEBJS) + GOWS refreshes me.reachoutTimelock on 463 send errors - #2219
    • 2026.8.1 - NOWEB - WAHA_NOWEB_WA_VERSION=auto-web|auto-baileys - fetch the latest WhatsApp Web version on start - NOWEB
    • 2026.8.1 - GOWS - WAHA_GOWS_KEEPALIVE_INTERVAL_MIN|MAX - keepalive ping interval for proxies reaping idle tunnels - GOWS - devlikeapro/gows-plus#3

    🧩 ChatWoot

    • 2026.8.1 - populate the WhatsApp JID attribute for @lid contacts from the message payload - #2208
    • 2026.8.1 - do not save full attachment content in the task result - #2201, #2202

    🛠️ Fixes

    • 2026.8.1 - GOWS - disabling all gows.storage flags was silently ignored and data was stored anyway - #2207
    • 2026.8.1 - GOWS - check-exists returns the phone number in the new pn field (chatId can be a @lid) - #2208
    • 2026.8.1 - GOWS - fill the phone number (_data.Info.SenderAlt) from the LID store in message payloads - #2208
    • 2026.8.1 - GOWS - Lids API resolves unknown @lid → phone number via a server query - #2208
    • 2026.8.1 - Groups - set the phone number in participant.pn for @lid participants when available
    • 2026.8.1 - WEBJS - phantom AUTHENTICATED/READY statuses after logout and message id binding race - #2222
    • 2026.8.1 - WEBJS - session stuck in STARTING status
    • 2026.8.1 - WEBJS - hide “What’s new on WhatsApp Web” popup - #2217
    • 2026.8.1 - WEBJS - send button reply - #2183
    • 2026.8.1 - WEBJS - set group description - #2199
    • 2026.8.1 - WEBJS - fix adding group participants
    • 2026.8.1 - WPP - fix promoting group participant to admin
    • 2026.8.1 - NOWEB - fix leaving a group via group.v2.leave - #2206, #2209
    • 2026.8.1 - NOWEB - fix presence chat issue
    • 2026.8.1 - S3 - set ContentType on uploaded media objects
    • 2026.8.1 - reliable session stop and process shutdown (WEBJS kills Chrome, NOWEB stops cleanly, GOWS gets SIGKILL if hanged)

    Full Changelog: https://github.com/devlikeapro/waha/compare/2026.7.1...2026.8.1

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    WAHA

    WAHA - WhatsApp HTTP API (REST API) that you can install on your own server and run in less than 5 minutes!

    Docker Pulls

    Tables of Contents

    Quick start

    Requirements

    Only thing that you must have - installed docker. Please follow the original instruction how to install docker ->.

    When you are ready - come back and follows the below steps to send the first text message to WhatsApp via HTTP API!

    Send your first message

    Let's go over steps that allow you to send your first text message via WhatsApp HTTP API!

    1. Download image

    Assuming you have installed Docker, let's download the image.

    docker pull devlikeapro/waha
    

    Looking for WAHA Plus? It's now part of the main devlikeapro/waha image - all Plus features are included. Read more: WAHA 2026.6 - Plus is now Core

    2. Run WhatsApp HTTP API

    Run WhatsApp HTTP API:

    docker run -it --rm -p 3000:3000/tcp --name waha devlikeapro/waha
    
    # It prints logs and the last line must be
    # WhatsApp HTTP API is running on: http://[::1]:3000
    

    Open the link in your browser http://localhost:3000/ and you'll see API documentation (Swagger).

    3. Start a new session

    To start a new session you should have your mobile phone with installed WhatsApp application close to you.

    Please go and read how what we'll need to a bit later: How to log in - the instruction on WhatsApp site

    When your ready - find POST /api/sessions, click on Try it out, then Execute a bit below.

    The example payload:

    {
      "name": "default"
    }
    

    By using the request with different name values you can start multiple sessions (WhatsApp accounts) inside the single docker container.

    4. Get and scan QR

    Find GET /api/screenshot and execute it, it shows you QR code.

    Scan the QR with your cell phone's WhatsApp app.

    5. Get the screenshot

    Execute GET /api/screenshot after a few seconds after scanning the QR - it'll show you the screenshot of you Whatsapp instance. If you can get the actual screenshot - then you're ready to start sending messages!

    6. Send a text message

    Let's send a text message - find POST /api/sendText in swagger and change chatId this way: use a phone international phone number without + symbol and add @c.us at the end.

    For phone number 12132132131 the chatId is [email protected].

    The example payload:

    {
      "chatId": "[email protected]",
      "text": "Hi there!",
      "session": "default"
    }
    

    Also, you can use curl and send POST request like this:

    # Phone without +
    export PHONE=12132132130
    curl -d "{\"chatId\": \"${PHONE}@c.us\", \"text\": \"Hello from WhatsApp HTTP API\" }" -H "Content-Type: application/json" -X POST http://localhost:3000/api/sendText
    

    What is next?

    Go and read the full documentation!

    Development

    Start the project

    1. Clone the repository
    2. Make sure you're using node>=22 (check .nvmrc to get the version)
    3. Install the whatsapp-rust-bridge prerequisites:
    # Bun runtime used by whatsapp-rust-bridge prepare scripts
    curl -fsSL https://bun.sh/install | bash -s -- bun-v1.3.9
    
    # Rust nightly toolchain used for whatsapp-rust-bridge
    curl -fsSL https://sh.rustup.rs | bash -s -- -y --default-toolchain nightly-2026-01-30
    rustup target add wasm32-unknown-unknown
    cargo install wasm-pack --vers 0.14.0 --locked
    
    1. Run the following commands:
    # Install dependencies
    yarn install
    # Fetch and compile proto files
    yarn gows:proto
    # Run
    yarn start
    # open http://localhost:3000