Start here
The State Machine You Were About to Write Already Exists — LiveKit Voice Agents
Phone agents need dates, room types, and callback numbers. The instinct is a CallState dataclass and next_question(). LiveKit Agents already solved that with AgentTask and TaskGroup — here's the hotel receptionist that shows how.