🏭 Engines
Engines
Under the hood WAHA allows you to use different engines. You can control what you want to run by settings
WHATSAPP_DEFAULT_ENGINE
environment variables.
docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/waha
If you have any problems with one engine - try another!
All engines are available in both Core and Plus versions.
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Run a browser (chromium\chrome) to communicate with WhatsApp | ✔️ | ||
Communicate with WhatsApp via websocket (no browser) | ✔️ | ✔️ |
WEBJS
WHATSAPP_DEFAULT_ENGINE=WEBJS
A WhatsApp API client that connects through the WhatsApp Web browser app. It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.
NOWEB
WHATSAPP_DEFAULT_ENGINE=NOWEB
NOWEB engine does not require a browser to work with WhatsApp Web, it does so directly using a WebSocket. Not running Chromium saves you CPU and Memory, so you can run more instances on a single server!
Quotes from the users:
The server has 2 CPU and 8GB of memory. Today we have 85 sessions in this instance.
400 sessions with 4CPU and 32RAM. It’s working fine.
GOWS
WHATSAPP_DEFAULT_ENGINE=GOWS
GOWS engine does not require a browser to work with WhatsApp Web, it does so directly using a WebSocket.
🚀 It’s new generation engine written in Golang, future replacement for NOWEB engine.
Docker images
WAHA provides few docker images with different setup.
👉 Go to Docker Image Configurator to generate the command with the latest version and your key.
Image | CPU | Browser |
---|---|---|
WAHA Plus | ||
devlikeapro/waha-plus:latest | x86 | Chromium |
devlikeapro/waha-plus:chrome | x86 | Chrome (supports video) |
devlikeapro/waha-plus:noweb | x86 | None |
devlikeapro/waha-plus:gows | x86 | None |
devlikeapro/waha-plus:arm | ARM | Chromium |
- | ARM | Chrome |
devlikeapro/waha-plus:noweb-arm | ARM | None |
WAHA Core | ||
devlikeapro/waha:latest | x86 | Chromium |
devlikeapro/waha:chrome | x86 | Chrome |
devlikeapro/waha:noweb | x86 | None |
- | ARM | Chrome |
devlikeapro/waha:arm | ARM | Chromium |
devlikeapro/waha:noweb-arm | ARM | None |
devlikeapro/{image}:{browser}[-cpu][-version]
{image}
:
waha-plus
- ➕ WAHA Plus imagewaha
- WAHA Core image
{browser}
:
- Chromium (
latest
) - is the default browser for WAHA. It’s a good choice for most cases. - Chrome (
chrome
) - is a good choice if you need to receive videos in Plus version. - None (
noweb
) - is a good choice if you want to use NOWEB engine.
{cpu}
:
- x86 - is a good choice for most cases.
- ARM (
-arm
) - is a good choice if you’re using ARM processors (like Apple Silicon M1\M2, Raspberry Pi, etc.)
{version}
:
- latest - is the latest version of WAHA.
- pinned - you can pin WAHA version by adding
-{version}
at the end of image tag.
Features
Some engines may not support certain features. Here, you will find a list of supported endpoints and webhooks per engine.
Symbol | Meaning |
---|---|
✔️ | The engines supports the feature. |
#123 | Feature request or bug for the endpoint |
The feature available in WAHA Plus. |
If you don’t specify WHATSAPP_DEFAULT_ENGINE
environment variable - look at WEBJS engine,
it’s the engine WAHA runs by default.
🔄 Webhooks
WEBJS | NOWEB | GOWS | |
---|---|---|---|
message | ✔️ | ✔️ | ✔️ |
message.reaction | ✔️ | ✔️ | ✔️ |
message.any | ✔️ | ✔️ | ✔️ |
message.ack | ✔️ | ✔️ | ✔️ |
message.waiting | ✔️ | ||
message.revoked | ✔️ | ||
group.join | ✔️ | ✔️ | |
group.leave | ✔️ | ||
presence.update | ✔️ | ✔️ | |
poll.vote | ✔️ | ||
poll.vote.failed | ✔️ | ||
chat.archive | ✔️ | ||
call.received | ✔️ | ✔️ | |
call.accepted | ✔️ | ||
call.rejected | ✔️ | ||
label.upsert | ✔️ | ||
label.deleted | ✔️ | ||
label.chat.added | ✔️ | ||
label.chat.deleted | ✔️ | ||
state.change | ✔️ | ✔️ | ✔️ |
engine.event | ✔️ | ✔️ | ✔️ |
🖥️ Sessions
Read more about 🖥️ Sessions
WEBJS | NOWEB | GOWS | |
---|---|---|---|
List sessionsGET /api/sessions/ | ✔️ | ✔️ | ✔️ |
Get sessionGET /api/sessions/{name} | ✔️ | ✔️ | ✔️ |
Create sessionPOST /api/sessions/ | ✔️ | ✔️ | ✔️ |
Update sessionPOST /api/sessions/{name}/ | ✔️ | ✔️ | ✔️ |
Delete sessionDELETE /api/sessions/{name}/ | ✔️ | ✔️ | ✔️ |
Start sessionPOST /api/sessions/{name}/start | ✔️ | ✔️ | ✔️ |
Stop sessionPOST /api/sessions/{name}/stop | ✔️ | ✔️ | ✔️ |
Restart sessionPOST /api/sessions/{name}/restart | ✔️ | ✔️ | ✔️ |
Logout from a sessionPOST /api/sessions/logout | ✔️¹ | ✔️¹ | ✔️¹ |
Get screenshotGET /api/screenshot | ✔️ | ➖ | ➖ |
Get meGET /api/sessions/{session}/me | ✔️ | ✔️ | ✔️ |
Get QRPOST /api/{session}/auth/qr | ✔️ | ✔️ | ✔️ |
Request codePOST /api/{session}/auth/request-code | ✔️ | ✔️ | ✔️ |
Authorize codePOST /api/{session}/auth/authorize-code | ️#113 |
- Logout from a session removes authentication information from a server (WAHA), but keeps the device on “Connected Device” in the app - #148
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
📤 Messages
Read more about 📤 Send Messages and 📥 Receive Messages
WEBJS | NOWEB | GOWS | |
---|---|---|---|
POST /api/sendText | ✔️ | ✔️ | ✔️ |
POST /api/sendSeen | ✔️ | ✔️ | ✔️ |
PUT /api/{session}/chats/{chatId}/messages/{messageId} | ✔️ | ✔️ | |
DELETE /api/{session}/chats/{chatId}/messages/{messageId} | ✔️ | ✔️ | |
POST /api/sendImage | ✔️ | ✔️ | ✔️ |
POST /api/sendFile | ✔️ | ✔️ | ✔️ |
POST /api/sendVoice | ✔️ | ✔️ | ✔️ |
POST /api/sendVideo | ✔️ | ✔️ | ✔️ |
POST /api/sendButtons | ✔️ | ||
POST /api/sendPoll | #189 | ✔️ | |
POST /api/forwardMessage | ✔️ #588 | ✔️ | |
POST /api/sendLocation | ✔️ | ✔️ | |
POST /api/sendLinkPreview | ✔️ | ||
POST /api/startTyping | ✔️ | ✔️ | ✔️ |
POST /api/stopTyping | ✔️ | ✔️ | ✔️ |
POST /api/{session}/presence | ✔️ | ✔️ | ✔️ |
POST /api/reaction | ✔️ | ✔️ | ✔️ |
POST /api/star | ✔️ | ✔️ | |
GET /api/sendContactVcard | ✔️ | ||
GET /api/messages | ✔️ | ✔️¹ | |
GET /api/checkNumberStatus | ✔️ | ✔️ |
- NOWEB - you need to Enable Store to get chats, contacts and messages
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
🟢 Status
Read more about 🟢 Status
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Send Text StatusPOST /api/{session}/status/text | ✔️ | ✔️ | ✔️ |
Send Image StatusPOST /api/{session}/status/image | ✔️ | ✔️ | ✔️ |
Send Voice StatusPOST /api/{session}/status/voice | ✔️ | ✔️ | ✔️ |
Send Video StatusPOST /api/{session}/status/video | ✔️ | ✔️ | ✔️ |
Delete StatusPOST /api/{session}/status/delete | ✔️ |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
💬 Chats
Read more about 💬 Chats
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Get all chatsGET /api/{session}/chats | ✔️ | ✔️¹ | |
Get chats overviewGET /api/{session}/chats/overview | ✔️ | ✔️¹ | |
Get chat pictureGET /api/{session}/chats/{chatId}/picture | ✔️ | ✔️¹ | |
Unread chatPOST /api/{session}/chats/{chatId}/unread | ✔️ | ✔️¹ | |
Archive chatPOST /api/{session}/chats/{chatId}/archive | ✔️ | ✔️¹ | |
Unarchive chatPOST /api/{session}/chats/{chatId}/unarchive | ✔️ | ✔️¹ | |
Delete chatDELETE /api/{session}/chats/{chatId} | ✔️ | ||
Get messagesGET /api/{session}/chats/{chatId}/messages | ✔️ | ✔️¹ | |
Get message by idGET /api/{session}/chats/{chatId}/messages/{messageId} | ✔️ | ✔️¹ | |
Pin messagePOST /api/{session}/chats/{chatId}/messages/{messageId}/pin | ✔️ | ✔️ | |
Unpin messagePOST /api/{session}/chats/{chatId}/messages/{messageId}/unpin | ✔️ | ✔️ | |
Edit messagePUT /api/{session}/chats/{chatId}/messages/{messageId} | ✔️ | ✔️ | |
Delete messageDELETE /api/{session}/chats/{chatId}/messages/{messageId} | ✔️ | ✔️ | |
Delete all messagesDELETE /api/{session}/chats/{chatId}/messages | ✔️ |
- NOWEB - you need to Enable Store to get chats, contacts and messages
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
👤 Contacts
Read more about 👤 Contacts
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Get all contactsGET /api/contacts/all | ✔️ | ✔️*1 | |
Get contactGET /api/contacts | ✔️ | ✔️*1 | |
Check phone number existsGET /api/contacts/check-exists | ✔️ | ✔️ | ✔️ |
Get “about” contactGET /api/contacts/about | ✔️ | ||
Get profile pictureGET /api/contacts/profile-picture | ✔️ | ✔️ | |
Block contactPOST /api/contacts/block | ✔️ | ||
Unblock contactPOST /api/contacts/unblock | ✔️ |
- NOWEB - you need to Enable Store to get chats, contacts and messages
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
📢 Channels
Read more about 📢 Channels
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Search public channels | #440 | #440 | |
Create ChannelPOST /api/{session}/channels | #439 | ✔️ | ✔️ |
Get channel - by id and invite codeGET /api/{session}/channels/{ChannelID} | ✔️ | ✔️ | ✔️ |
List channelsGET /api/{session}/channels | ✔️ | ✔️ | ✔️ |
Delete channelDELETE /api/{session}/channels/{ChannelID} | ✔️ | ||
Get messagesGET /api/{session}/chats/{ChannelID}/messages | ✔️ | ✔️ #433 | |
Send messages - TextPOST /api/sendText | ✔️ | ✔️ | ✔️ |
Send messages - Image POST /api/sendImage | ✔️ | ✔️ | ✔️ |
Send messages - Video POST /api/sendVideo | ✔️ | ✔️ | ✔️ |
Send messages - PollPOST /api/sendPoll | |||
Receive messages - Textmessage event | ✔️ | ✔️ | ✔️ |
Receive messages - Mediamessage event | ✔️ | ✔️ | ✔️ |
Receive messages - Polls | ✔️ | ||
Receive messages - Polls Votes (in my channel) | |||
Receive messages - Reactions (in my channel) | |||
Channels - follow, unfollow | ✔️ | ||
Channels - mute, unmute | ✔️ | ||
Admins - Send Invite | |||
Admins - Revoke Invite | |||
Admins - Accept Invite | |||
Admins - Demote Admin |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
👥 Groups
Read more about 👥 Groups
WEBJS | NOWEB | GOWS | |
---|---|---|---|
POST /api/{session}/groups | ✔️ | ✔️ | |
GET /api/{session}/groups | ✔️ | ✔️ | |
GET /api/{session}/groups/join-info | ✔️ | ✔️ | |
POST /api/{session}/groups/join | ✔️ | ✔️ | |
GET /api/{session}/groups/{id} | ✔️ | ✔️ | |
DELETE /api/{session}/groups/{id} | ✔️ | ||
GET /api/{session}/groups/{id}/settings/security/info-admin-only | ✔️ | ||
PUT /api/{session}/groups/{id}/settings/security/info-admin-only | ✔️ | ||
GET /api/{session}/groups/{id}/settings/security/messages-admin-only | ✔️ | ||
PUT /api/{session}/groups/{id}/settings/security/messages-admin-only | ✔️ | ||
POST /api/{session}/groups/{id}/leave | ✔️ | ✔️ | |
PUT /api/{session}/groups/{id}/description | ✔️ | ✔️ | |
PUT /api/{session}/groups/{id}/subject | ✔️ | ✔️ | |
GET /api/{session}/groups/{id}/invite-code | ✔️ | ✔️ | |
POST /api/{session}/groups/{id}/invite-code/revoke | ✔️ | ✔️ | |
GET /api/{session}/groups/{id}/participants | ✔️ | ✔️ | |
POST /api/{session}/groups/{id}/participants/add | ✔️ | ✔️ | |
POST /api/{session}/groups/{id}/participants/remove | ✔️ | ✔️ | |
POST /api/{session}/groups/{id}/admin/promote | ✔️ | ✔️ | |
POST /api/{session}/groups/{id}/admin/demote | ✔️ | ✔️ |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
✅ Presence
Read more about ✅ Presence
WEBJS | NOWEB | GOWS | |
---|---|---|---|
POST /api/{session}/presence | ✔️ | ✔️ | ✔️ |
GET /api/{session}/presence | ✔️ | ✔️ | |
GET /api/{session}/presence/{chatId} | ✔️ | ✔️ | |
POST /api/{session}/presence/{chatId}/subscribe | ✔️ | ✔️ |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
🏷️ Labels
Read more about 🏷️ Labels
WEBJS | NOWEB | GOWS | |
---|---|---|---|
Get labelsGET /api/{session}/labels | ✔️ | ✔️ | |
Create labelPOST /api/{session}/labels | ✔️ | ✔️ | |
Update labelPUT /api/{session}/labels/{labelId} | ✔️ | ✔️ | |
Delete labelDELETE /api/{session}/labels/{labelId} | ✔️ | ✔️ | |
Get chats by label idGET /api/{session}/labels/{labelId}/chats | ✔️ | ✔️ | |
Get labels by chat idGET /api/{session}/labels/chats/{chatId}/ | ✔️ | ✔️ | |
PUT labels to chatPUT /api/{session}/labels/chats/{chatId}/ | ✔️ | ✔️ | |
label.upsert | ✔️ | ||
label.deleted | ✔️ | ||
label.chat.added | ✔️ | ||
label.chat.deleted | ✔️ |
If you see the feature is not available in the above list, please create a feature request or leave “+1” comment on the existing one.
📞 Calls
Read more about 📞 Calls
WEBJS | NOWEB | GOWS | |
---|---|---|---|
call.received | ✔️ | ✔️ | |
call.accepted | ✔️ | ||
call.rejected | ✔️ |
🗄️ Storages
Read more about 🗄️ Storages
Storage | WEBJS | NOWEB | GOWS |
---|---|---|---|
🖥️ Session - Local | ✔️ | ✔️ | ✔️ |
🖼️ Media - Local | ✔️ | ✔️ | ✔️ |
🖥️ Session - PostgresSQL¹ | ✔️ | ✔️ | ✔️ |
🖼️ Media - PostgresSQL¹ | ✔️ | ✔️ | ✔️ |
🖼️ Media - S3¹² | ✔️ | ✔️ | ✔️ |
✔️ | ✔️ | ❌ |
- Available in ➕ WAHA Plus
- Any S3 Compatible storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use MinIO.
- MongoDB is deprecated. Use PostgresSQL instead for new installations.
🔍 Observability
Read more about 🔍 Observability
WEBJS | NOWEB | |
---|---|---|
Other | ||
GET /api/version | ✔️ | ✔️ |
GET /health | ✔️ | ✔️ |