Hi all, I’m building an outbound booking agent for UK estate agencies. It calls back web enquiries, verifies the property address, offers appointment slots from a real calendar, books, and sends an SMS confirmation. It’s a Single Prompt agent right now, about 2.5k tokens with 9 custom functions. All the actual logic is server side, the functions return facts and the agent’s job is to speak them.
I read the recent Single Prompt vs Conversational Agent thread and it matches my experience. I’m past the “1,000 words or 5+ functions” point people mention in there, and I’m seeing exactly the drift that gets described: the model calling a write tool off the wrong kind of user input.
Concrete example from testing last night. The caller says “I’m pretty sure you already booked me in” (they weren’t). That’s a mistaken belief the agent should correct, not a booking request. Instead it called book_appointment and created a real appointment at a time the caller never picked. I’ve been patching this kind of thing in tool descriptions, and yesterday I hit the 1024 character limit on descriptions while trying to squeeze the consent rules in. At that point it feels like I’m fighting the architecture instead of building.
What I’m considering is a thin Conversation Flow: around 15 nodes, topology only, all logic stays in my backend. Fixed nodes for the address read back and the booking confirmation, free dialogue nodes everywhere the conversation needs to sound human. Before I commit I have four questions for anyone running Conversation Flow in production:
-
Does tools.response_variables reliably interpolate into static text node speech? I’ve confirmed the field exists at schema level but the docs don’t cover rendering into node speech. This matters a lot for me, a scripted confirmation that can only speak values my server returned is the main reason to switch.
-
What’s the current status of the static text getting skipped bug (#3394)? A confirmation node that silently doesn’t speak would recreate the exact problem I’m trying to get away from.
-
What latency difference are people actually seeing between flow and single prompt with function heavy agents? I’m at roughly 500-800ms LLM p50 today and can’t afford much regression on a live phone call.
-
How are you consent gating state changing tools? Is a dedicated confirmation node before the booking function the reliable pattern, rather than ever longer tool descriptions? And any multi tenant gotchas with one shared flow plus dynamic variables set at dial time?
I’ve ruled out Flex Mode for this since the docs say it compiles the flow back into a single prompt, which loses the runtime guarantees I’d be switching for in the first place.
Would appreciate any production experiences, especially from anyone who migrated a booking type agent and can say what broke.