Skip to content

Dardasha Documentation Complete guide to the Dardasha WhatsApp Business Platform

v1.1.0 | Last updated: | Plan: Premium OMR 4.900/year or Platinum OMR 14.900/year

Dardasha is a WhatsApp Business messaging platform built by BHD Group (Bin Haider Darwish L.L.C.) in Muscat, Oman. Dardasha (دردشة, Arabic for "chat") is hosted for you at app.dardasha.om. Connect WhatsApp numbers, manage all conversations in one inbox, run bulk campaigns, and automate replies. Built for agencies, businesses, and resellers. Start with a 10-day free trial, no card, then subscribe in OMR through Paymob.

What Dardasha does

📱

Multi-Number WhatsApp

Connect unlimited WhatsApp numbers via QR code. Auto-reconnect, session persistence.

💬

Real-Time Inbox

Unified inbox for all numbers. Send text, images, videos, audio, documents.

📢

Bulk Campaigns

Campaign manager with smart anti-spam delays, scheduling, and delivery tracking.

🤖

Auto Replies

Keyword triggers with exact, contains, starts_with, and regex matching.

👥

Contact Management

Import/export CSV. Tags, notes, conversation history, block list.

🏢

Multi-Tenant Workspaces

Isolated workspaces with role-based access. Perfect for agencies.

🔌

REST API

Full API with JWT & API key auth. Swagger docs included.

🎨

White-Label

Change name, logo, colors, favicon — make it 100% your brand.

Requirements

ComponentMinimumRecommended
Operating SystemAny Linux with DockerUbuntu 22.04 LTS
RAM1 GB2 GB+
Node.js18+20+ LTS
DatabaseMySQL 5.7 / MariaDB 10.5MySQL 8.0
Docker20.10+Latest (recommended)

Installation

Option A: One-Click Installer (Recommended)

The fastest way to get Dardasha running. SSH into your server and run:

bash <(curl -s https://dardasha.om/install.sh)

The installer will configure everything: Docker, database, environment, and start the application. Open http://your-server:3000 when it finishes.

Option B: Docker Compose

git clone https://github.com/dardasha/dardasha
cd dardasha
cp .env.example .env
# Edit .env with your database credentials and JWT secret
nano .env
docker-compose up -d
That's it! Dardasha is running at http://your-server:3000. Continue to Plans & Subscription.

Option C: Manual Install (Node.js)

1
Create the database
CREATE DATABASE dardasha CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2
Import the schema
mysql -u root -p dardasha < backend/database.sql
3
Configure environment
cp .env.example .env
nano .env   # Set DB_HOST, DB_NAME, DB_USER, DB_PASSWORD, JWT_SECRET
4
Install dependencies & build
cd backend && npm install && cd ..
cd frontend && npm install && npm run build && cd ..
5
Start the server
# Development
cd backend && node server.js

# Production (PM2)
npm install -g pm2
pm2 start backend/server.js --name dardasha
pm2 save && pm2 startup

Nginx Reverse Proxy (Production)

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    client_max_body_size 20M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
    }
}
Important: The Upgrade and Connection "upgrade" headers are required for WebSocket (Socket.IO) to work properly.

Plans & Subscription

Dardasha is a subscription platform. There is no purchase code and no per-domain licence: your account carries your plan. Every new account starts on a 10-day free trial with full platform access and no credit card.

1
Create your account

Sign up at app.dardasha.om. The 10-day trial starts immediately: 10 WhatsApp lines, 100 contacts, and the full feature set.

2
Choose a plan

Premium, OMR 4.900 per year: 10 WhatsApp lines, 365 days validity, chatbots and auto-replies, REST API, WhatsApp warmer.
Platinum, OMR 14.900 per year: everything in Premium plus 24 WhatsApp lines and 10,000 contacts.

3
Pay in OMR

Billed once a year through Paymob: Visa, Mastercard, OmanNet, or Apple Pay. Cancel anytime. No per-message charges and no Meta API fees.

Note: Dardasha was previously sold as a one-time self-hosted licence. That model is retired. Anything you read elsewhere about a purchase code, a CodeCanyon licence, a one-domain installation, or a one-time price no longer describes this product. Current pricing is published at dardasha.om.

Configuration

All configuration is done through environment variables in the .env file:

