🏭 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
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.
Docker images
WAHA provides few docker images with different setup.
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:arm | ARM | Chromium |
devlikeapro/waha-plus:noweb-arm | ARM | None |
WAHA Core | ||
devlikeapro/waha:latest | x86 | Chromium |
devlikeapro/waha:chrome | x86 | Chrome |
devlikeapro/waha:noweb | x86 | None |
devlikeapro/waha:arm | ARM | Chromium |
devlikeapro/waha:noweb-arm | ARM | None |
Browsers
- Chromium - is the default browser for WAHA. It’s a good choice for most cases.
- Chrome - is a good choice if you need to receive videos in Plus version.
- None - is a good choice if you want to use NOWEB engine.
CPU
- x86 - is a good choice for most cases.
- ARM - is a good choice if you’re using ARM processors (like Apple Silicon, Apple M1, etc.)Chrome version is not available in ARM
Versions
💡 You can pin WAHA version by adding -{version}
at the end of image tag.
devlikeapro/waha-plus:chrome-{version}
=>devlikeapro/waha-plus:chrome-2024.6.1
devlikeapro/waha-plus:latest-{version}
=>devlikeapro/waha-plus:latest-2024.6.1
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. | |
➖ | The engine does not and will newer support this feature |
If you don’t specify WHATSAPP_DEFAULT_ENGINE
environment variable - look at WEBJS engine,
it’s the engine WAHA runs by default.
Protocols
WEBJS | NOWEB | |
---|---|---|
Run a browser (chromium\chrome) to communicate with WhatsApp | ✔️ | ➖ |
Communicate with WhatsApp via websocket (no browser) | ➖ | ✔️ |
Webhooks
WEBJS | NOWEB | |
---|---|---|
message | ✔️ | ✔️ |
message with files | ✔️ | ✔️ |
message.reaction | ✔️ | ✔️ |
message.any | ✔️ | ✔️ |
message.ack | ✔️ | ✔️ |
message.revoked | ✔️ | |
state.change | ✔️ | ✔️ |
group.join | ✔️ | ✔️ |
group.leave | ✔️ | |
presence.update | ✔️ | |
poll.vote | ✔️ | |
poll.vote.failed | ✔️ | |
chat.archive | ✔️ | ✔️ |
call.received | ✔️ | ✔️ |
call.accepted | ✔️ | |
call.rejected | ✔️ |
Sessions
Read more about 🖥️ Sessions
WEBJS | NOWEB | |
---|---|---|
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
WEBJS | NOWEB | |
---|---|---|
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/sendPoll | #189 | ✔️ |
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
WEBJS | NOWEB | |
---|---|---|
Status | ||
POST /api/{session}/status/text | ✔️ | |
POST /api/{session}/status/image | ✔️ | |
POST /api/{session}/status/voice | ✔️ | |
POST /api/{session}/status/video | ✔️ | |
POST /api/{session}/status/delete | ✔️ |
Chats
WEBJS | NOWEB | |
---|---|---|
Get all chatsGET /api/{session}/chats | ✔️ | ✔️¹ |
Archive chatPOST /api/{session}/chats/{chatId}/archive | ✔️ | #445 |
Unarchive chatPOST /api/{session}/chats/{chatId}/unarchive | ✔️ | #445 |
Delete chatDELETE /api/{session}/chats/{chatId} | ✔️ | |
Get messagesGET /api/{session}/chats/{chatId}/messages | ✔️ | ✔️¹ |
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
WEBJS | NOWEB | |
---|---|---|
GET /api/contacts | ✔️ | ✔️*1 |
GET /api/contacts/all | ✔️ | ✔️*1 |
GET /api/contacts/check-exists | ✔️ | ✔️ |
GET /api/contacts/about | ✔️ | |
GET /api/contacts/profile-picture | ✔️ | ✔️ |
POST /api/contacts/block | ✔️ | *2 |
POST /api/contacts/unblock | ✔️ | *2 |
Channels
Read more about 📢 Channels
WEBJS | NOWEB | |
---|---|---|
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 - PollPOST /api/sendPoll | ||
Receive messages - Textmessage event | ✔️ | ✔️ |
Receive messages - Image message 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 | |
---|---|---|
POST /api/{session}/groups | ✔️ | ✔️ |
GET /api/{session}/groups | ✔️ | ✔️ |
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 | ✔️ | ✔️ |
Presence
Read more about ✅ Presence
WEBJS | NOWEB | |
---|---|---|
POST /api/{session}/presence | ✔️ | ✔️ |
GET /api/{session}/presence | ✔️ | |
GET /api/{session}/presence/{chatId} | ✔️ | |
POST /api/{session}/presence/{chatId}/subscribe | ✔️ |
Labels
Read more about 🏷️ Labels
WEBJS | NOWEB | |
---|---|---|
Get list of labelsGET /api/{session}/labels | ✔️ | ✔️ |
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}/ | ✔️ | ✔️ |
labels.upsert | ✔️ | |
labels.deleted | ✔️ | |
labels.chat.added | ✔️ | |
labels.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 | |
---|---|---|
call.received | ✔️ | ✔️ |
call.accepted | ✔️ | |
call.rejected | ✔️ |
Storages
Read more about 🗄️ Storages
Storage Type | 🖥️ Session Storage | 🖼️ Media Storage |
---|---|---|
Local | ✔️ | ✔️ |
MongoDB | ✔️ | #508 |
S3¹ | ➖ | ✔️¹ |
PostgresSQL | #450 | ➖ |
- Any S3 Compatible storage can be used, such as AWS S3, MinIO, DigitalOcean Spaces, etc. For in-house solutions, you can use MinIO.
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.
👉 Storages are available in WAHA Plus only.
Observability
Read more about 🔍 Observability
WEBJS | NOWEB | |
---|---|---|
Other | ||
GET /api/version | ✔️ | ✔️ |
GET /health | ✔️ | ✔️ |