User Management

Manage clients, assign roles, and handle billing
Create New User






ID Username Email Mobile Role Status Balance (โ‚น) Actions
Loading users...

Live Chat

Select a contact to start chatting

Contacts

SR. NO. NAME PHONE GROUP EMAIL ADDRESS BASIC DETAIL ACTION
Page 1 of 1 (0 total)

Send Message

Send WhatsApp messages to individual clients
๐Ÿ‘ค Recipient
Single Message
Use Template
Message Details
Preview
Select a message type or type a message to preview.
๐Ÿ“ Select Template

Bulk Send

Send messages to multiple clients at once
๐Ÿ“ค Load Recipients
๐Ÿ‘ฅ Recipients

Dashboard

Track all sent messages, campaigns and delivery status
Total Messages
0
Delivered / Sent
0
Read
0
Failed
0
Pending
0
📢 Campaign Log Summary
Click any row to view full message details
Loading campaigns...
📋 Recent Messages
# Time Client Phone Type Campaign Cost Status Ref
Page 1 of 1 (0 total)

Template Studio

Design and submit new WhatsApp templates (Only for Official Meta API users)
Lowercase and underscores only

WhatsApp Templates

Show entries
Search:
NAME LANGUAGE CATEGORY STATUS UPDATED ON ACTION

SQL Stored Procedures

Copy these procedures into your MS SQL Server to integrate with your .NET application
๐Ÿ’ก These procedures let your existing C# software queue messages. The web app polls sp_GetPendingMessages and updates status via sp_UpdateMessageStatus.
๐Ÿ—„๏ธ 1. Create Queue Table
-- Run once to create the message queue table
CREATE TABLE WhatsAppMessageQueue (
    MessageID      BIGINT IDENTITY(1,1) PRIMARY KEY,
    RecipientName  NVARCHAR(200),
    PhoneNumber    NVARCHAR(20)    NOT NULL,
    MessageType    NVARCHAR(50),   -- 'invoice','report','welcome'
    MessageBody    NVARCHAR(MAX),
    ReferenceNo    NVARCHAR(100),  -- Invoice no / Report ID
    AttachmentURL  NVARCHAR(500),
    Status         NVARCHAR(20)    DEFAULT 'PENDING',
    ScheduledAt    DATETIME        DEFAULT GETDATE(),
    SentAt         DATETIME,
    ErrorMessage   NVARCHAR(500),
    CreatedBy      NVARCHAR(100),
    WAMessageID    NVARCHAR(200)   -- returned by WhatsApp API
);
๐Ÿ“ฅ 2. Queue a Message (Call from .NET)
CREATE PROCEDURE sp_QueueWhatsAppMessage
    @RecipientName  NVARCHAR(200),
    @PhoneNumber    NVARCHAR(20),
    @MessageType    NVARCHAR(50),
    @MessageBody    NVARCHAR(MAX)   = NULL,
    @ReferenceNo    NVARCHAR(100)  = NULL,
    @AttachmentURL  NVARCHAR(500)  = NULL,
    @CreatedBy      NVARCHAR(100)  = NULL
AS BEGIN
    INSERT INTO WhatsAppMessageQueue
        (RecipientName, PhoneNumber, MessageType,
         MessageBody, ReferenceNo, AttachmentURL,
         Status, CreatedBy)
    VALUES
        (@RecipientName, @PhoneNumber, @MessageType,
         @MessageBody, @ReferenceNo, @AttachmentURL,
         'PENDING', @CreatedBy);

    SELECT SCOPE_IDENTITY() AS MessageID;
END
๐Ÿ“ค 3. Fetch Pending Messages (Polled by Web App)
CREATE PROCEDURE sp_GetPendingMessages
    @BatchSize INT = 50
AS BEGIN
    SELECT TOP (@BatchSize)
        MessageID, RecipientName, PhoneNumber,
        MessageType, MessageBody, ReferenceNo, AttachmentURL
    FROM WhatsAppMessageQueue
    WHERE Status = 'PENDING'
      AND ScheduledAt <= GETDATE()
    ORDER BY ScheduledAt ASC;
END
โœ… 4. Update Message Status
CREATE PROCEDURE sp_UpdateMessageStatus
    @MessageID    BIGINT,
    @Status       NVARCHAR(20),  -- SENT / FAILED / READ
    @WAMessageID  NVARCHAR(200) = NULL,
    @ErrorMsg     NVARCHAR(500) = NULL
AS BEGIN
    UPDATE WhatsAppMessageQueue
    SET
        Status       = @Status,
        SentAt       = CASE WHEN @Status = 'SENT'
                            THEN GETDATE() ELSE SentAt END,
        WAMessageID  = ISNULL(@WAMessageID, WAMessageID),
        ErrorMessage = @ErrorMsg
    WHERE MessageID = @MessageID;