VariableDescriptionDefaultRequired
PORTServer port3000No
NODE_ENVproduction / developmentproductionNo
DB_HOSTMySQL hostdb (Docker) / localhostYes
DB_PORTMySQL port3306No
DB_NAMEDatabase namedardashaYes
DB_USERDatabase userrootYes
DB_PASSWORDDatabase password—Yes
JWT_SECRETSecret for JWT tokens—Yes
JWT_EXPIRES_INToken expiry7dNo
ADMIN_EMAILDefault admin emailadmin@dardasha.comNo
ADMIN_PASSWORDDefault admin passwordadmin123No
UPLOAD_DIRFile upload directory./uploadsNo
MAX_FILE_SIZEMax upload size (bytes)16777216 (16MB)No
RATE_LIMIT_MAXMax requests per window100No
CORS_ORIGINAllowed CORS origin*No
Security: Always change JWT_SECRET, DB_PASSWORD, and ADMIN_PASSWORD from their defaults in production!

Connecting WhatsApp

1
Navigate to Lines

Go to Settings → WhatsApp Numbers (or Lines in the sidebar).

2
Add a new number

Click "Add Line". Give it a name (e.g., "Main Business", "Support Line").

3
Scan the QR code

A QR code appears on screen. On your phone, open WhatsApp → Settings → Linked Devices → Link a Device → scan the QR code.

4
Connected!

Status changes from QR Pending → Connecting → Connected ✅. Takes about 5–15 seconds.

Status Indicators

StatusMeaning
QR PendingQR code displayed, waiting for scan
Connecting 🔄QR scanned, establishing connection
Connected ✅Active and receiving messages
Disconnected ❌Connection lost — will auto-reconnect

Multiple numbers: Repeat the process for each WhatsApp number you want to connect. There's no technical limit — each number uses about 50–100MB of RAM.

Auto-Reconnect: Sessions are stored on disk. When the server restarts, all lines reconnect automatically — no need to re-scan QR codes.

Chat Inbox

The Chat page is your unified inbox — all messages from all connected WhatsApp numbers appear here in real-time via WebSocket.

Inbox Features

Sending Messages

Click a conversation to open it. You can send:

Message Status

IconStatus
🕐Pending — queued for sending
✓Sent — delivered to WhatsApp server
✓✓Delivered — reached recipient's phone
✓✓ (blue)Read — recipient opened the message

Agent Assignment

Assign conversations to specific team members. Agents with the "Agent" role see only their assigned conversations — perfect for customer support teams.

Contact Notes

Add internal notes to any contact. Notes are visible only to your team and don't affect the WhatsApp conversation.

Bulk Campaigns

1
Create a campaign

Go to Campaigns → New Campaign. Set a name and select which WhatsApp line to send from.

2
Compose your message

Write your message text. Supports variables: {name}, {phone}. Optionally attach an image, video, or document.

3
Select recipients

Choose from: all contacts, contacts with specific tags, or upload a CSV of phone numbers.

4
Set delivery options

Configure anti-spam delay (2–8 seconds between messages). Schedule for now or a future date/time.

5
Launch & monitor

Click "Start Campaign". A real-time progress bar shows delivery status. Pause / Resume / Cancel anytime.

Delivery Report

After completion, view the delivery report showing: sent, delivered, failed, and read counts per message.

Warning: Sending too many messages too quickly can result in your WhatsApp number being banned. Always use reasonable delays and only message contacts who have opted in.

Auto Replies

Create keyword-triggered auto-replies that fire automatically when an incoming message matches your rules.

Trigger Types

TypeDescriptionExample KeywordMatches
ExactFull message must matchhello"hello" only
ContainsKeyword appears anywhereprice"what's the price?", "price list"
Starts WithMessage begins with keywordorder"order #123", "order status"
RegexRegular expression^(hi|hello|hey)$"hi", "hello", "hey"

Actions

Each rule can reply with text or media (image, video, document). Example:

Trigger: "price" (contains)
Reply: "Thanks for your interest! Our prices start from 0.5 OMR.
Reply with your requirement and we'll send a quote."

Scheduling

Enable "Working hours only" to restrict when auto-replies fire:

Scope & Priority

Contact Management

Adding Contacts

CSV Format

name,phone,email,tags
John Smith,96812345678,john@example.com,"lead,premium"
Jane Doe,96887654321,jane@example.com,"customer"
Phone format: Use international format without the + sign. Example: 96812345678 for Oman.

Features

Multi-Tenant Workspaces

Create isolated workspaces for different businesses, departments, or clients. Each workspace has its own WhatsApp numbers, contacts, campaigns, and team members.

