VoiceDesk BPO
Outbound floor, documented.
Public page — no account needed. Campaigns, live listen, client HTTPS lookup, and how to test. Same Twilio number as IPO — inbound stays on voice.snsoftwares.com.
What VoiceDesk BPO is
Outbound call-center floor. Your agents and AI call leads. Supervisors listen live.
Sister app VoiceDesk IPO (voice.snsoftwares.com) answers inbound shop/clinic calls. Same Twilio number: inbound webhook stays on IPO. If your personal phone rings, that is BPO outbound.
- Live site: bpo.snsoftwares.com — platform admin javed@snsoftwares.com / demo1234. Company: admin@bpo.snsoftwares.com / demo1234
- Supervisor and agent logins use the same password demo1234
- AI speaks only campaign policy + Custom API — never invents a status or price
Read this without signing in
This page is public. Anyone can open https://bpo.snsoftwares.com/docs. You do not need an account to read it.
The demo lookup API is public too — no cookie, no API key.
https://bpo.snsoftwares.com/api/demo/lookup?kind=delivery&id=PH-1842 https://bpo.snsoftwares.com/api/demo/lookup?kind=bank&last4=4821 https://bpo.snsoftwares.com/api/demo/lookup?kind=ticket&id=T-2041 # Inbound IPO docs (also public): https://voice.snsoftwares.com/docs
Workspace APIs (GET /api/public/v1) still need a Bearer key from Settings after you sign in.
Start here (5 minutes)
Import leads, start a campaign, connect the client API if they need live lookup.
- Login → Clients → Dial list (CSV name, phone) → Campaigns → Start calling.
- Floor → Agents: mobile number, status Available. DNC: numbers you must never dial.
- Integrations → Custom API: HTTPS URL with {id} and {phone}. Optional Bearer token.
- Actions → Test. Demo: PH-1842, bank last-4 4821, ticket T-2041, appointment APT-22.
- Dial your own mobile (not on DNC). Then ask a lookup question on the live call if an Action is on.
Where things live
Main: Home, Live, Leads, Dial list, Campaigns, Calls, Follow-up.
- Setup: Agents, Clients, DNC, Reports, QA, Knowledge, Company rules, AI agents
- Campaigns / AI Employees → Smart play — draw the call path
- Actions / Integrations / Docs — client HTTPS lookup
- Handoff, Billing, Logs — transfer, plan, security events
- Admin (platform): Companies, DIDs, packages
What the client API must return
HTTPS JSON. GET or POST. 8 second timeout.
We fill {id}, {phone}, {last4}, {query}, {name}.
{
"ok": true,
"found": true,
"status": "out for delivery",
"eta": "14 minutes",
"number": "PH-1842"
}Wrap { ok: true, data: { ... } } is fine. found false → AI says it does not have that info. Last 4 only for accounts.
Ready templates
Actions → New action, then replace the demo URL with the client’s.
- Delivery — PH-1842 / AWB9981
- Account enquiry — last 4 4821, verify caller on
- Ticket T-2041 · Appointment APT-22 · Custom HTTPS
Verify the caller
If the JSON includes a phone, last 10 digits must match the person on the line.
Keep this on for bank and medical lookups.
Campaigns and company rules
Campaign script and Company rules are INTERNAL POLICY. The AI must not read them aloud.
Opening names the campaign — never a generic help question. Off-topic → sure nahi, then one campaign question.
Campaigns → Smart play: draw Start → Pitch → Collect → Lookup → Transfer → Close. If the campaign play is on, it wins over the employee play.
Website chat (subscription included)
Paid plan only. Same AI employee and Knowledge as the phone. Visitors chat on your client site — they install nothing.
Website chat → pick the employee → add allowed domains → Create bot key. Copy vdbpo_bot_… once. Without that key the bubble will not chat.
Paste the snippet before </body>. Never put a vd_live_ server key in the page.
- Billing must be active. Paused workspaces cannot start chat.
- Employee status Live.
- Allowed domain must match the site Origin.
- Wrong or missing bot key → 401. Other site → 403.
<script src="https://bpo.snsoftwares.com/widget.js" data-bot-key="vdbpo_bot_…" async></script>
Rotate or revoke from Website chat. Session tokens last 20 minutes. Chat uses the same knowledge as the floor.
Webhooks
Settings → public https URL. Signed with HMAC-SHA256.
POST your-url
X-VoiceDesk-Event: call.completed
X-VoiceDesk-Signature: hex HMAC-SHA256 of the raw body
{ "event": "call.completed", "payload": { } }Also lead.updated and other desk events. Localhost URLs are rejected.
Public API
Settings → Create key. Copy vd_live_… once. Growth+ plans include API keys.
GET /api/public/v1 — workspace + actions.
GET /api/public/v1/calls — last 100 calls.
GET /api/public/v1/leads — outcomes only. Writes return 405.
How to test
Tick these here. No repo required. Platform admin: javed@snsoftwares.com. Company: admin@bpo.snsoftwares.com / demo1234.
The demo lookup URLs in “Read this without signing in” work in any browser — no cookie.
- Start calling your mobile → Calls shows ringing then completed.
- DNC the same number → dial blocked.
- Actions → Delivery Test → PH-1842.
- Custom API save demo URL → Test.
- Bearer key → GET /api/public/v1 and /api/public/v1/leads.
- Reject http://169.254.169.254 , /api/settings , file:///etc/passwd
Voice rules
Campaign only. Answer the last words first. Silence → hear-check.
Lookup for live status. Mask last 4. Transfer when they ask for a human.