AI Voice Agents

How Workforce Wave Builds a Voice Agent from a URL in 90 Seconds

Workforce Wave

April 17, 20267 min read
#api#developers#provisioning#scout

The question we heard from almost every early prospect was some version of the same thing: "This looks interesting, but we'd need weeks to train it on our business before it could go live."

That assumption made sense. Every voice AI platform they'd seen before required someone to write system prompts, manually enter services and hours, upload FAQs, and tune responses over multiple iteration cycles. For a dental practice owner or a hotel GM, that's a non-starter — they don't have a prompt engineer on staff and they're not going to become one.

So we built this: the part of Workforce Wave that makes "trained on your business" mean something you can do in the time it takes to make a cup of coffee.

Here's exactly how it works.

The Pipeline in Plain English

When you call POST /v2/agents with a business_url, you're kicking off a multi-stage pipeline that runs entirely without you. By the time it's done, a fully configured voice agent is live on your phone number — or ready to claim one.

The stages, in order:

  1. URL crawl — Workforce Wave fetches the root URL and follows internal links up to a configurable depth (default: 3 hops, up to 40 pages)
  2. Content extraction — raw HTML is cleaned, normalized, and passed to an extraction LLM with a structured output schema
  3. Vertical classification — the extracted content is scored against 12 industry verticals; the top match sets the compliance context
  4. System prompt generation — a construction pipeline (not a template fill) builds the full system prompt
  5. Knowledge base seeding — extracted entities are written into structured KB documents
  6. ElevenLabs configuration — the agent is created in ElevenLabs with the generated prompt, KB docs, and voice selection
  7. Phone assignment — the agent is linked to the requested phone number or a new one is provisioned
  8. Operation completion — the operation record flips to active; webhooks fire; you can start taking calls

The whole thing takes 75–120 seconds depending on site complexity, crawl depth, and LLM call chain length.

What's in the System Prompt (the Interesting Part)

This is where most voice AI platforms stop at "fill in the blanks." Workforce Wave doesn't use a template.

The system prompt is constructed by chaining several LLM calls, each responsible for a different section:

Identity and persona block — drawn from the business name, tone signals extracted from the website copy, and the vertical archetype. A dental practice gets clinical, reassuring language. A boutique hotel gets warm and service-oriented. The signals come from the actual copy on the site, not from guesswork.

Services and offerings block — an enumeration of what the business actually offers, with terminology drawn from the site. For dentists, this means CDT code awareness. For medical practices, ICD context. For hotels, room type and amenity vocabulary. The vertical classification from step 3 injects the right terminology layer automatically.

Compliance guardrails block — this is where the vertical classification does its most important work. A dental or medical practice gets HIPAA guardrails: no requesting PHI the agent doesn't need, clear escalation paths for sensitive health questions, PHI handling instructions. A legal practice gets Bar advertising rule constraints. A financial services firm gets disclosure requirements. These aren't optional — they're non-negotiable blocks that get injected regardless of what the website says.

Escalation logic block — triggers for when to transfer to a human. These are partly vertical-specific defaults (a medical practice always escalates for symptoms) and partly extracted from the site content (if the site mentions an emergency line, Workforce Wave finds it and wires it in).

Greeting and persona voice — a brief section that sets the agent's opening line, name (pulled from the business name or a configurable agent_name field), and conversational register.

The final prompt for a typical dental practice is 140–180 lines. It reads like a well-written human agent brief, because that's essentially what it is — just generated from the site in seconds instead of drafted by hand over hours.

What Gets Seeded in the Knowledge Base

The KB is a separate layer from the system prompt. The system prompt handles behavior and persona; the KB handles facts that change over time.

Workforce Wave seeds four document types:

  • Services document — every service/procedure/treatment found on the site, with descriptions, common questions, and pricing context if available
  • Hours and location document — office hours, holiday hours if found, location(s), parking notes, accessibility info
  • FAQ document — synthesized from explicit FAQ pages plus inferred questions from site content ("we get a lot of questions about X" → X becomes an FAQ entry)
  • Staff and team document — names, roles, credentials, and specialties found on the team/about page

These documents are versioned from creation. When Workforce Wave runs its weekly KB sync (more on that in the next post), it diffs the current documents against a fresh crawl and updates only what changed.

Why 90 Seconds and Not 9 Seconds