END
๐Ÿ”ท 5. C# .NET Usage Example
// In your existing .NET C# software, call the stored procedure:
using (var cmd = new SqlCommand("sp_QueueWhatsAppMessage", conn))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@RecipientName", client.Name);
    cmd.Parameters.AddWithValue("@PhoneNumber",  client.Phone); // +917812345678
    cmd.Parameters.AddWithValue("@MessageType",  "invoice");
    cmd.Parameters.AddWithValue("@ReferenceNo",  invoice.InvoiceNo);
    cmd.Parameters.AddWithValue("@AttachmentURL", invoice.PdfUrl); // optional
    cmd.Parameters.AddWithValue("@CreatedBy",    Environment.UserName);
    conn.Open();
    cmd.ExecuteNonQuery();
}
// The web app polls sp_GetPendingMessages and sends automatically.

Developer API

Integrate WhatsApp sending into your own applications.
Generate your API key in the My Profile section. Send API requests using this key in the Authorization header.
๐Ÿ”Œ Send Custom Message API
Endpoint: POST /api/external/send-message
cURL Example
curl -X POST "https://yourdomain.com/api/external/send-message" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "Phone": "+919876543210",
  "Message": "Hello from API!",
  "AttachmentUrl": "https://example.com/file.pdf" 
}'
PHP (cURL) Example
<?php
$apiKey = 'YOUR_API_KEY';
$url = 'https://yourdomain.com/api/external/send-message';
$data = [
    'Phone' => '+919876543210',
    'Message' => 'Hello from API!'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiKey,
    'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
Node.js (Fetch) Example
const sendMsg = async () => {
  const response = await fetch('https://yourdomain.com/api/external/send-message', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      Phone: '+919876543210',
      Message: 'Hello from API!'
    })
  });
  console.log(await response.json());
};
sendMsg();
C# / .NET (HttpClient) Example
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var payload = new { Phone = "+919876543210", Message = "Hello from API!" };
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://yourdomain.com/api/external/send-message", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());

Note: AttachmentUrl is optional. Phone should contain country code without '+'.

๐Ÿ”Œ Send Template Message API (Invoices, Bills)
Endpoint: POST /api/external/send-template
cURL Example
curl -X POST "https://yourdomain.com/api/external/send-template" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "Phone": "+919876543210",
  "TemplateName": "invoice_ready",
  "Language": "en_US",
  "BodyVariables": ["Customer Name", "INV-2026-001", "5200"]
}'
PHP (cURL) Example
<?php
$apiKey = 'YOUR_API_KEY';
$url = 'https://yourdomain.com/api/external/send-template';
$data = [
    'Phone' => '+919876543210',
    'TemplateName' => 'invoice_ready',
    'Language' => 'en_US',
    'BodyVariables' => ['Customer Name', 'INV-2026-001', '5200']
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $apiKey,
    'Content-Type: application/json'
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
Node.js (Fetch) Example
const sendTemplate = async () => {
  const response = await fetch('https://yourdomain.com/api/external/send-template', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      Phone: '+919876543210',
      TemplateName: 'invoice_ready',
      Language: 'en_US',
      BodyVariables: ['Customer Name', 'INV-2026-001', '5200']
    })
  });
  console.log(await response.json());
};
sendTemplate();
C# / .NET (HttpClient) Example
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var payload = new { 
    Phone = "+919876543210", 
    TemplateName = "invoice_ready",
    Language = "en_US",
    BodyVariables = new[] { "Customer Name", "INV-2026-001", "5200" }
};
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://yourdomain.com/api/external/send-template", content);
Console.WriteLine(await response.Content.ReadAsStringAsync());

Note: HeaderMediaUrl, HeaderMediaType, and BodyVariables are optional depending on the template structure.

WhatsApp Channels

Manage your connected WhatsApp accounts
Channel ID Phone Number Status Added At Action
Loading channels...

My Profile

Update your personal details
Profile Details
Change Password
External API Access
Generate an API key to send messages from external software.

My Transactions

View your balance deductions and additions
Date & Time Type Amount Description
Loading...

Settings

Configure WhatsApp API and database connection
๐Ÿ“ฑ WhatsApp QR Connection Status
Your account is configured for Unofficial WhatsApp (QR Scan). Use the Channels menu to scan QR codes and check connected devices.
๐Ÿ“ฑ Meta Embedded Signup
Link your Facebook Business account to automatically generate your API Token and WABA ID.
๐Ÿ”‘ Manual API Details
โš™๏ธ Behaviour
Auto-poll pending queue
Poll sp_GetPendingMessages every 30 seconds and auto-send
Rate limiting
Wait 1 second between messages to avoid API limits
Log all messages to database
Update status back to SQL after each send