A map of how the assistant handles a call. We will walk through this together on our kickoff call.
flowchart TD
HEADER([INBOUND VOICE AGENT]):::header
ICS([Inbound Call Starts]):::pill
A1("Agent: Greeting, ask for name
(Agent says it's an AI & call is being recorded)"):::agent
A2("Agent: Ask reason for the call"):::agent
BR{Branch}:::branch
HEADER --> ICS --> A1 --> A2 -->|USER: gives reason| BR
%% ===== Main branches =====
B_REC("Questions about Recreational Classes"):::agent
B_COMP("Questions about Competitive & Teams"):::agent
B_CAMP("Questions about Summer Camps"):::agent
B_PARTY("Questions about Birthday Parties"):::agent
B_ADULT("Questions about Adult Classes"):::agent
B_TRIAL("Questions about Free Trial"):::agent
B_GEN("General Questions"):::agent
BR --> B_REC & B_COMP & B_CAMP & B_PARTY & B_ADULT & B_TRIAL & B_GEN
%% ---------- Recreational Classes ----------
REC_FAQ["Rec Class FAQ"]:::topic
REC_TYPES["Class types / levels"]:::topic
REC_CUR["Current Schedule"]:::topic
REC_TRIAL("Request a free trial"):::agent
REC_LEAVE["Leave message and email"]:::topic
REC_ANS("Agent: Attempt to answer question"):::agent
REC_SMS("Sends Schedule / Register Link via SMS"):::agent
REC_PH("Agent confirms Phone number"):::agent
REC_FN[("Function: SEND SMS")]:::func
REC_DIR("Agent: Directs Caller to registration portal"):::agent
REC_CANT("If Agent can't answer question"):::agent
REC_MSG("Offer to take a message for a call back"):::agent
REC_EMAIL("Instruct caller to send email with questions"):::agent
B_REC --> REC_FAQ & REC_TYPES & REC_CUR & REC_TRIAL
REC_FAQ --> REC_ANS
REC_TYPES --> REC_ANS
REC_CUR --> REC_ANS
REC_ANS --> REC_SMS --> REC_PH --> REC_FN
REC_ANS --> REC_DIR
REC_ANS --> REC_CANT --> REC_MSG & REC_EMAIL
REC_TRIAL --> REC_LEAVE
%% ---------- Competitive & Teams ----------
COMP_FAQ["Competitive / Teams FAQ"]:::topic
COMP_AUD("Book an audition / placement"):::agent
COMP_ABS("Caller reports student absent from class"):::agent
COMP_ANS("Agent: Attempt to answer question"):::agent
COMP_CANT("If Agent can't answer question"):::agent
COMP_MSG("Offer to take a message for a call back"):::agent
COMP_EMAIL("Instruct caller to send email with questions"):::agent
COMP_TRY("Try out / placement request"):::agent
COMP_EM["Email to studio:
Name, Phone #, dance experience"]:::topic
COMP_NOTE("Agent: Takes notes and notifies staff"):::agent
COMP_FN[("Function: NOTIFY studio email")]:::func
COMP_FD["Studio Email"]:::topic
B_COMP --> COMP_FAQ & COMP_AUD & COMP_ABS
COMP_FAQ --> COMP_ANS --> COMP_CANT --> COMP_MSG & COMP_EMAIL
COMP_AUD --> COMP_TRY --> COMP_EM
COMP_ABS --> COMP_NOTE --> COMP_FN --> COMP_FD
%% ---------- Summer Camps ----------
CAMP_PRICE["Camp Pricing"]:::topic
CAMP_FAQ["Camp FAQ"]:::topic
CAMP_BOOK["Camp Booking / Dates"]:::topic
CAMP_ANS("Agent: Attempt to answer question"):::agent
CAMP_CANT("If Agent can't answer question"):::agent
CAMP_MSG("Offer to take a message for a call back"):::agent
CAMP_EMAIL("Instruct caller to send email with questions"):::agent
CAMP_SMS("Sends Booking Link via SMS"):::agent
CAMP_PH("Agent confirms Phone number"):::agent
CAMP_FN[("Function: SEND SMS")]:::func
CAMP_DIR("Agent: Directs Caller online booking page"):::agent
B_CAMP --> CAMP_PRICE & CAMP_FAQ & CAMP_BOOK
CAMP_FAQ --> CAMP_ANS --> CAMP_CANT --> CAMP_MSG & CAMP_EMAIL
CAMP_BOOK --> CAMP_SMS --> CAMP_PH --> CAMP_FN
CAMP_BOOK --> CAMP_DIR
%% ---------- Birthday Parties ----------
PARTY_BOOK["Party Booking Dates"]:::topic
PARTY_PRICE["Party Pricing"]:::topic
PARTY_FAQ["Party FAQ"]:::topic
PARTY_DIR("Agent: Directs Caller to party form"):::agent
PARTY_SMS("Sends Booking Link via SMS"):::agent
PARTY_PH("Agent confirms Phone number"):::agent
PARTY_FN[("Function: SEND SMS")]:::func
PARTY_ANS("Agent: Attempt to answer question"):::agent
PARTY_CANT("If Agent can't answer question"):::agent
PARTY_MSG("Offer to take a message for a call back"):::agent
PARTY_EMAIL("Instruct caller to send email with questions"):::agent
B_PARTY --> PARTY_BOOK & PARTY_PRICE & PARTY_FAQ
PARTY_BOOK --> PARTY_DIR
PARTY_BOOK --> PARTY_SMS --> PARTY_PH --> PARTY_FN
PARTY_FAQ --> PARTY_ANS --> PARTY_CANT --> PARTY_MSG & PARTY_EMAIL
%% ---------- Adult Classes ----------
ADULT_SCHED["Adult Class Schedule"]:::topic
ADULT_FAQ["Adult Class FAQ"]:::topic
ADULT_PRICE["Adult Class Pricing"]:::topic
ADULT_REG["How to register"]:::topic
ADULT_ANS("Agent: Attempt to answer question"):::agent
B_ADULT --> ADULT_SCHED & ADULT_FAQ & ADULT_PRICE & ADULT_REG
ADULT_SCHED --> ADULT_ANS
ADULT_FAQ --> ADULT_ANS
ADULT_PRICE --> ADULT_ANS
ADULT_REG --> ADULT_ANS
%% ---------- Free Trial ----------
TRIAL_EXPL("Explains free trial for new students"):::agent
TRIAL_SMS("Sends Free Trial Link via SMS"):::agent
TRIAL_PH("Agent confirms Phone number"):::agent
TRIAL_FN[("Function: SEND SMS")]:::func
TRIAL_MSG("Or takes caller info to set up the trial"):::agent
B_TRIAL --> TRIAL_EXPL
TRIAL_EXPL --> TRIAL_SMS --> TRIAL_PH --> TRIAL_FN
TRIAL_EXPL --> TRIAL_MSG
%% ---------- General Questions ----------
GEN_HOURS["Opening hours"]:::topic
GEN_CLOS["Closure dates"]:::topic
GEN_STAFF("Talk to Front Desk"):::agent
GEN_HANS("Agent: Attempt to answer question"):::agent
GEN_CFN[("Function: Agent checks closure dates")]:::func
GEN_CANS("Agent: Attempt to answer question"):::agent
GEN_BR{Branch}:::branch
GEN_CB("Agent: Offer to have the front desk call them back"):::agent
GEN_NFN[("Function: NOTIFY front desk")]:::func
GEN_TR["Transfer: Front desk phone number & availability"]:::topic
GEN_TFN[("Function: TRANSFER CALL")]:::func
B_GEN --> GEN_HOURS & GEN_CLOS & GEN_STAFF
GEN_HOURS --> GEN_HANS
GEN_CLOS --> GEN_CFN --> GEN_CANS
GEN_STAFF --> GEN_BR
GEN_BR -->|Front desk is NOT available| GEN_CB --> GEN_NFN
GEN_BR -->|Front desk is available| GEN_TR --> GEN_TFN
%% ---------- Close (anchored to the bottom, below every branch) ----------
ENDQ("Agent: Ask if there are any more questions"):::agent
ENDC([Call End]):::pill
%% invisible links pull the close block beneath all branches
REC_FN ~~~ ENDQ
COMP_FD ~~~ ENDQ
CAMP_FN ~~~ ENDQ
PARTY_FN ~~~ ENDQ
ADULT_ANS ~~~ ENDQ
TRIAL_FN ~~~ ENDQ
GEN_TFN ~~~ ENDQ
ENDQ --> ENDC
N_END["Every branch ends here:
agent asks if anything else, then ends the call"]:::note
ENDQ -.- N_END
classDef header fill:#37B26B,stroke:#2f7d45,color:#ffffff,font-weight:bold;
classDef pill fill:#6B7280,stroke:#4b5563,color:#ffffff;
classDef agent fill:#D6C9F5,stroke:#7C3AED,color:#2A2150;
classDef topic fill:#D9583B,stroke:#B23A22,color:#ffffff;
classDef func fill:#F5DFA0,stroke:#CAA23C,color:#5b4a14;
classDef branch fill:#BFE8C9,stroke:#3FA45A,color:#14532d,font-weight:bold;
classDef note fill:#CFE6FB,stroke:#5B9BD5,color:#1e3a5f;