🏭 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

👉 Read more about 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

👉 Read more about 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.

VENOM

👉 Read more about VENOM

WHATSAPP_DEFAULT_ENGINE=VENOM

It’s a high-performance system developed with JavaScript to create a bot for WhatsApp. It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.

Docker images

WAHA provides few docker images with different setup.

ImageCPUBrowser
WAHA Plus
devlikeapro/waha-plus:latestx86Chromium
devlikeapro/waha-plus:chromex86Chrome (supports video)
devlikeapro/waha-plus:nowebx86None
devlikeapro/waha-plus:armARMChromium
devlikeapro/waha-plus:noweb-armARMNone
WAHA Core
devlikeapro/waha:latestx86Chromium
devlikeapro/waha:chromex86Chrome
devlikeapro/waha:nowebx86None
devlikeapro/waha:armARMChromium
devlikeapro/waha:noweb-armARMNone

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.)

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.

SymbolMeaning
✔️The engines supports the feature.
#123Feature 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

WEBJSNOWEBVENOM
Run a browser (chromium\chrome) to communicate with WhatsApp✔️✔️
Communicate with WhatsApp via websocket (no browser)✔️

Webhooks

WebhooksWEBJSNOWEBVENOM
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✔️

Sessions

If you find any inconsistency with actual endpoints - please create an issue

WEBJSNOWEBVENOM
Session
POST /api/sessions/start✔️✔️✔️
POST /api/sessions/stop✔️✔️✔️
POST /api/sessions/logout✔️✔️✔️
GET /api/sessions/✔️✔️✔️
GET /api/sessions/{session}/me✔️✔️
Authentication
POST /api/{session}/auth/qr✔️✔️✔️
POST /api/{session}/auth/request-code✔️
POST /api/{session}/auth/authorize-code#113
Screenshot
POST /api/screenshot✔️✔️

Chatting

ChattingWEBJSNOWEBVENOM
GET /api/checkNumberStatus✔️✔️✔️
GET /api/sendContactVcard✔️
GET /api/sendText✔️✔️✔️
POST /api/sendText✔️✔️✔️
POST /api/reply✔️✔️✔️
PUT /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️
DELETE /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️
POST /api/sendPoll✔️
POST /api/sendLocation✔️✔️✔️
POST /api/sendLinkPreview✔️✔️
POST /api/sendImage ✔️✔️✔️
POST /api/sendFile ✔️✔️✔️
POST /api/sendVoice ✔️✔️✔️
POST /api/sendVideo ✔️✔️
POST /api/sendSeen✔️✔️✔️
POST /api/startTyping✔️✔️✔️
POST /api/stopTyping✔️✔️
POST /api/reaction✔️✔️
POST /api/star✔️✔️
GET /api/messages✔️✔️*1✔️

Status

WEBJSNOWEBVENOM
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

WEBJSNOWEBVENOM
GET /api/{session}/chats✔️✔️*1
DELETE /api/{session}/chats/{chatId}✔️*2
GET /api/{session}/chats/{chatId}/messages✔️✔️*1✔️
DELETE /api/{session}/chats/{chatId}/messages✔️*2
PUT /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️
DELETE /api/{session}/chats/{chatId}/messages/{messageId}✔️✔️

Contacts

WEBJSNOWEBVENOM
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

*

  1. NOWEB - you need to Enable Store to get chats, contacts and messages
  2. NOWEB - Create an issue with the feature request if you need it

Channels

WEBJSNOWEB
Search public channels#440#440
Create Channel
POST /api/{session}/channels
#439✔️
Get channel - by id and invite code
GET /api/{session}/channels/{ChannelID}
✔️✔️
List channels
GET /api/{session}/channels
✔️✔️
Delete channel
DELETE /api/{session}/channels/{ChannelID}
✔️
Get messages
GET /api/{session}/chats/{ChannelID}/messages
✔️✔️
#433
Send messages - Text
POST /api/sendText
✔️✔️
Send messages - Image
POST /api/sendImage
✔️✔️
Send messages - Poll
POST /api/sendPoll
Receive messages - Text
message 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

WEBJSNOWEBVENOM
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

WEBJSNOWEBVENOM
POST /api/{session}/presence✔️✔️
GET /api/{session}/presence✔️
GET /api/{session}/presence/{chatId}✔️
POST /api/{session}/presence/{chatId}/subscribe✔️

Observability

WEBJSNOWEBVENOM
Other
GET /api/version✔️✔️
GET /health ✔️✔️✔️