Development and Deployment of Backend for WhatsApp Web QR Integration with CRM (Node.js on Contabo VPS)
Budget: $10 – $30 USD
We are looking for an experienced Full-Stack or Backend developer to build and deploy a dedicated backend service (“WhatsApp Bridge”) that allows the integration of multiple WhatsApp Web (Business App) accounts via QR code with our CRM built on the Base44 platform.
Our CRM (frontend) runs on Base44 and already has the user interface for initiating the QR connection and managing conversations. However, due to the limitations of Base44’s serverless Backend Functions (which cannot maintain persistent sessions), we need an external server that will handle the actual WhatsApp connections. This server will be deployed on our VPS hosted at Contabo.
The goal is to have a fully functional system where CRM users can connect their WhatsApp numbers by scanning a QR code, send and receive messages in real time, and have all interactions reflected and persisted in our Base44 database.
Context & Architecture
CRM Frontend & Database: Hosted on Base44. Users initiate the connection process and interact with the chat interface here.
Base44 Backend Functions: Used as intermediaries to communicate with the new “WhatsApp Bridge.” These functions will persist conversations and messages.
WhatsApp Bridge (Your Development): A Node.js server running on our Contabo VPS. This is the core integration layer that maintains WhatsApp sessions and manages message flow.
WhatsApp Technology: The integration will use the whatsapp-web.js library to interact with WhatsApp Web.
Key Requirements & Features
VPS Setup (Contabo):
Configure a Node.js runtime environment (with NVM).
Install PM2 for process management and automatic restarts.
Install Chromium and all dependencies required for whatsapp-web.js.
Configure firewall (UFW) to allow necessary traffic.
Backend Development (Node.js “WhatsApp Bridge”):
Session Management:
Initialize and maintain multiple independent WhatsApp Web sessions, each identified by a unique session_id.
Generate dynamic QR codes for each new session and keep updating the QR until it is scanned.
Handle connection/disconnection events (e.g., if the user’s phone disconnects).
Persist session data (auth_info) to avoid constant rescans after server restarts.
REST API:
Expose HTTP endpoints so Base44 Backend Functions can interact:
POST /api/whatsapp/init-session: Start a new session and return a QR code.
GET /api/whatsapp/check-status/:session_id: Get the current status and QR of a session.
POST /api/whatsapp/send-message: Send text or media to a specific WhatsApp number from a given session_id.
POST /api/whatsapp/disconnect-session: Close and remove a WhatsApp session.
Real-Time Communication (Socket.IO):
Implement Socket.IO so the Node.js server can push updates in real time to Base44 (or an intermediate client):
QR code updates (when refreshed).
Session state changes (connected, disconnected, error).
Incoming messages: notify Base44 whenever new messages arrive on any connected session.
Integration with Base44 Backend Functions:
From the “WhatsApp Bridge,” make requests to Base44 Backend Functions when:
A new message arrives (whatsappReceiveMessage).
A session successfully connects (whatsappScanQR).
A session disconnects (whatsappDisconnect).
A QR code changes (so Base44 can save and display it).
(Base44 will provide function URLs and, if necessary, an SDK.)
Deployment & Management
Configure the Node.js app with PM2 so it auto-starts on VPS boot and stays alive.
Handle environment variables via .env.
Key Technologies
Language: Node.js (LTS)
Framework: Express.js
WhatsApp Library: whatsapp-web.js
Real-Time: Socket.IO
Process Manager: PM2
Server: Contabo VPS (Linux, Ubuntu/Debian likely)
Deliverables for the Client (Me)
The freelancer must provide the following, clearly and concisely, so I can configure my Base44 application without needing to grant access to my Base44 environment:
WHATSAPP_BACKEND_URL: The public base URL of the Node.js server (e.g., http://your_vps_ip:3000).
Source Code (server.js): Complete and final Node.js server code, including configuration/auxiliary files (.env.example, etc.), with clear comments.
Base44 Configuration Instructions (API Keys/Secrets):
If the Node.js server requires an API key or secret to communicate with Base44 (e.g., BASE44_API_KEY_FOR_SERVER), specify its name and how to obtain it.
If the Node.js server needs webhook URLs or function IDs from Base44, specify the corresponding environment variables and how to set them in .env.
Contabo VPS Service Administration Guide:
Basic PM2 commands to check status, restart, and view logs.
Confirmation that PM2 is configured to auto-start the app on VPS reboot.
List of used ports and confirmation firewall allows them.
Message Flow Explanation (Optional but Useful): Diagram or text explaining how a WhatsApp message travels from the user’s phone → VPS → Base44, and vice versa.
Success Criteria
Ability to initiate a WhatsApp Web connection via QR from the Base44 CRM.
QR code is displayed correctly and updates in the CRM.
Upon scanning the QR with a phone, the CRM updates session state to “Connected.”
Sending messages from CRM → WhatsApp works.
Receiving messages from WhatsApp → CRM works.
WhatsApp sessions remain active on the VPS even if the CRM browser is closed.
Node.js server automatically restarts with PM2 on crash or VPS reboot.
Our CRM (frontend) runs on Base44 and already has the user interface for initiating the QR connection and managing conversations. However, due to the limitations of Base44’s serverless Backend Functions (which cannot maintain persistent sessions), we need an external server that will handle the actual WhatsApp connections. This server will be deployed on our VPS hosted at Contabo.
The goal is to have a fully functional system where CRM users can connect their WhatsApp numbers by scanning a QR code, send and receive messages in real time, and have all interactions reflected and persisted in our Base44 database.
Context & Architecture
CRM Frontend & Database: Hosted on Base44. Users initiate the connection process and interact with the chat interface here.
Base44 Backend Functions: Used as intermediaries to communicate with the new “WhatsApp Bridge.” These functions will persist conversations and messages.
WhatsApp Bridge (Your Development): A Node.js server running on our Contabo VPS. This is the core integration layer that maintains WhatsApp sessions and manages message flow.
WhatsApp Technology: The integration will use the whatsapp-web.js library to interact with WhatsApp Web.
Key Requirements & Features
VPS Setup (Contabo):
Configure a Node.js runtime environment (with NVM).
Install PM2 for process management and automatic restarts.
Install Chromium and all dependencies required for whatsapp-web.js.
Configure firewall (UFW) to allow necessary traffic.
Backend Development (Node.js “WhatsApp Bridge”):
Session Management:
Initialize and maintain multiple independent WhatsApp Web sessions, each identified by a unique session_id.
Generate dynamic QR codes for each new session and keep updating the QR until it is scanned.
Handle connection/disconnection events (e.g., if the user’s phone disconnects).
Persist session data (auth_info) to avoid constant rescans after server restarts.
REST API:
Expose HTTP endpoints so Base44 Backend Functions can interact:
POST /api/whatsapp/init-session: Start a new session and return a QR code.
GET /api/whatsapp/check-status/:session_id: Get the current status and QR of a session.
POST /api/whatsapp/send-message: Send text or media to a specific WhatsApp number from a given session_id.
POST /api/whatsapp/disconnect-session: Close and remove a WhatsApp session.
Real-Time Communication (Socket.IO):
Implement Socket.IO so the Node.js server can push updates in real time to Base44 (or an intermediate client):
QR code updates (when refreshed).
Session state changes (connected, disconnected, error).
Incoming messages: notify Base44 whenever new messages arrive on any connected session.
Integration with Base44 Backend Functions:
From the “WhatsApp Bridge,” make requests to Base44 Backend Functions when:
A new message arrives (whatsappReceiveMessage).
A session successfully connects (whatsappScanQR).
A session disconnects (whatsappDisconnect).
A QR code changes (so Base44 can save and display it).
(Base44 will provide function URLs and, if necessary, an SDK.)
Deployment & Management
Configure the Node.js app with PM2 so it auto-starts on VPS boot and stays alive.
Handle environment variables via .env.
Key Technologies
Language: Node.js (LTS)
Framework: Express.js
WhatsApp Library: whatsapp-web.js
Real-Time: Socket.IO
Process Manager: PM2
Server: Contabo VPS (Linux, Ubuntu/Debian likely)
Deliverables for the Client (Me)
The freelancer must provide the following, clearly and concisely, so I can configure my Base44 application without needing to grant access to my Base44 environment:
WHATSAPP_BACKEND_URL: The public base URL of the Node.js server (e.g., http://your_vps_ip:3000).
Source Code (server.js): Complete and final Node.js server code, including configuration/auxiliary files (.env.example, etc.), with clear comments.
Base44 Configuration Instructions (API Keys/Secrets):
If the Node.js server requires an API key or secret to communicate with Base44 (e.g., BASE44_API_KEY_FOR_SERVER), specify its name and how to obtain it.
If the Node.js server needs webhook URLs or function IDs from Base44, specify the corresponding environment variables and how to set them in .env.
Contabo VPS Service Administration Guide:
Basic PM2 commands to check status, restart, and view logs.
Confirmation that PM2 is configured to auto-start the app on VPS reboot.
List of used ports and confirmation firewall allows them.
Message Flow Explanation (Optional but Useful): Diagram or text explaining how a WhatsApp message travels from the user’s phone → VPS → Base44, and vice versa.
Success Criteria
Ability to initiate a WhatsApp Web connection via QR from the Base44 CRM.
QR code is displayed correctly and updates in the CRM.
Upon scanning the QR with a phone, the CRM updates session state to “Connected.”
Sending messages from CRM → WhatsApp works.
Receiving messages from WhatsApp → CRM works.
WhatsApp sessions remain active on the VPS even if the CRM browser is closed.
Node.js server automatically restarts with PM2 on crash or VPS reboot.
Related categories:
Node.js
VPS
Ubuntu
RESTful
Git
JSON
Backend Development
RESTful API
Security
API Development