User Management
Manage clients, assign roles, and handle billing
Create New User
| ID | Username | Mobile | Role | Status | Balance (โน) | Actions | |
|---|---|---|---|---|---|---|---|
| Loading users... | |||||||
Live Chat
Contacts
| SR. NO. | NAME | PHONE | GROUP | 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
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-messagecURL 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-templatecURL 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