CAf63da2b7ebaca9dcd30255449af7610c
ModPod Podiatry · +61481222413 → +61468078235 · pracsuite
Started 28/05/2026, 9:00:26 am · Duration 90s · Turns 6 · Outcome cancelled · End caller_hangup
Call recording · 90s
›Full Transcript · 17 messages
+0:13.7+0:14.4+0:24.0+0:24.5immediate_ack+0:25.8+0:32.4+0:32.8immediate_ack+0:39.2tool_lead_in+0:50.3+1:05.9+1:06.3immediate_ack+1:06.7+1:14.5+1:15.0immediate_ack+1:17.1+1:24.8+1:25.1State Flow · 9 states · 17 utterances
- STATE 01initsynthetic
initWebSocket opened and prefetch (patient lookup, current bookings, recent thread, preferences) is in flight. No agent utterance yet.
- Enters when
- Twilio ConversationRelay opens the WebSocket.
- Exits when
- Prefetch completes → greeting.
- Allowed tools
- No tools — the route layer is fetching DB state in parallel.
+0:00.0Call answered. Agent is initializing the session for ModPod Podiatry.- Tenant:
- ModPod Podiatry
- PMS:
- pracsuite
- Direction:
- +61481222413 → +61468078235
- Conversation:
- 17104630-0354-4f2e-a622-1a1b915f2c23
- greeting· 5.5s laterSTATE 02greetingsynthetic
greetingDeterministic agent greeting plays once prefetch resolves and before the caller speaks for the first time.
- Enters when
- Prefetch resolves; route layer emits the greeting TTS.
- Exits when
- Caller responds → first buildVoiceBookingFlow pass routes to booking_discovery / rescheduling / cancelling / answering_query / verifying_identity.
- Allowed tools
- No tools — single deterministic utterance.
+0:05.3Prefetched the caller’s record in 5.3s. Agent is now greeting the caller.Data prefetched for this callerMatched patientName:Daniel WelshMobile:+61481222413DOB:—First seen:—Last seen:—Outreach status:noneRecent past appointments (showing 5 of 27)6/6/26, 10:30 amNew Biomechanical· Will Zalloua· ModPod Podiatry - Dee Whycancelled5/6/26, 9:00 amFree Bio· Jake Murphy· ModPod Podiatry - Dee Whycancelled4/6/26, 12:00 pmNew Biomechanical· Alison Pasut· ModPod Podiatry - Mosmancancelled3/6/26, 2:50 pmNew Biomechanical· Trent Baker· ModPod Podiatry - Mosmancancelled1/6/26, 3:00 pmNew Biomechanical· Alison Pasut· ModPod Podiatry - Mosmancancelled
27 total appointments on file · 0 pre-call messages in this conversation - booking discovery· 8.8s laterSTATE 03booking discovery/ confirm_intentflow state
booking_discoveryRouter state. Identifies caller intent and dispatches to a super-state branch (appointment_setting / appointment_adjustment / qa / handoff).
- Enters when
- Call starts after greeting, OR a sub-flow returns to the router (e.g. qa side-loop completes).
- Exits when
- Routes into appointment_setting (new booking), appointment_adjustment (touch existing), qa (side question), or handoff (callback/transfer/escalation).
- Allowed tools
- BASE_TOOLS minus CreatePatient. Read-only lookups while still gathering intent.
confirm_intentphaseConfirm we understood what the caller wants before doing anything destructive.
+0:14.1FSM routed to booking discovery (confirm intent). Because booking request medium — said booking-related words. Agent ran clarify existing booking intent. No tools unlocked yet (still gathering info).USER+0:13.7Can I please book an appointmentBOT+0:14.4I can see you already have Wed 3 Jun at 2:50pm with Trent Baker. Did you want to book another appointment, or change that one?FSM internals
trigger:booking_request/medium · evidence=booking_terms · context=unknowndirective:existing_booking_new_booking_intent_unclearaction:clarify_existing_booking_intentallowed tools:none (still gathering)raw:existing_booking_new_booking_intent_unclear - booking discovery· 10.3s laterSTATE 04booking discovery/ elicit_time_windowflow state
booking_discoveryRouter state. Identifies caller intent and dispatches to a super-state branch (appointment_setting / appointment_adjustment / qa / handoff).
- Enters when
- Call starts after greeting, OR a sub-flow returns to the router (e.g. qa side-loop completes).
- Exits when
- Routes into appointment_setting (new booking), appointment_adjustment (touch existing), qa (side question), or handoff (callback/transfer/escalation).
- Allowed tools
- BASE_TOOLS minus CreatePatient. Read-only lookups while still gathering intent.
elicit_time_windowphaseDetermine the caller’s preferred date/time window.
+0:24.4FSM routed to booking discovery (elicit time window). Because reschedule request high — said reschedule-related words. Directive: reschedule. Tools available: GetPatientDetails, CheckAvailability, GetServicesAndPricing, GetAppointmentTypes, ConvertTimezone, EscalateToHuman, TransferCall.USER+0:24.0Oh, I was wondering if I could reschedule.BOT+0:24.5immediate_ackI'll check that now.BOT+0:25.8When would work better for you?USER+0:32.4I'm hoping to get one for later next week.BOT+0:32.8immediate_ackOne moment.BOT+0:39.2tool_lead_inLet me check what's available.toolCheckAvailability0ms · returned_error+0:40.1in:{"date_to":"2026-06-12","date_from":"2026-06-08","business_id":"36","appointment_type_id":"50014"}out:{"error":"Service catalogue not yet read. Call GetServicesAndPricing first so the appointment_type_id you pass to CheckAvailability is grounded in this clinic'…⚠ tool error: Service catalogue not yet read. Call GetServicesAndPricing first so the appointment_type_id you pass to CheckAvailability is grounded in this clinic's actual services — do not pass an appointment_type_id you have not seen returned from a lookup tool in this conversation.toolGetAppointmentTypes448ms · ok+0:43.4in:{}out:[{"name":"Home Visit Morning","duration_minutes":30,"appointment_type_id":"50011"},{"name":"Strapping 20 mins","duration_minutes":30,"appointment_type_id":"500…FSM internals
trigger:reschedule_request/high · evidence=reschedule_terms · context=unknowndirective:rescheduleallowed tools:GetPatientDetails, CheckAvailability, GetServicesAndPricing, GetAppointmentTypes, ConvertTimezone, EscalateToHuman, TransferCallraw:reschedule - offering slots· 25.5s laterSTATE 05offering slots/ present_slotsflow state
offering_slotsinsideappointment_settingCheckAvailability returned candidate slots and the agent has read them back. The caller has not yet picked one or confirmed. Tools restricted to lookups so the agent can answer questions about the offered service without re-calling CheckAvailability or writing.
- Enters when
- Prior assistant turn offered two concrete slots AND session has fresh candidate_slots AND the caller has NOT yet picked one or confirmed.
- Exits when
- Caller picks a slot → awaiting_final_confirmation. Caller asks for different times/service → resolving_service / resolving_location. Caller asks a question about the offered service → stay in offering_slots; LLM answers via lookups. Caller hangs up → closing.
- Allowed tools
- GetServicesAndPricing, GetAppointmentTypes, EscalateToHuman, TransferCall. NO CheckAvailability (slots already loaded). NO write tools.
present_slotsphaseReading the available times back to the caller.
+0:49.9FSM routed to offering slots (present slots). Directive: offering slots present slots inline. Tools available: GetServicesAndPricing, GetAppointmentTypes, GetPatientDetails, EscalateToHuman, TransferCall.toolCheckAvailability3349ms · ok+0:50.0in:{"date_to":"2026-06-12","date_from":"2026-06-08","business_id":"36","appointment_type_id":"50014"}out:{"locations":[{"id":"36","name":"ModPod Podiatry - Mosman"}],"total_slots":10,"location_name":"ModPod Podiatry - Mosman","practitioners":[{"id":"16","name":"Wi…BOT+0:50.3I can do a New Biomechanical appointment for Tue 9 Jun, 5:10pm with Will Zalloua at Mossmen, or a New Biomechanical appointment for Wed 10 Jun, 4:30pm with Trent Baker at Mossmen. Which works better?FSM internals
directive:offering_slots / present_slots_inlineallowed tools:GetServicesAndPricing, GetAppointmentTypes, GetPatientDetails, EscalateToHuman, TransferCallraw:offering_slots / present_slots_inline - booking discovery· 16.2s laterSTATE 06booking discovery/ confirm_cancelflow state
booking_discoveryRouter state. Identifies caller intent and dispatches to a super-state branch (appointment_setting / appointment_adjustment / qa / handoff).
- Enters when
- Call starts after greeting, OR a sub-flow returns to the router (e.g. qa side-loop completes).
- Exits when
- Routes into appointment_setting (new booking), appointment_adjustment (touch existing), qa (side question), or handoff (callback/transfer/escalation).
- Allowed tools
- BASE_TOOLS minus CreatePatient. Read-only lookups while still gathering intent.
confirm_cancelphaseExplicit confirm before a cancellation write fires.
+1:06.2FSM routed to booking discovery (confirm cancel). Because cancel request high — said cancel-related words. Agent ran confirm current booking cancellation. No tools unlocked yet (still gathering info).USER+1:05.9Can you cancel, actually?BOT+1:06.3immediate_ackJust a sec.BOT+1:06.7Just to confirm, that's Wed 3 Jun at 2:50pm with Trent Baker. Should I go ahead and cancel that?FSM internals
trigger:cancel_request/high · evidence=cancel_terms · context=two_slot_choicedirective:single_current_booking_cancellation_requestedaction:confirm_current_booking_cancellationallowed tools:none (still gathering)raw:single_current_booking_cancellation_requested - booking discovery· 8.6s laterSTATE 07booking discovery/ commitflow state
booking_discoveryRouter state. Identifies caller intent and dispatches to a super-state branch (appointment_setting / appointment_adjustment / qa / handoff).
- Enters when
- Call starts after greeting, OR a sub-flow returns to the router (e.g. qa side-loop completes).
- Exits when
- Routes into appointment_setting (new booking), appointment_adjustment (touch existing), qa (side question), or handoff (callback/transfer/escalation).
- Allowed tools
- BASE_TOOLS minus CreatePatient. Read-only lookups while still gathering intent.
commitphaseBooking write in flight (CreateAppointment / RescheduleAppointment / etc).
+1:14.8FSM routed to booking discovery (commit). Because confirmation high — final confirmation prompt. Agent ran cancel confirmed current booking. No tools unlocked yet (still gathering info).USER+1:14.5Yes.BOT+1:15.0immediate_ackGreat, I'll do that now.toolCancelAppt2040ms · ok+1:16.9in:{"appointment_id":"6409752"}out:{"message":"Appointment cancelled successfully. Cancellation SMS sent.","success":true,"appointment_id":"6409752"}BOT+1:17.1That's been cancelled for you. I've sent a cancellation confirmation to your phone. Is there anything else I can help with?FSM internals
trigger:confirmation/high · evidence=final_confirmation_prompt · context=final_confirmationdirective:current_booking_cancellation_confirmedaction:cancel_confirmed_current_bookingallowed tools:none (still gathering)raw:current_booking_cancellation_confirmed - closing· 10.1s laterSTATE 08closingflow state
closinginsidehandoffCall wrapping up without a booking write — caller hung up, refused, redirected, transferred, or escalated.
- Enters when
- End-reason rule fires (emergency, sales, handoff, caller indicates done), OR caller hangs up from any flow state.
- Exits when
- Synthetic ended state follows when the websocket closes.
- Allowed tools
- No tools. One short polite closing sentence.
+1:24.9FSM routed to closing. Because no specific rule matched the caller’s last turn — no FSM rule matched. Directive: The caller is ending the call Do not call tools Close politely in one short se. No tools unlocked yet (still gathering info).USER+1:24.8That's all good. Thank you.BOT+1:25.1No worries, have a great day.FSM internals
trigger:unknown/low · evidence=no_rule_matched · context=unknowndirective:The caller is ending the call. Do not call tools. Close politely in one short seallowed tools:none (still gathering)raw:The caller is ending the call. Do not call tools. Close politely in one short se - ended· 4.9s laterSTATE 09endedsynthetic
+1:29.8Call ended after 90s · 6 turns · reason: caller_hangup.
Tool calls · 4
CheckAvailability 0ms · returned_error
{
"date_to": "2026-06-12",
"date_from": "2026-06-08",
"business_id": "36",
"appointment_type_id": "50014"
}{
"error": "Service catalogue not yet read. Call GetServicesAndPricing first so the appointment_type_id you pass to CheckAvailability is grounded in this clinic's actual services — do not pass an appointment_type_id you have not seen returned from a lookup tool in this conversation.",
"missing": "services_discovered",
"requires_service_resolution": true
}GetAppointmentTypes 448ms · ok
{}[
{
"name": "Home Visit Morning",
"duration_minutes": 30,
"appointment_type_id": "50011"
},
{
"name": "Strapping 20 mins",
"duration_minutes": 30,
"appointment_type_id": "50012"
},
{
"name": "WART",
"duration_minutes": 30,
"appointment_type_id": "150010"
},
{
"name": "Initial Tariq Visit",
"duration_minutes": 30,
"appointment_type_id": "250046"
},
{
"name": "Repeat Tariq Visit",
"duration_minutes": 30,
"appointment_type_id": "250047"
},
{
"name": "Comcare - WC Initial Consult",
"duration_minutes": 30,
"appointment_type_id": "250050"
},
{
"name": "Comcare - WC Standard ",
"duration_minutes": 30,
"appointment_type_id": "250051"
},
{
"name": "Sports Podiatry Follow Up",
"duration_minutes": 30,
"appointment_type_id": "250052"
},
{
"name": "K Laser 20min",
"duration_minutes": 20,
"appointment_type_id": "250055"
},
{
"name": "Collection and KLaser",
"duration_minutes": 30,
"appointment_type_id": "250056"
},
{
"name": "Orthotic Assessment",
"duration_minutes": 0,
"appointment_type_id": "250057"
},
{
"name": "Orth Assessment Existing",
"duration_minutes": 40,
"appointment_type_id": "250058"
},
{
"name": "K Laser/Strapping",
"duration_minutes": 20,
"appointment_type_id": "250060"
},
{
"name": "4 Week Orthotic Review",
"duration_minutes": 0,
"appointment_type_id": "250054"
},
{
"name": "K Laser 10min",
"duration_minutes": 10,
"appointment_type_id": "250059"
},
{
"name": "General 30 mins",
"duration_minutes": 30,
"appointment_type_id": "1000"
},
{
"name": "New Podiatry Comprehensive",
"duration_minutes": 30,
"appointment_type_id": "1001"
},
{
"name": "Biomechanical Existing Pt",
"duration_minutes": 40,
"appointment_type_id": "50002"
},
{
"name": "General 20mins",
"duration_minutes": 20,
"appointment_type_id": "50003"
},
{
"name": "Collection Appt ",
"duration_minutes": 20,
"appointment_type_id": "50004"
},
{
"name": "Orth 6 week check",
"duration_minutes": 20,
"appointment_type_id": "50005"
},
{
"name": "Free Laser Assessment",
"duration_minutes": 30,
"appointment_type_id": "50006"
},
{
"name": "Bio 12 mnth Comprehensive",
"duration_minutes": 30,
"appointment_type_id": "50007"
},
{
"name": "Nail Surgery 1 Toe",
"duration_minutes": 60,
"appointment_type_id": "50009"
},
{
"name": "Nail Surgery 2 Toes",
"duration_minutes": 50,
"appointment_type_id": "50010"
},
{
"name": "New Biomechanical",
"duration_minutes": 40,
"appointment_type_id": "50014"
},
{
"name": "Re-dressing",
"duration_minutes": 30,
"appointment_type_id": "50015"
},
{
"name": "Diabetic Assessment",
"duration_minutes": 30,
"appointment_type_id": "50016"
},
{
"name": "Bio 6 Month Check",
"duration_minutes": 30,
"appointment_type_id": "50017"
},
{
"name": "Initial Laser 1 Foot",
"duration_minutes": 30,
"appointment_type_id": "50019"
},
{
"name": " Hot Laser follow up",
"duration_minutes": 30,
"appointment_type_id": "50020"
},
{
"name": "Shock Wave",
"duration_minutes": 30,
"appointment_type_id": "50021"
},
{
"name": "DVA Foot Health Check",
"duration_minutes": 30,
"appointment_type_id": "50023"
},
{
"name": "Cold Laser",
"duration_minutes": 20,
"appointment_type_id": "50025"
},
{
"name": "Intial Laser 2 Feet",
"duration_minutes": 30,
"appointment_type_id": "50026"
},
{
"name": "Free Bio",
"duration_minutes": 30,
"appointment_type_id": "250025"
},
{
"name": "3 Month Orthotic Review",
"duration_minutes": 20,
"appointment_type_id": "250053"
},
{
"name": "Home Visit Afternoon",
"duration_minutes": 30,
"appointment_type_id": "250061"
}
]CheckAvailability 3349ms · ok
{
"date_to": "2026-06-12",
"date_from": "2026-06-08",
"business_id": "36",
"appointment_type_id": "50014"
}{
"locations": [
{
"id": "36",
"name": "ModPod Podiatry - Mosman"
}
],
"total_slots": 10,
"location_name": "ModPod Podiatry - Mosman",
"practitioners": [
{
"id": "16",
"name": "Will Zalloua"
},
{
"id": "23",
"name": "Trent Baker"
},
{
"id": "22",
"name": "Alison Pasut"
}
],
"available_slots": [
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "16",
"duration_minutes": 50,
"appointment_start": "2026-06-09T17:10:00",
"practitioner_name": "Will Zalloua",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Tue 9 Jun, 5:10pm [2026-06-09T17:10:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-10T16:30:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Wed 10 Jun, 4:30pm [2026-06-10T16:30:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T08:40:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 8:40am [2026-06-11T08:40:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T12:20:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 12:20pm [2026-06-11T12:20:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T14:10:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 2:10pm [2026-06-11T14:10:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T15:20:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 3:20pm [2026-06-11T15:20:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T16:00:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 4pm [2026-06-11T16:00:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "22",
"duration_minutes": 40,
"appointment_start": "2026-06-11T16:00:00",
"practitioner_name": "Alison Pasut",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 4pm [2026-06-11T16:00:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "23",
"duration_minutes": 40,
"appointment_start": "2026-06-11T16:40:00",
"practitioner_name": "Trent Baker",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 4:40pm [2026-06-11T16:40:00]"
},
{
"business_id": "36",
"business_name": "ModPod Podiatry - Mosman",
"practitioner_id": "22",
"duration_minutes": 40,
"appointment_start": "2026-06-11T16:40:00",
"practitioner_name": "Alison Pasut",
"appointment_type_id": "50014",
"appointment_type_name": "New Biomechanical",
"appointment_start_formatted": "Thu 11 Jun, 4:40pm [2026-06-11T16:40:00]"
}
],
"deposits_required": false,
"practitioner_name": "Will Zalloua",
"has_multiple_locations": false,
"has_multiple_practitioners": true
}CancelAppt 2040ms · ok
{
"appointment_id": "6409752"
}{
"message": "Appointment cancelled successfully. Cancellation SMS sent.",
"success": true,
"appointment_id": "6409752"
}Call Notes
FSM Final State
| status | active |
Flow Diagram · 9 states
- 01init5.5s later
- 02greeting8.8s later
- 03booking discovery10.3s later
- 04booking discovery25.5s later
- 05offering slots16.2s later
- 06booking discovery8.6s later
- 07booking discovery10.1s later
- 08closing4.9s later
- 09endedinstant
Click a state to jump to its detail card above. Red border = FSM stalled at a tool inside that state.