Three reasons.

Crawl depth and rate limiting. We crawl up to 40 pages and respect robots.txt and rate limits. A site that serves pages at 200ms each adds up. We parallelize where we can, but crawling too aggressively gets you throttled or blocked.

LLM call chains. The system prompt construction isn't a single LLM call — it's 4–6 sequential calls, each building on the output of the last. Each call is 300–800ms at typical API latency. The extraction step alone runs a large context window to process the full cleaned site content, which takes longer than short calls.

ElevenLabs provisioning. Creating an agent in ElevenLabs, seeding the KB documents, and configuring the voice takes real time on their end. We don't control this part of the clock.

The good news: we run the parallelizable parts in parallel (vertical classification happens alongside content extraction, for example), and the whole pipeline is instrumented so we know where each second goes.

The Async Operation Pattern

Workforce Wave provisioning is async by design. You don't wait for it — you check on it.

# Step 1: POST to create the agent — returns immediately
curl -X POST https://api.workforcewave.com/v2/agents \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: provision-smile-dental-001" \
  -d '{
    "payload": {
      "name": "Smile Dental AI",
      "platform": "elevenlabs",
      "business_url": "https://smile-dental.com",
      "template_id": "dental_receptionist"
    }
  }'

# Returns 202 Accepted immediately:
# { "operation_id": "op_abc123", "status": "pending", "estimated_seconds": 90 }

# Step 2: Poll the operation endpoint
curl https://api.workforcewave.com/v2/operations/op_abc123 \
  -H "Authorization: Bearer {token}"

# When complete:
# {
#   "status": "active",
#   "agent_id": "agt_xyz789",
#   "phone_number": "+18005551234",
#   "provisioning_time_seconds": 84
# }

If you'd rather not poll, subscribe to the agent.activated webhook before you POST. You'll get a push notification when the agent goes live — no polling required.

For batch provisioning (say, 47 dental practices at once), the async pattern is what makes it tractable. You fire all 47 POST /v2/agents calls in parallel, each gets an operation_id, and you check results in one pass a couple of minutes later. That's the DSO story — we'll get to that in post 1.5.

What Happens When It Fails

Not every site is scrapeable. Some businesses have mostly PDF content. Some sites block scrapers entirely. Some have almost no structured content — just a phone number and a logo.

Workforce Wave handles this with a graceful fallback.

If the crawl returns less than a minimum content threshold (we measure this as extracted entity count — fewer than 8 distinct entities across all documents), Workforce Wave falls back to a vertical-only system prompt. This is a high-quality, generalist system prompt for the detected industry vertical, with a placeholder for business-specific info and an explicit note in the agent's instructions that it should ask the caller if it's unsure about specific details.

It's not as good as a Workforce Wave-generated prompt. But it's vastly better than nothing, and it means the agent goes live instead of erroring out.

The operation response tells you which path was taken:

{
  "status": "active",
  "agent_id": "agt_xyz789",
  "provisioning_notes": {
    "scout_confidence": "low",
    "fallback_used": true,
    "fallback_reason": "insufficient_crawl_content",
    "recommendation": "Add a business URL with more structured content, or manually seed the KB"
  }
}

When fallback_used is true, we surface a recommendation in the dashboard to either provide a better URL or manually seed the key documents. Most operators do one or the other within a day of going live.

What "Trained on Your Business" Actually Means

Here's the reframe that changed how we talk about this internally: the goal isn't to teach the AI about your business once. It's to build a system where the AI is always current on your business.

The 90-second provisioning is the first training run. But it's not the last. Workforce Wave re-crawls on a weekly schedule, diffs what changed, and proposes KB updates. The prompt optimizer analyzes call patterns and flags where the agent is underperforming. The feedback loop is continuous — not a one-time setup wizard.

When a prospect says "we'd need weeks to train it," what they're picturing is the painful manual version of this process: writing prompts by hand, entering data field by field, iterating through failures until the agent sounds right. What we've built is a system where that work happens automatically, in 90 seconds, and keeps happening week after week without anyone touching it.

That's what "trained on your business" means when the bot builds the bot.


Next in this series: The Knowledge Base Staleness Problem — why most voice AI KBs go stale, and what happens when a patient books an appointment based on outdated insurance info.

Share this article

Ready to put AI voice agents to work in your business?

Get a Live Demo — It's Free