Skip to main content
Surface the moments that decide whether a customer stays — cancellation intent, dissatisfaction, competitor mentions, and save opportunities — so teams can act before churn. Churn is just one lens. The same conversational signals surface upsell readiness, loyalty, and product feedback — so you can aim the package at whatever outcome your team owns. Use this package as a starting point — add or swap in any preset from the catalog, or define your own behaviors to fit your use case. This package includes: 6 conversation types · 5 participant roles · 23 behaviors.

Use this package

The config below is ready to use as-is — download or copy it and pass it as the config payload in a Velma Triage request. Its behaviors are preset references: the API expands each preset:<identifier> into its full definition at request time, so you don’t need the criteria inline to run the package. Download customer-retention.json
{
  "conversation_types": [
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111003",
      "name": "Enterprise IT support",
      "short_description": "Any call to assist an employee in accessing or managing internal IT resources",
      "detailed_description": "business-operationsitprofessional"
    },
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111008",
      "name": "General Customer Support Call",
      "short_description": "Any call where a customer is contacting a business to assist them with the use of a service or goods provided by the business",
      "detailed_description": "customer-supportprofessional"
    },
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111027",
      "name": "Finance Account Support",
      "short_description": "Any call to support the configuration, management, or cancellation of financial accounts",
      "detailed_description": "customer-supportprofessional"
    },
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111028",
      "name": "Consumer Technical Support",
      "short_description": "Any call to assist a customer in using a business's software or website",
      "detailed_description": "customer-supportitprofessional"
    },
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111029",
      "name": "Insurance Policy or Claims Management",
      "short_description": "Any call to check on the status of, change, cancel, or check on the status of a claim for an insurance policy.",
      "detailed_description": "customer-supportinsuranceprofessional"
    },
    {
      "conversation_type_uuid": "11111111-1111-4111-8111-111111111031",
      "name": "Retail Customer Support Call",
      "short_description": "A call to coordinate the delivery or transfer of goods to a consumer",
      "detailed_description": "customer-supportprofessionalretail"
    }
  ],
  "participant_roles": [
    {
      "participant_role_uuid": "22222222-2222-4222-8222-222222222004",
      "name": "Support Specialist",
      "short_description": "Someone who works with employees or contractors to solve problems with things like IT, logistics, or communication",
      "detailed_description": ""
    },
    {
      "participant_role_uuid": "22222222-2222-4222-8222-222222222005",
      "name": "Employee",
      "short_description": "someone who is employed by company and exists in professional settings",
      "detailed_description": ""
    },
    {
      "participant_role_uuid": "22222222-2222-4222-8222-222222222012",
      "name": "Customer Service Representative",
      "short_description": "A representative from a business who is assisting a customer with an issue they are having",
      "detailed_description": ""
    },
    {
      "participant_role_uuid": "22222222-2222-4222-8222-222222222014",
      "name": "Insurance Agent",
      "short_description": "A customer support representative from an insurance company",
      "detailed_description": ""
    },
    {
      "participant_role_uuid": "22222222-2222-4222-8222-222222222017",
      "name": "Customer",
      "short_description": "The recipient of a service or good",
      "detailed_description": ""
    }
  ],
  "behaviors": [
    "preset:complaints",
    "preset:vishing",
    "preset:account_impersonation",
    "preset:action_plan_created",
    "preset:cancelled_order",
    "preset:service_churn",
    "preset:off_topic_discussion",
    "preset:coercion_manipulation",
    "preset:return_fraud_attempt",
    "preset:feigned_ignorance",
    "preset:bargaining_manipulation",
    "preset:pre_established_professional_relationship",
    "preset:rapport_building",
    "preset:customer_gratitude",
    "preset:inclusive_practices",
    "preset:unaddressed_question",
    "preset:refund_or_credit_issued",
    "preset:issue_not_resolved",
    "preset:inappropriate_speech",
    "preset:discriminatory_practices",
    "preset:issue_resolved",
    "preset:threat_based_harassment",
    "preset:sexual_harassment"
  ]
}

Expand the full criteria

To produce a self-contained config with every behavior’s full criteria inlined — for review, customization, or pinning a snapshot — fetch the live preset catalog and merge it into the downloaded config. The catalog is the source of truth for detection criteria.
curl -s https://modulate-developer-apis.com/api/velma-2-batch/list-presets \
  -H "X-API-Key: $MODULATE_API_KEY" \
| jq --slurpfile cfg customer-retention.json '
    [ $cfg[0].behaviors[] | ltrimstr("preset:") ] as $ids
    | { conversation_types: $cfg[0].conversation_types,
        participant_roles:  $cfg[0].participant_roles,
        behaviors: [ .presets[] | select(.identifier as $i | $ids | index($i)) ] }
  ' > customer-retention.full.json
customer-retention.full.json keeps the same conversation_types and participant_roles and replaces each preset reference with its full behavior definition — drop it into the config payload exactly like the preset version.

Conversation types

The interaction contexts this package expects to see.
NameWhat it is
Enterprise IT supportAny call to assist an employee in accessing or managing internal IT resources
General Customer Support CallAny call where a customer is contacting a business to assist them with the use of a service or goods provided by the business
Finance Account SupportAny call to support the configuration, management, or cancellation of financial accounts
Consumer Technical SupportAny call to assist a customer in using a business’s software or website
Insurance Policy or Claims ManagementAny call to check on the status of, change, cancel, or check on the status of a claim for an insurance policy.
Retail Customer Support CallA call to coordinate the delivery or transfer of goods to a consumer