Inviting Team Members

  1. Go to Team in the sidebar
  2. Click "Invite Member"
  3. Enter their email and select a role
  4. They receive an invitation link to create their account

Roles & Permissions

RolePermissions
OwnerFull access, billing, team management
AdminAll features except billing
AgentAssigned conversations only — ideal for support teams
UserView & send in inbox, access contacts

Workspace Isolation

Admin Panel

The admin panel (/admin) is accessible only to superadmin users.

Dashboard

System-wide statistics: total users, workspaces, connected lines, messages sent, active campaigns.

User Management

Workspace Management

White-Label Branding

Rebrand the entire platform as your own. Go to Admin Panel → Branding.

SettingDescription
App NameReplaces "Dardasha" everywhere — sidebar, login, browser tab
LogoCustom logo for sidebar and login page (200×200 PNG recommended)
FaviconBrowser tab icon (32×32 or 64×64 PNG)
Primary ColorAccent color for buttons, links, badges. 8 presets or custom hex.
Login BackgroundCustom image or CSS gradient for the login page
Custom CSSInject custom CSS globally. Use var(--brand-primary) for theme-aware styles.
Footer TextCustom footer text. Set empty to hide "Powered by".
Support EmailShown in error pages and support links

Live Preview

All changes show a live preview in desktop and mobile views before you save.

Plans & Limits

FeatureFreeStarterProEnterprise
WhatsApp Lines1310Unlimited
Contacts5005,00050,000Unlimited
Campaigns/month520UnlimitedUnlimited
Team Members1520Unlimited
Auto Replies520UnlimitedUnlimited
API Access❌✅✅✅

Plans are assigned per workspace by the super admin. Limits are fully customizable in the admin panel.

REST API Reference

