Product Intelligence
43 lines

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

MCP

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

1

Interpret the user's request and detect intent.

2

Determine whether enough information exists to query Avoma.

3

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

Copy
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
        
}
}