Plan overview
Voice of Customer Chat
A conversational Voice-of-Customer analyst that interprets a request, figures out which Avoma data it needs, and either answers or asks for the missing email or date range.
Best for
Product marketing · Customer success · Product
Runs with
Avoma · Conversational · Intent detection
At a glance
04
Outputs
01
Capabilities
03
Teams
Core outputs
Detected intent
Inferred keywords
Answer
Follow-up question
Capability requirements
What it solves
Ad-hoc questions about customer calls stall because the underlying tools can only be queried by attendee or date, not by topic.
Makes customer-call analysis accessible through plain conversation.
Prevents hallucinated queries by asking for what it actually needs.
Keeps a dialogue state so multi-turn research stays coherent.
Workflow
Interpret the user's request and detect intent.
Determine whether enough information exists to query Avoma.
Answer directly, or ask for the missing email or date range to continue.
Implementation
Review the underlying FML plan — the sessions, tools, and typed schemas that define this workflow — and see exactly how it is instructed for repeatable execution.
FML Plan
voc-chat.fml
43 lines
system("You are an expert product marketing manager who acts as the voice of the customer. You analyze customer interactions and feedback.") parameter("chat_prompt", type=string, title="User Request") parameter("chat_history", type=string, default="", title="Previous Chat History") require mcp Avoma session("analyze_and_respond") { use mcp Avoma + The user is asking: "{{ .params.chat_prompt }}" {{ if .params.chat_history }} Consider the previous conversation context: {{ .params.chat_history }} {{ end }} First, figure out what data is needed from Avoma to answer this question. IMPORTANT: The Avoma tool (`list_meetings`) CANNOT search by meeting title, topic, or keyword. It can ONLY filter by: - Date range (from_date / to_date) - Attendee emails - CRM record IDs (Account, Opportunity, Lead) If the user asked about a meeting using a keyword, topic, or company name (e.g., "Code and theory call") without providing an exact date range or an attendee email, DO NOT guess or hallucinate parameters. Identify the keywords they used, note what is missing (email or date), and prepare to ask the user for them. If you do have enough information (or if they asked for a relative date like 'this week'), call get_current_datetime first to set your bounds, then fetch the meetings, transcripts, or notes. - Now, analyze the data you gathered to answer the user's request. If the user provided a title/topic/keyword instead of an email/date, extract those into `inferred_keywords`. Then, explain this limitation in the `answer` and ask them for the email or date range. Always try to provide a conversational follow-up question to keep the dialogue fluid. schema { intent_detected: string # What you understood the user wants to achieve inferred_keywords?: string[] # Meeting titles, topics, or company names the user mentioned (e.g., "Code and theory") missing_requirements?: string[] # What we need from the user to perform the search (e.g., "Attendee email", "Date range") answer: string # Your expert PMM response, or your request for the missing email/date follow_up_question?: string # A question to ask the user to clarify or continue the chat is_complete: boolean # True if you answered the core request, False if you are blocked waiting for more info } }