Skip to content
Allan Henslee, PhDResume (PDF)

Case 05Party On Delivery · 2025–2026

One AI receptionist across chat, phone and text

I built Wayne, an AI receptionist that answers web chat, phone calls and text messages from one approved playbook, and hands off to a person cleanly.

Years
2025–2026
Business
Party On Delivery, a local event-delivery business in Austin
Role
Owner; I designed and built the AI system
Channels
Web chat, phone line, text messages
§ 01

The problem

Customers reach a small business by web chat, phone and text, including at times when I can't pick up, and every channel has to give the same correct answer. When each bot's prompt is edited by hand, the bots drift apart: a fact fixed on one channel stays wrong on another, and a bot that guesses or claims to be a person costs trust.

§ 02

What I built

I built one source of truth and generated each channel from it, then added guards that keep the AI quiet when it shouldn't speak.

  • The playbook 31 intent cards, one for each kind of customer question, plus 64 facts. Each of the 59 hand-written facts lists its sources and the date it was last checked; the other 5 (delivery zones and tax) come straight from the code. A tone guide comes from my own past replies. Four tiers decide what happens: answer, answer and flag, draft and hold, or escalate. Facts marked unknown or conflicting are never stated as fact: they go on a do-not-assert list, and the assistant says a person will confirm.
  • Generator and drift check A script rebuilds the web chat prompt from the playbook, and a CI test fails any pull request where the chat copy no longer matches. The phone and text copies are rebuilt by a command that composes them from the same files and refuses to publish from an out-of-date copy.
  • Text-message agent I wrote eight numbered guards that run before the model sees a text: opt-out, duplicate check, human takeover, reply cap and more. It has three tools: escalate to a person, save a lead, and record order details for a person to confirm. It ran first in shadow mode, which sends its drafts to my phone instead of the customer.
  • Voice line and warm transfer I took the voice integration live with the AI answering first. I rebuilt live transfer so a caller who asks for a person is moved to my cell between 9am and 5pm Central. From the incoming-call alert I can tap Take call: my cell rings, and pressing 1 moves the caller off Wayne to me.
  • Next: Robots & Bacon I'm reusing this approach for a text-message demo line for my consulting practice: its facts live in one editable file, plain code handles STOP, HELP and PERSON before any model sees them, and the assistant says plainly that it isn't a person.
§ 03

My part, and who else

Matt Rundle built the original web chat persona in July 2025. He also built the CoreLinq CRM base platform, which included a voice integration that was never switched on. I renamed the persona Wayne in November 2025. Then I built the playbook system, the generator and CI drift check, the text-message agent and its opt-out checks. I also took voice live, rebuilt warm transfer, and wrote the human-takeover silence rule and the guardrails on all three channels.

§ 04

How it works

  1. 01Playbook31 intent cards, 64 sourced facts, tone guide, compliance rules
  2. 02Generator + CI drift checkPR fails if the chat prompt doesn't match the playbook
  3. 03Web chatPrompt regenerated in the same PR
  4. 04Phone lineVoice push refuses a stale playbook copy
  5. 05Text messagesRe-ingest resets to draft mode until I switch it to live
  6. 06GuardrailsOpt-out, human takeover, reply cap, forced escalation
  7. 07A personWarm transfer 9–5 Central, or an escalation alert
Fig. 1 One playbook generates all three channels. Guards decide when the AI stays quiet and a person takes over.

How I know it works

Tests, review, measured results

CheckHowResult

Chat prompt matches the playbook

Playbook test suite, run in CI on every pull request (and by hand on Nov 5, 2026)

163 of 163

Pass

Text-agent guards

Test cases such as: draft mode texts only me, a recent human reply silences Wayne, a failed settings read sends nothing

44 test cases

Live transfer

Test call asking Wayne for a person, Sep 1, 2026

Bridged to my cell

Live
§ 05

Decisions and what went wrong

  • I had the AI answer first instead of ringing me first. When I declined a call, it went to my personal voicemail, and the phone system reported that the same as a human answering. So the AI never picked up on exactly the calls I couldn't take.
  • The playbook is the only place to edit, and every channel is a generated copy. A fact once patched into voice and text by hand was missed by web chat, so hand edits to generated copies are not allowed.
  • I built transfer as a custom tool that moves the caller's phone leg through the phone carrier's API. The voice vendor's built-in transfer can't work with how our line is wired.

What went wrong: The shadow-mode trial for text messages produced no drafts at all. One guard asked the database for a column that didn't exist. The query errored, the guard failed closed, and every incoming text was skipped. In live mode, Wayne would have silently never replied. I fixed it on 2026-09-01: the guard now reads the right column, and I made that one check non-fatal, because it coordinates with canned replies and isn't a compliance gate. The opt-out check still fails closed. I added a test for this case and switched the agent to live the same day.

Why it matters in healthcare

Patient intake and triage lines have the same shape: answer only from approved content, send anything outside it to a person, and let staff take over a conversation cleanly. The playbook works like document control: one approved source where every fact cites where it came from, generated copies, and a check that blocks drift.

§ 06

What changed

Since September 2026, web chat, the phone line and text messages all answer from one playbook with the same guardrails, and every channel can hand off to a person: a live transfer on the phone, a hand reply on text, or an escalation alert from chat.

Under the hood

31

intent cards

64

facts, each with a source

163

playbook tests

44

text-agent test cases

  • TypeScript
  • Next.js
  • Supabase (Postgres)
  • Inngest
  • Twilio
  • Retell (voice)
  • Claude API
  • OpenRouter
  • Vitest
  • GitHub Actions