Dardasha exposes a comprehensive REST API for sending messages, managing groups, and integrating with external systems. All /rest/* endpoints use token-based authentication via the business API token.

Base URL

https://your-domain.com/api/qr/rest

Authentication

All REST endpoints require a token parameter (your business API token) and a from parameter (the WhatsApp number/instance to send from).

// Every request includes:
{
  "token": "your_business_api_token",
  "from": "96891117795"
}
Getting your token: Go to Settings → API Keys in the Dardasha dashboard, or use the /api/messages/lines/:id/regenerate-key endpoint to generate one programmatically.

Rate Limiting & Anti-Ban

Built-in protections to keep your WhatsApp number safe:

ProtectionLimit
Rate limit20 messages per minute per token
Daily cap1,500 messages per day per session
Identical messageMax 3 identical messages per hour
Typing simulationAuto "composing" indicator before sending (0.8–4s)
Gaussian jitterRandom 1.5–5s delay between queued messages

Send Message

POST /rest/send_message
Send any message type: text, image, video, audio, document, or location.

Body parameters:
ParamTypeRequiredDescription
tokenstringYesBusiness API token
fromstringYesSender WhatsApp number
tostringYesRecipient number (international format, no +)
messageTypestringYestext, image, video, audio, document, or location
requestTypestringNoSet to "group" for group messages
textstringFor textMessage text content
imageUrlstringFor imageURL of image to send
videoUrlstringFor videoURL of video to send
audioUrlstringFor audioURL of audio file
documentUrlstringFor documentURL of document file
filenamestringNoDisplay filename for documents
captionstringNoCaption for image/video/document
locationLatitudenumberFor locationLatitude
locationLongitudenumberFor locationLongitude
# Send a text message
curl -X POST https://dardasha.om/api/qr/rest/send_message \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "to": "96871234567",
    "messageType": "text",
    "text": "Hello from Dardasha!"
  }'

# Send an image with caption
curl -X POST https://dardasha.om/api/qr/rest/send_message \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "to": "96871234567",
    "messageType": "image",
    "imageUrl": "https://example.com/photo.jpg",
    "caption": "Check this out!"
  }'

# Send a document
curl -X POST https://dardasha.om/api/qr/rest/send_message \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "to": "96871234567",
    "messageType": "document",
    "documentUrl": "https://example.com/invoice.pdf",
    "filename": "Invoice-2026.pdf"
  }'

# Send a location
curl -X POST https://dardasha.om/api/qr/rest/send_message \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "to": "96871234567",
    "messageType": "location",
    "locationLatitude": 23.5880,
    "locationLongitude": 58.3829
  }'
Also available as GET: /rest/send_message?token=...&from=...&to=...&messageType=text&text=Hello — useful for quick integrations and webhook callbacks.

Send Reaction

POST /rest/send_reaction
React to a message with an emoji. Send an empty emoji string to remove a reaction.

Body: { token, from, chatId, messageId, emoji, fromMe? }
curl -X POST https://dardasha.om/api/qr/rest/send_reaction \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "chatId": "96871234567",
    "messageId": "3EB0A1B2C3D4E5F6",
    "emoji": "👍"
  }'

Edit Message

POST /rest/edit_message
Edit a previously sent text message. Only works on messages you sent (fromMe: true).

Body: { token, from, chatId, messageId, text, fromMe? }
curl -X POST https://dardasha.om/api/qr/rest/edit_message \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "chatId": "96871234567",
    "messageId": "3EB0A1B2C3D4E5F6",
    "text": "Updated message text"
  }'

Send Poll

POST /rest/send_poll
Create a poll in a chat. Recipients can vote on options.

Body:
ParamTypeDescription
tokenstringBusiness API token
fromstringSender number
chatIdstringRecipient number or group ID
questionstringPoll question
optionsstring[]Array of option strings (2–12)
selectableCountnumberHow many options can be selected (default: 1)
curl -X POST https://dardasha.om/api/qr/rest/send_poll \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "chatId": "96871234567",
    "question": "What time works for the meeting?",
    "options": ["9:00 AM", "10:00 AM", "11:00 AM", "2:00 PM"],
    "selectableCount": 1
  }'

Send Sticker

POST /rest/send_sticker
Send a sticker from a URL. The image must be a WebP file or will be auto-converted.

Body: { token, from, chatId, stickerUrl }
curl -X POST https://dardasha.om/api/qr/rest/send_sticker \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "chatId": "96871234567",
    "stickerUrl": "https://example.com/sticker.webp"
  }'

Delete Message

POST /rest/group/delete-message
Delete (unsend) a message from a chat. Works for both individual and group chats.

Body: { token, from, chatId, messageId, fromMe? }

Ping Call (Experimental)

POST /rest/ping_call
Ring a number briefly to get their attention. The call auto-ends after the specified duration.

Body: { token, from, to, duration? } (duration in seconds, default: 5)
Experimental: Ping call uses WhatsApp's VoIP signaling. Use sparingly — excessive calling may trigger WhatsApp's anti-abuse systems.

Group Management API

Full group management: create groups, manage participants, update info, and send group messages.

Create Group

POST /rest/group/create
Create a new WhatsApp group with initial participants.

Body: { token, from, subject, participants[] }
participants is an array of phone numbers (international format).
curl -X POST https://dardasha.om/api/qr/rest/group/create \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "subject": "Project Team",
    "participants": ["96871234567", "96879876543"]
  }'

Get Group Info

POST /rest/group/metadata
Get full group metadata: name, description, participants, admins, creation date.

Body: { token, from, groupId }
// Response:
{
  "success": true,
  "data": {
    "id": "120363012345678901@g.us",
    "subject": "Project Team",
    "desc": "Team chat for the project",
    "participants": [
      { "id": "96891117795@s.whatsapp.net", "admin": "superadmin" },
      { "id": "96871234567@s.whatsapp.net", "admin": null }
    ],
    "size": 2,
    "creation": 1710600000
  }
}

Manage Participants

POST /rest/group/participants
Add, remove, promote, or demote group participants.

Body:
ParamTypeDescription
tokenstringBusiness API token
fromstringSender number
groupIdstringGroup JID (e.g. 120363...@g.us)
participantsstring[]Array of phone numbers
actionstringadd, remove, promote, or demote
# Add members to a group
curl -X POST https://dardasha.om/api/qr/rest/group/participants \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "groupId": "120363012345678901@g.us",
    "participants": ["96879876543"],
    "action": "add"
  }'

# Promote to admin
curl -X POST https://dardasha.om/api/qr/rest/group/participants \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "groupId": "120363012345678901@g.us",
    "participants": ["96879876543"],
    "action": "promote"
  }'

Update Group Info

POST /rest/group/update
Update group subject (name) and/or description. You must be a group admin.

Body: { token, from, groupId, subject?, description? }

Get Invite Link

POST /rest/group/invite-code
Get the group's invite link code. Returns: { success: true, inviteCode: "ABC123...", link: "https://chat.whatsapp.com/ABC123..." }

Body: { token, from, groupId }

Send Group Message

POST /rest/group/send
Send a message directly to a group. Supports text, image, video, audio, and document.

Body: { token, from, groupId, messageType, text?, imageUrl?, caption?, videoUrl?, documentUrl?, filename? }
curl -X POST https://dardasha.om/api/qr/rest/group/send \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "from": "96891117795",
    "groupId": "120363012345678901@g.us",
    "messageType": "text",
    "text": "Hello team! Meeting at 3pm."
  }'

Internal API (Dashboard)

These endpoints are used by the Dardasha dashboard internally. They require JWT authentication via Authorization: Bearer <token>.

Authentication

POST /api/auth/login
Log in and receive a JWT token. Body: { email, password }
POST /api/auth/register
Register a new user and workspace. Body: { name, email, password }

Lines Management

GET /api/messages/lines
List all WhatsApp lines/instances for the authenticated user.
POST /api/messages/lines
Create a new line. Body: { name, number }
POST /api/messages/lines/:id/connect
Start QR code session for line connection.
POST /api/messages/lines/:id/disconnect
Disconnect a connected line (keeps the line, marks as INACTIVE).
DELETE /api/messages/lines/:id
Delete a line and its sessions.
POST /api/messages/lines/:id/regenerate-key
Generate a new API key for the line's user. Returns the new api_key.
PUT /api/messages/lines/:id/assign-business
Assign line to a business. Body: { business_id }

Conversations & Messages

GET /api/messages/conversations
List conversations. Query: ?page=1&limit=50&search=&business_id=&unread=
GET /api/messages/conversation/:chatId
Get messages for a conversation. Query: ?limit=50&offset=0
POST /api/messages/api/send
External API send. Header: X-API-Key: dk_xxx Body: { to: "96812345678", text: "Hello!" }

Templates (v2 API)

POST /api/v2/send_templet
Send a WhatsApp template message. Body: { token, sendTo, templetName, exampleArr, mediaUri? }
GET /api/v2/get_logs
Retrieve API logs for the authenticated user.

Webhooks

Configure webhook URLs to receive real-time events from Dardasha. Go to Settings → Webhooks → Add URL.

Supported Events

EventDescription
message.receivedNew incoming message
message.sentMessage sent successfully
message.deliveredMessage delivered to recipient
message.readMessage read by recipient
contact.newNew contact auto-created
campaign.completedCampaign finished sending

Payload Example

{
  "event": "message.received",
  "timestamp": "2026-02-21T09:00:00Z",
  "data": {
    "from": "96871234567",
    "to": "96891117795",
    "message": "Hello, I need a quote",
    "type": "text",
    "message_id": "3EB0..."
  }
}

Retry Policy

Failed deliveries are retried 3 times with exponential backoff (10s, 60s, 300s).

Configuration via API

PUT /api/lines/:id
Content-Type: application/json

{
  "webhook_url": "https://your-server.com/webhook"
}

Add-on Modules

Extend Dardasha with drop-in modules. Modules can add API routes, listen to events, create database tables, and run initialization logic.

Installing a Module

  1. Place the module folder in backend/modules/
  2. Restart the server
  3. The module is auto-discovered and loaded

Creating a Custom Module

// backend/modules/my-module/index.js
module.exports = {
  name: 'my-module',
  version: '1.0.0',
  description: 'My custom Dardasha module',

  // Database migrations (run once)
  migrations: [
    `CREATE TABLE IF NOT EXISTS my_module_data (
      id INT AUTO_INCREMENT PRIMARY KEY,
      data TEXT,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`,
  ],

  // API routes (mounted at /api/modules/my-module/)
  routes: (router) => {
    router.get('/status', (req, res) => {
      res.json({ status: 'active', version: '1.0.0' });
    });

    router.post('/data', async (req, res) => {
      // Your custom logic here
      res.json({ success: true });
    });
  },

  // Event hooks
  hooks: {
    'message:incoming': async (message, context) => {
      console.log('New message received:', message.content);
    },
    'message:outgoing': async (message, context) => {
      console.log('Message sent:', message.content);
    },
    'line:connected': async (line, context) => {
      console.log('Line connected:', line.name);
    },
  },

  // Initialization (runs on server start)
  init: async (app, io, bridgeManager) => {
    console.log('My module initialized!');
  },
};

Available Events

EventDescription
message:incomingNew message received
message:outgoingMessage sent
message:statusMessage status update (sent/delivered/read)
line:connectedWhatsApp line connected
line:disconnectedWhatsApp line disconnected
contact:createdNew contact created
campaign:startedCampaign started sending
campaign:completedCampaign finished

PhoneNorm — Built-in Phone Normalizer

PhoneNorm is a built-in phone number normalization utility included with every Dardasha installation. It normalizes phone numbers across 195 countries directly in MySQL — ensuring WhatsApp-compatible number formats.

Note: PhoneNorm is part of Dardasha core — no separate install needed. It is part of every plan, with nothing to buy separately.

API Integration

All phone numbers submitted through the Dardasha API are automatically normalized on input. No extra steps needed.

Direct SQL Usage

-- Normalize a phone number
SELECT fn_normalize_phone('71234567', 'OM');
-- Result: 96871234567

SELECT fn_normalize_phone('2125551234', 'US');
-- Result: 12125551234

-- Use default country (configured in phone_settings table)
SELECT fn_normalize_phone('+1-555-123-4567', NULL);
-- Result: 15551234567

-- Change default country
UPDATE phone_settings SET setting_value = 'US'
WHERE setting_key = 'default_country';

Built-in Views & Procedures

NameDescription
v_chatsClean inbox view with normalized contact numbers and line ownership
v_messagesAll messages with direction (sent/received), normalized numbers
sp_unread(line)Get unread conversations — CALL sp_unread('Anna');
sp_chat_history(phone, line)Full chat history — CALL sp_chat_history('71616161', 'Anna');

Country Reference

-- Find country info
SELECT * FROM phone_country_codes WHERE iso_code = 'OM';

-- List all GCC countries
SELECT country_name, dial_code, iso_code
FROM phone_country_codes
WHERE iso_code IN ('OM', 'AE', 'SA', 'BH', 'KW', 'QA');

PhoneNorm reference: PhoneNorm, built-in phone normalizer →

Troubleshooting

WhatsApp disconnects frequently

QR code not loading

Messages not sending

Subscription not recognised

Docker issues

502 Bad Gateway (Nginx)

Frequently Asked Questions

Do I need a WhatsApp Business API account?

No. Dardasha uses the WhatsApp Web multi-device protocol via DardashaBridge™, our proprietary connection engine. You only need a regular WhatsApp number — scan the QR code and you're connected.

Can I run this as a SaaS business?

Yes, on Platinum. The built-in workspace system, plan limits, and admin panel support multi-tenancy out of the box.

How many numbers can I connect?

No technical limit. Each number uses about 50–100MB of RAM. The plan system lets you control limits per workspace.

Is the source code encrypted?

No. You get 100% clean, readable, well-commented source code. No ioncube, no obfuscation.

Can I white-label / rebrand?

Absolutely. Change the name, logo, colors — it's your platform. See White-Label Branding.

Can I use a different database?

Dardasha is designed for MySQL 8.0. PostgreSQL support is planned for a future release.

Can I run without Docker?

Yes! See Manual Installation. You'll need Node.js 18+ and MySQL 5.7+.

How do I update?

Download the latest release, replace files (keep .env and sessions/), and restart. Migrations run automatically.

Support & Updates

What's Included

How to Get Help

  1. Check this documentation and the Troubleshooting section
  2. Email: support@dardasha.om
  3. Message us on WhatsApp from your account, or reply to your subscription receipt
  4. Include: server OS, Node.js version, error logs, and steps to reproduce

Changelog

v1.1.0 — March 2026

v1.0.0 — February 2026 (Initial Release)


Dardasha v1.1.0 — Built with ❤️ by BHD Group  |  © 2026 All Rights Reserved

Is BHD Group the same company as Mohsin Haider Darwish LLC?

BHD Group is Bin Haider Darwish L.L.C., Commercial Registration 1334733, a family-owned printing and technology group founded in Muscat in 2018. It is not Mohsin Haider Darwish LLC (a separate and unrelated Omani company), and the initials BHD here stand for Bin Haider Darwish, not the Bahraini dinar currency code.

مجموعة BHD هي شركة بن حيدر درويش ش.م.م، السجل التجاري 1334733، مجموعة عمانية عائلية للطباعة والتقنية تأسست في مسقط عام 2018. وهي ليست شركة محسن حيدر درويش ش.م.م (شركة عمانية منفصلة لا علاقة لها بنا)، والحروف BHD هنا اختصار لـ Bin Haider Darwish وليست رمز الدينار البحريني.