
- Prospect reply receivedWebhook, single or batchedFires once and is never resent. Everything downstream has to assume there is no second chance at this message.
- Payload parsed, reply validatedNon-replies and bounces drop out hereThe first branch exists so the expensive path is never entered for something that was not a human reply.
- Timezone detected from the reply headersEvery time quoted back is in the prospect's local time. The prospect never does arithmetic, and never confirms a slot they converted wrong.
- Calendar identity and event type resolvedResolved at runtime rather than hardcoded, so the agent follows whoever owns the account rather than a fixed calendar.
- Availability retrieved, four weeks deepFour paged calls merged, per-week error captureThe endpoint caps at seven days. Capturing errors per week means one failed request narrows the range rather than killing the run.
- Slots formatted into the prospect's local time
- Intent classified and email draftedEight outcomes, fixed templates, temperature 0.1The model does judgement. The system does everything the model should not be trusted with — which is all the prose a chief executive will read.
- Response parsed, auto-book decidedThe branch that decides whether the agent acts or only replies. It is also where the defect sits: a confidence score is computed here and read by nothing.
- Booked, and the booking verifiedConfirmation on success, recovery email if the slot wentThe genuine race condition. Verifying after booking is what stops the agent confirming a meeting that does not exist.
- Or sent, then watched for 48 hoursRe-checks whether they booked before nudgingA prospect never gets chased about a meeting they already booked, which is the failure that makes automation obvious.
On failureThe genuine race condition is a slot taken between proposal and confirmation. The agent catches the booking failure and sends a link rather than confirming a meeting that does not exist.
Cold outbound produces a specific kind of work nobody enjoys and everybody does badly: the scheduling volley.
A prospect replies sounds interesting, I’m around Tuesday afternoon. Someone opens the calendar, finds Tuesday is booked, proposes Wednesday, waits. The prospect replies Wednesday at 3 works. Someone creates the event, sends the invite, hopes it lands. Three or four emails and two days for one meeting.
At volume this becomes the constraint on the whole channel, and it is where deals leak — the reply that arrives Friday evening and gets answered Monday afternoon has already lost the prospect’s attention.
A booking link alone does not solve it. Sending a bare scheduling link to a senior executive who has just written a courteous, specific reply reads as a downgrade, and converts like one.
The requirement was to automate the negotiation without automating away the tone.
The details that carry it
Timezone inference. Before anything else the workflow reads the UTC offset out of the reply’s date header and maps it to a named timezone. Every time subsequently quoted to the prospect is in their local time. This removes an entire category of scheduling error — the prospect never does arithmetic, and never confirms a slot they mentally converted wrong.
Real availability, four weeks deep. The availability endpoint caps at seven days per request, so the workflow makes four sequential calls and merges them, with per-week error capture so one failed request degrades the range rather than killing the run. Only genuinely open times are proposed.
Eight outcomes, fuzzy matching. A requested time that is available; one that is not; a day named without a time; general openness; confirmation of a proposed slot; a reschedule; a question about the call; an opt-out. Matching is deliberately loose — 4pm is allowed to match a 4:30 slot, morning matches the 9–11 band — because a prospect proposing a time means it approximately, and a system that insists on exact matches sends unnecessary email.
Voice. The templates are fixed and written to the account owner’s actual phrasing, down to the practical asides that make a message read as human. The model selects a template and fills in times. It does not get to invent prose.
Threading. Replies go out as a reply to the specific message that triggered the run, not as a new send. The prospect sees one continuous conversation.
The principle underneath it
Automated scheduling usually fails in one of two directions. Either it is a bare booking link that offloads the work onto the prospect, or it is a model improvising emails, which eventually produces something embarrassing in front of a chief executive.
This is the third option. The model does judgement — reading intent, matching times, choosing a path. The system does everything the model should not be trusted with: fixed prose, real calendar data, deterministic threading, and a defined path for every branch including the ones where things fail.
Which makes the defect above the more instructive part of the build. The architecture was designed around not trusting the model with prose, and then trusted it completely on intent — computing exactly the signal that would have caught a weak inference, and never reading it.
Failure modes
The agent computed a confidence score on every classification and nothing read it. Not one branch. Below forty per cent or above ninety, it sent the email either way. The expensive half of the problem — inferring intent — was solved, and the cheap half — refusing to act when the inference is weak — was skipped. There is no accuracy figure because no evaluation set was built, and the reliability of the booking path is unverified.
Sources and methodology
- Scope
- A production client-engagement architecture with client and vendor identifiers removed. The booking path and its failure controls are described; no reliability or conversion figure is claimed without an evaluation set.
- How this was produced
- Reconstructed from the deployed workflow configuration and retained canvas. The confidence-control defect and missing evaluation evidence are reported as part of the case study rather than corrected retrospectively.
Read the editorial standards, corrections policy and AI-use disclosure.
