Live for the sales team, who can each turn any public website into a demo-ready voice agent in about a minute without help from engineering.
The problem
After an internal demo of a voice agent went well, the sales team wanted the same experience to be about the customer. A generic demo agent shows the technology. An agent that already knows the prospect’s services, locations and contact details shows what it would be like for them. Building one by hand before each meeting wasn’t practical. The salespeople needed to do it themselves, quickly, without being able to break each other’s demos.
What I did
- Gathered requirements before building: agents per salesperson, ownership rules, knowledge depth, persona, access and behaviour inside a Teams meeting. Then I showed a local design mock-up connected to the real showcase agent before writing the backend.
- Built the website-to-agent pipeline. The crawler reads the homepage, then the sitemap, then discovered links. It reads contact and about pages first and caps each section of a site so location or product pages can’t crowd out everything else. It also strips the menus and footers that repeat across pages. Web research runs in parallel and retries with a plainer prompt if the model declines, never passing a refusal on as knowledge.
- Wrote the knowledge for listening, not reading. The condensing step produces a structured brief of 2,500–4,500 words with no URLs, a single main contact line and an explicit list of gaps, so the agent says what isn’t known instead of inventing it.
- Measured retrieval through a search tool against placing the brief inline in the agent’s instructions. Inline started answering three to four times sooner, which matters in a live conversation, so that’s what ships.
- Made it safe to hand to a team. Microsoft sign-in and a staff allow-list control access, and the browser gets short-lived voice tokens from the app’s managed identity, so staff need no Azure roles. Anyone can talk to any agent, but only its owner or an admin can rebuild or reset it. Admins manage the team from the page itself, with optimistic concurrency so two admins saving at once can’t overwrite each other.
- Kept the footprint small: one Function App, one identity-only storage account, one model deployment, with infrastructure in Bicep. Deploys go through GitHub Actions with OIDC and a role scoped to the single app, and they fail unless every function is actually registered on the live app.
Result
It went from request to a live, signed-in tool for the sales team in about a day, with each salesperson owning their own agent. Test builds against real business websites in healthcare, chemicals, financial services, and against our own site, each finished in about a minute. The agents gave grounded answers and said when something like pricing wasn’t published rather than making it up.