🏭 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.
👉 Go to Docker Image Configurator to generate the command with the latest version and your key.
devlikeapro/{image}:{browser}[-cpu][-version]
Image
waha-plus
- ➕ WAHA Plus imagewaha
- WAHA Core image
Browsers
- 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.)
Versions
- latest - is the latest version of WAHA.
- pinned - you can pin WAHA version by adding
-{version}
at the end of image tag.
Examples
👉 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: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 |
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.reaction | ✔️ | ✔️ |
message.any | ✔️ | ✔️ |
message.ack | ✔️ | ✔️ |
message.waiting | ✔️ | |
message.revoked | ✔️ | |
state.change | ✔️ | ✔️ |
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 | ✔️ | |
engine.event | ✔️ | ✔️ |
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/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
WEBJS | NOWEB | |
---|---|---|
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
WEBJS | NOWEB | |
---|---|---|
Get all chatsGET /api/{session}/chats | ✔️ | ✔️¹ |
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
WEBJS | NOWEB | |
---|---|---|
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 | |
---|---|---|
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 - Imagemessage 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 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 | |
---|---|---|
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 | ✔️ | ✔️ |