Participant roles

The speaker roles the package distinguishes.
NameWhat it is
Support SpecialistSomeone who works with employees or contractors to solve problems with things like IT, logistics, or communication
Employeesomeone who is employed by company and exists in professional settings
Customer Service RepresentativeA representative from a business who is assisting a customer with an issue they are having
Insurance AgentA customer support representative from an insurance company
CustomerThe recipient of a service or good

Behaviors

The 23 signals this package detects. Each maps to a reusable preset:<identifier> you can drop into the behaviors array of any BatchConfig — the config above already references them.
Full detection criteria are not duplicated here. The live preset catalog is the source of truth — retrieve the exact criteria for any behavior by name from the list-presets endpoint.
BehaviorWhat it detectsPreset
ComplaintsCustomer expresses dissatisfaction or grievance. We detect this through elevated volume, sharp intonation, frustration markers, accelerated pacing, and emotional intensity.preset:complaints
VishingAttempts to elicit sensitive information through deceptive voice interactions. We detect vishing based on abnormal call pacing, probing question patterns, stress-induced pitch shifts, and background noise suggesting call centers or spoofed environments.preset:vishing
Account ImpersonationFraudulent attempt to access another’s account. We detect this through identity inconsistencies, rehearsed responses, stress-induced vocal shifts, and abnormal verification behavior.preset:account_impersonation
Action Plan CreatedExplicit agreement on next steps or follow-up. We detect this through structured enumeration, decisive tone, slowed pacing, confirmation cues, and reduced ambiguity in delivery.preset:action_plan_created
Cancelled OrderCustomer cancels a previously placed order. We detect this using finality in tone, decisive pacing, administrative phrasing, and reduced emotional engagement after confirmation.preset:cancelled_order
Service ChurnCustomer decides to cancel an ongoing service. We detect this through resignation tone, conclusive phrasing, disengaging cadence, and emotional withdrawal.preset:service_churn
Off-topic DiscussionConversation largely unrelated to call purpose. We detect this using semantic drift paired with relaxed pacing, reduced task-oriented urgency, and tonal divergence from initial intent.preset:off_topic_discussion
Coercion ManipulationSocial engineering through intimidation or threats. We detect this using dominance-oriented tone, reduced empathy markers, pressure timing, and aggressive pacing.preset:coercion_manipulation
Return Fraud AttemptFraudulent product return behavior. We detect this using scripted explanations, defensive tone, timing irregularities, and emotional mismatch with stated circumstances.preset:return_fraud_attempt
Feigned IgnorancePretending towards ignorance to garner fraudulent sympathy. We detect this using inconsistent knowledge signals, exaggerated confusion tone, strategic pauses, and implausible vocal uncertainty.preset:feigned_ignorance
Bargaining ManipulationSocial engineering through cajoling and persuasion. We detect this through pressure-based tone, strategic silence, inconsistent emotional signaling, and coercive pacing changes.preset:bargaining_manipulation
Pre-established Professional RelationshipEvidence of prior interaction between speakers. We detect this through shorthand references, reduced formalities, synchronized turn-taking, familiarity in tone, and absence of introductory framing.preset:pre_established_professional_relationship
Rapport BuildingPositive alignment forming a professional relationship. We detect this through reciprocal tone matching, affirming backchannels, relaxed pacing, and increasing conversational ease.preset:rapport_building
Customer GratitudeCustomer expresses satisfaction or appreciation. We detect this using positive emotional tone, softened volume, upward inflection, reduced tension markers, and closing politeness cues.preset:customer_gratitude
Inclusive PracticesRespectful language promoting inclusion and equity. We detect this through careful word choice reinforced by respectful tone, measured pacing, non-dismissive intonation, and calm emotional delivery.preset:inclusive_practices
Unaddressed QuestionFailure to adequately respond to a posed question. We detect this through avoidance pauses, topic-shifting intonation, increased filler usage, and prosodic signals of deflection.preset:unaddressed_question
Refund or Credit IssuedConfirmation that financial remediation occurred. We detect this using transactional tone, formal cadence, confirmation phrasing, system-interaction pauses, and reduced customer tension.preset:refund_or_credit_issued
Issue Not ResolvedCustomer’s problem remains unresolved. We detect this through lingering frustration, repeated issue framing, unresolved tonal tension, and absence of closure cues.preset:issue_not_resolved
Inappropriate SpeechUnprofessional or unsuitable spoken content. We detect this using aggressive tone, boundary-crossing language, emotional volatility, and contextual mismatch with professional norms.preset:inappropriate_speech
Discriminatory PracticesSubtle prejudicial decision-making indicators. We detect this through biased framing, dismissive tone shifts, unequal politeness levels, and coded language delivered with emotional distance.preset:discriminatory_practices
Issue ResolvedCustomer’s problem successfully addressed. We detect this using relief markers, positive tonal shift, relaxed pacing, confirmation language, and conversational closure cues.preset:issue_resolved
Threat-based harassmentTargeted threats toward an individual in a professional context. We detect this using aggressive volume, hostile prosody, explicit threat markers, and sustained emotional intensity.preset:threat_based_harassment
Sexual HarassmentUnwanted sexualized speech or advances. We detect this through suggestive intonation, boundary-testing pauses, inappropriate familiarity, and discomfort responses from others.preset:sexual_harassment