TNB SMM Bot is purpose-built for PerfectPanel operators. Every feature below ships out of the box — no plugins, no extensions, no extra configuration. Each section includes live mockups showing exactly how the bot behaves.
8
Feature Categories
60+
Individual Features
35+
Message Templates
7
Order Actions
Every action your customers need, handled by the bot over PerfectPanel Admin API v2. No panel login required.
Live status with service name, start count, remains, and provider. Supports single and bulk IDs in one message.
Auto-validates eligibility (status must be Partial or active) before submitting. Shows service, link, qty, and start count in reply.
Checks eligibility and submits cancellation. Confirmed in reply with next steps.
Priority flag on active orders. Validates, submits, and confirms.
Submits refund request after eligibility check. Logged with full provider context.
Request partial delivery for oversized orders. Validates and submits via panel API.
Staff tool for force-completing stalled orders when needed.
Up to 10 IDs validated synchronously; >10 IDs get an instant ack reply and async background processing — no timeout.
Platform-wide LLM (OpenAI, Claude, Groq, Ollama) configured once by your admin. Applied intelligently across all tenant interactions.
All customer-facing command replies reformatted through LLM. Unrecognised messages routed to AI with full context. Auto language detection.
Celery beat task polls panel every 60 s. Reads pending tickets matching configured subject, generates contextual AI reply with live order data, posts reply to ticket.
Tickets containing action keywords (speedup, refill, cancel, refund, partial) + order IDs are processed as commands — fetches live order status, logs with serial + provider OID.
General questions get a support-focused AI reply. Logged as "Ticket AI Reply" with any order context found in the message.
When a customer includes frustrated/angry text alongside an order ID + action, bot executes the command AND generates a merged AI consolation reply.
Dirty commands — order ID + action + meaningful extra text — are automatically flagged as priority in the logs dashboard. Clean commands are not flagged.
Per-user conversation history (last 10 messages) kept in-memory per instance. AI replies maintain context across a session.
Per-user AI rate limiting prevents abuse. Separate from order check rate limits.
Automated verification links every WhatsApp number to a panel account. No manual look-up required.
New users: greeting → enter panel username → API lookup → 6-digit OTP sent via panel ticket → enter code → verified. Code expires in 10 minutes.
Once verified, the WhatsApp JID is permanently linked to the panel username in tenant_users table. Persists across bot restarts.
!verify-users <username> verifies all group members at once. Useful for migrating existing customer bases.
"my username" command lets any verified user check their registered panel username.
Configurable max_messages_per_user_per_min and verification_max_attempts with cooldown period.
Per-user message rate limiting and order check rate limiting (max_order_checks_per_hr) prevent spam and abuse.
Three independent flags per group. Toggle live — no bot restart. Admin commands or dashboard.
support_enabled flag: controls whether the bot responds to user commands in this group. Disabled = bot ignores all messages from this group.
marketing_enabled flag: controls whether scheduled marketing broadcasts are sent to this group. Independent of support mode.
silent_mode flag: bot fully processes and logs all commands but sends zero replies. Useful for testing or monitoring without customer interruption.
New groups are automatically added to whitelisted_groups table when the bot first receives a message from them. Requires manual enable.
All three flags toggleable from the Groups page in the dashboard. Changes take effect on the next message — no reload needed.
!support enable/disable, !marketing enable/disable, !silent enable/disable — run inside the target group. Admins only.
Build a rotating library of marketing messages. Broadcasts run on your schedule across all opted-in groups.
Unlimited marketing messages per tenant. Rich WhatsApp text formatting supported. Managed from the Marketing page in your dashboard.
marketing_interval_hours: base interval between broadcasts. Configurable per tenant via bot settings.
Each broadcast fires with 0–60 minute random jitter on top of the base interval. Prevents patterns that trigger spam filters.
scheduler_timezone config key: set the timezone for your marketing schedule using UTC offset format (e.g. UTC+6).
Messages only go to groups with marketing_enabled = true. Groups not in the list are skipped entirely.
Uses Celery beat tasks — no cron jobs to maintain. Reinitialises automatically on WhatsApp reconnect.
WhatsApp-native admin and staff commands. Works in DMs and groups. No login required for admins.
| Command | Where | Access | Description |
|---|---|---|---|
| !status | DM / Group | Admin | Uptime, user count, group count, AI status |
| !broadcast <msg> | DM / Group | Admin | Send to all support-enabled groups now |
| !support enable|disable | Group | Admin | Toggle bot responses for this group |
| !marketing enable|disable | Group | Admin | Toggle marketing broadcasts for this group |
| !silent enable|disable | Group | Admin | Toggle silent mode — process but send no replies |
| !resolve <ids> <status> | DM / Group | Admin | Update log status; escalated notifies provider group |
| !config set <key> <value> | DM / Group | Admin only | Live config update — persists to DB immediately |
| refill verify <id…> | DM / Group | Admin+Staff | Live count vs panel data — refill justification |
| <ids> provider status | DM / Group | Admin+Staff | Provider OID + Provider Status per order |
| !verify-users <username> | Group | Admin | Bulk verify all group members at once |
| !remove-users <username> | Group | Admin | Unverify all users under this username |
Uptime, verified user count, group count, AI status. DM or group. Shows which AI provider is active.
Send a message to all support-enabled groups immediately. Useful for urgent announcements.
List all verified users or all whitelisted groups for this instance.
Admin + staff command. Shows live count vs panel data for each order ID — justifies or disputes a refill request without the customer seeing.
Comma-separated order IDs + "provider status": shows Provider OID and Provider Status per order. No ownership check — staff use.
Live config management via WhatsApp. Changes persist to bot_config table. No restart needed. Admin only.
tenant_admins table has role column (admin | staff). Admin: full command access. Staff: refill verify + provider status only.
Admins authenticated by both wa_jid (DMs) and lid (groups). LID auto-resolved via Evolution API on dashboard add.
WhatsApp Bot
Dashboard
WhatsApp Bot
Dashboard
WhatsApp Bot
Dashboard
Connect multiple SMM providers, sync their service catalogs, and get WhatsApp alerts for new services.
POST /providers/{id}/sync fetches the full service list from the provider panel API. Upserts services, tags new ones on subsequent syncs.
Balance fetched alongside services on every sync. Stored in smm_providers.balance. Best-effort — sync succeeds even if balance call fails.
When a subsequent sync detects genuinely new services, a WhatsApp alert is sent to admin-role numbers only (not staff). First sync is treated as baseline — no alert.
Configurable sync_interval per provider. Celery beat task runs auto-sync. is_active = false disables auto-sync for that provider.
GET /providers/services: paginated, filterable by q (name/ID), provider_id, sort order. Powers the Service Search dashboard page.
provider_sync_lock:{provider_id} Redis NX lock (TTL 600s) prevents two workers from syncing the same provider simultaneously.
Real-time visibility, live config, template management, billing — all in one place.
| Serial | Action | Order | Status |
|---|---|---|---|
| #1247 | Refill | #54321 | Resolved |
| #1246 | CancelPriority | #54318 | Open |
| #1245 | Status | #54310 | Ignored |
| #1244 | RefundPriority | #54305 | Escalated |
Searchable logs table with auto-refresh every 4 s. Filters by date, action, status, priority. Click long IDs to expand in modal.
Dirty commands auto-flagged as priority. Visual indicator in logs. Bulk status update: select rows → choose status → Apply.
35+ template keys across 11 categories. Edit any key from the Templates page. Changes take effect on next message — no restart.
All dashboard saves trigger POST /tenants/{instance}/reload. Bot invalidates cache and rebuilds with fresh data in-place.
View all verified users, manually verify, block, or delete. Shows panel username + last active time.
View all groups with support/marketing/silent flags. Toggle per-group or sync group list from Evolution API.
Stripe-powered upgrade/downgrade. Usage stats (messages today, active groups). Invoice history.
"Copy IDs" button in logs bulk action bar — copies all Provider OIDs from selected rows as comma-separated list. Useful for cross-checking with providers.
Escalated status also sends provider order IDs to the mapped provider WhatsApp group for cross-panel follow-up. Update via !resolve <ids> <status> or bulk-select in dashboard logs.
14-day free trial. No credit card. Connect WhatsApp in under 30 seconds.