Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.blackbox.dasha.ai/llms.txt

Use this file to discover all available pages before exploring further.

Configure analysis forms with labeled fields, and AI populates them from each transcript. Results arrive via webhook or API, ready for your CRM, analytics pipeline, or alerting workflows. What you’ll learn: Label configuration, extraction types, CRM integration, and analytics patterns.

Why Use Post-Call Analysis?

Eliminate Manual Review

Instead of listening to call recordings or reading transcripts, Dasha BlackBox automatically delivers structured summaries after each call.

Enable CRM Integration

The system flows extracted data directly into your CRM systems, automatically updating customer records with conversation outcomes and sentiment.

Business Intelligence

Aggregate analysis data across thousands of calls to identify trends, measure satisfaction, track resolution rates, and optimize agent performance.

Compliance and Quality Assurance

Automatically verify calls cover required topics, disclosures are made, or specific information is collected.

Trigger Workflows

Use extracted data to trigger automated workflows: escalate negative sentiment calls, schedule follow-ups, update ticket systems, or alert managers.

How to Configure Post-Call Analysis

Step 1: Create Analysis Form

  1. Open your agent’s configuration
  2. Navigate to the Features tab
  3. Scroll to Post-Call Analysis section
  4. Click Add Analysis Form
You can create multiple analysis forms per agent, each analyzing different aspects of conversations.

Step 2: Configure Analysis Form

Analysis Name
  • Identifier for this analysis
  • Example: “Customer Satisfaction Analysis”, “Lead Qualification Data”, “Support Ticket Info”
Enable/Disable Toggle
  • Control whether this analysis runs
  • Useful for temporarily disabling specific analyses without deleting configuration

Step 3: Define Data Labels

Click Add Label to define each label the AI should determine from the conversation. For each label, configure: Label Name
  • Identifier (alphanumeric, hyphens, underscores only)
  • Used in API responses and webhooks
  • Example: customer_sentiment, issue_resolved, product_name
Label Description
  • What the AI should determine from the conversation
  • Be specific and clear
  • Example: “The customer’s overall sentiment about the interaction: positive, neutral, or negative”
Data Type
  • String: Free-form text (names, descriptions, notes)
  • Number: Numeric values (ratings, counts, amounts)
  • Boolean: True/false values (yes/no questions)
  • Enum: Predefined set of options (dropdown-style choices)
Enum Values (if Data Type is Enum)
  • List allowed values
  • Example for sentiment: positive, neutral, negative
  • Example for product: ProductA, ProductB, ProductC
Required Flag
  • Whether this field must have a value
  • If required and not found in transcript, analysis may mark field as unable to determine

Configuration Examples

{
  "analysisName": "Support Call Analysis",
  "enabled": true,
  "labels": [
    {
      "name": "customer_sentiment",
      "description": "Customer's overall sentiment: positive, neutral, or negative",
      "type": "enum",
      "values": ["positive", "neutral", "negative"],
      "required": true
    },
    {
      "name": "issue_resolved",
      "description": "Was the customer's issue fully resolved during the call?",
      "type": "boolean",
      "required": true
    },
    {
      "name": "issue_category",
      "description": "Category of the issue discussed",
      "type": "enum",
      "values": ["billing", "technical", "account", "shipping", "other"],
      "required": true
    },
    {
      "name": "follow_up_needed",
      "description": "Does this customer need follow-up contact?",
      "type": "boolean",
      "required": false
    },
    {
      "name": "resolution_notes",
      "description": "Brief summary of how the issue was resolved",
      "type": "string",
      "required": false
    }
  ]
}
{
  "analysisName": "Lead Qualification",
  "enabled": true,
  "labels": [
    {
      "name": "interest_level",
      "description": "Prospect's level of interest in the product",
      "type": "enum",
      "values": ["high", "medium", "low", "not_interested"],
      "required": true
    },
    {
      "name": "budget_discussed",
      "description": "Did the prospect discuss budget or pricing?",
      "type": "boolean",
      "required": true
    },
    {
      "name": "timeline",
      "description": "When does the prospect want to make a decision?",
      "type": "enum",
      "values": ["immediate", "this_month", "this_quarter", "long_term", "unclear"],
      "required": true
    },
    {
      "name": "decision_maker",
      "description": "Is this prospect the decision maker?",
      "type": "boolean",
      "required": true
    },
    {
      "name": "next_step",
      "description": "What is the agreed upon next step?",
      "type": "string",
      "required": true
    },
    {
      "name": "competitors_mentioned",
      "description": "Names of competitors the prospect mentioned, if any",
      "type": "string",
      "required": false
    }
  ]
}
{
  "analysisName": "Appointment Details",
  "enabled": true,
  "labels": [
    {
      "name": "appointment_confirmed",
      "description": "Did the caller confirm their appointment?",
      "type": "boolean",
      "required": true
    },
    {
      "name": "appointment_date",
      "description": "The confirmed appointment date and time",
      "type": "string",
      "required": true
    },
    {
      "name": "reminder_preferred",
      "description": "Does the caller want a reminder call or SMS?",
      "type": "boolean",
      "required": false
    },
    {
      "name": "special_requests",
      "description": "Any special requests or accommodations needed",
      "type": "string",
      "required": false
    },
    {
      "name": "caller_mood",
      "description": "Overall mood/demeanor of the caller",
      "type": "enum",
      "values": ["friendly", "neutral", "frustrated", "rushed"],
      "required": false
    }
  ]
}
{
  "analysisName": "Survey Responses",
  "enabled": true,
  "labels": [
    {
      "name": "nps_score",
      "description": "Net Promoter Score: How likely is the customer to recommend us? (0-10)",
      "type": "number",
      "required": true
    },
    {
      "name": "service_rating",
      "description": "Customer rating of service quality (1-5)",
      "type": "number",
      "required": true
    },
    {
      "name": "primary_feedback",
      "description": "Main feedback or suggestion the customer provided",
      "type": "string",
      "required": false
    },
    {
      "name": "willing_to_follow_up",
      "description": "Is customer willing to be contacted for follow-up questions?",
      "type": "boolean",
      "required": false
    }
  ]
}

Accessing Analysis Results

Analysis results are included in result webhook payloads:
{
  "call_id": "call_abc123",
  "transcript": "...",
  "analysis_results": {
    "Support Call Analysis": {
      "customer_sentiment": "positive",
      "issue_resolved": true,
      "issue_category": "billing",
      "follow_up_needed": false,
      "resolution_notes": "Updated payment method, issue resolved"
    }
  }
}
Configure result webhooks to receive analysis data automatically.
Retrieve call results including analysis data:
GET /v1/calls/{call_id}/result
Response includes analysis_results with all configured analyses.

Via Dashboard

View analysis results in the call history:
  1. Navigate to Calls page
  2. Select completed call
  3. View “Analysis Results” section

Common Use Cases

Customer Support

Labels: Sentiment, resolution status, issue category, follow-up needs Use: Update support tickets, measure satisfaction, identify escalation needs

Sales Qualification

Labels: Interest level, budget discussed, decision maker status, timeline Use: Score leads, prioritize follow-ups, update CRM automatically

Appointment Scheduling

Labels: Confirmation status, appointment details, reminders needed Use: Update calendar systems, send confirmations, schedule reminders

Survey Collection

Labels: Ratings, scores, feedback, willingness to follow up Use: Aggregate survey data, identify promoters/detractors, analyze trends

Compliance Verification

Labels: Required disclosures made, consent obtained, information provided Use: Quality assurance, regulatory compliance, agent performance tracking

Product Feedback

Labels: Products mentioned, feature requests, pain points, competitive intel Use: Product roadmap, competitive analysis, customer insights

Technical Considerations

Analysis Accuracy

Post-call analysis is typically 85-95% accurate:
  • Clear conversations with specific information are easiest to analyze
  • Vague or ambiguous conversations may result in “unable to determine” for some labels
  • Enum labels are generally more accurate than free-form string labels

Processing Time

Analysis occurs after call completion:
  • Typically processes within 5-30 seconds after call ends
  • Complex analyses with many fields may take longer
  • Results delivered via webhook once processing completes

Transcript Quality

Analysis accuracy depends on transcript quality:
  • Clear audio improves extraction accuracy
  • Background noise or crosstalk can affect results
  • Proper speech recognition configuration helps

Multiple Analyses

You can configure multiple analysis forms:
  • Each runs independently
  • Results are namespaced by analysis name
  • Use multiple forms to organize different data extraction needs

Data Privacy

Be mindful of data privacy:
  • Only analyze information you have legitimate need for
  • Consider applicable data privacy regulations when labeling personal data
  • Analysis results flow through webhooks—ensure secure transmission

Measuring Effectiveness

Key Metrics

  • Label completion rate - Percentage of calls with all required labels populated
  • Accuracy rate - Manual verification of label correctness
  • Unable to determine rate - How often labels can’t be determined from conversation
  • Downstream integration success - Do CRM/analytics systems receive correct data?

Quality Assurance Process

  1. Sample Review - Manually verify 10-20 call analyses weekly
  2. Compare to Transcripts - Ensure labeled data matches conversation content
  3. Track “Unable to Determine” - Identify patterns in analysis failures
  4. Refine Descriptions - Improve label descriptions based on accuracy results
  5. Adjust Requirements - Make fewer labels required if analysis often fails

Troubleshooting

Problem: Field Consistently Shows “Unable to Determine”

Solution: Description may be too vague or information genuinely not in conversations. Review transcripts to verify information is discussed. Improve label description with examples. Consider making field optional if not always applicable.

Problem: Wrong Enum Value Assigned

Solution: Enum values may be ambiguous or similar. Use more distinct value names. Improve label description to clarify when each value should be used. Add examples: “positive (customer expresses satisfaction)”.

Problem: String Fields Contain Too Much Text

Solution: Refine description to request “brief summary” or “one sentence”. Be specific about length expectations. Consider using enum instead if values are predictable.

Problem: Numbers Determined Incorrectly

Solution: Clarify in description what format numbers should be in. Example: “Rating from 1-5” vs. “Percentage from 0-100”. Verify transcripts actually contain numeric values.

Problem: Analysis Results Not in Webhook

Solution: Verify result webhook is configured. Check analysis is enabled. Ensure call completed successfully (analysis only runs for completed calls). Review webhook logs for delivery issues.

Integration Examples

Use webhook to update CRM when calls complete:
// Webhook receiver
app.post('/call-result-webhook', (req, res) => {
  const { call_id, analysis_results } = req.body;

  const analysis = analysis_results["Support Call Analysis"];

  // Update CRM
  crm.updateTicket({
    callId: call_id,
    sentiment: analysis.customer_sentiment,
    resolved: analysis.issue_resolved,
    category: analysis.issue_category,
    followUpNeeded: analysis.follow_up_needed
  });

  res.sendStatus(200);
});
Trigger manager alerts for negative calls:
if (analysis.customer_sentiment === "negative" && !analysis.issue_resolved) {
  notificationService.alertManager({
    priority: "high",
    subject: "Negative call requiring follow-up",
    callId: call_id
  });
}
Stream analysis data to analytics warehouse:
analyticsDB.insert({
  timestamp: new Date(),
  callId: call_id,
  sentiment: analysis.customer_sentiment,
  resolved: analysis.issue_resolved,
  category: analysis.issue_category
});

Next steps

Webhooks

Receive analysis results automatically

Tools & Functions

Extend agent capabilities during calls

Knowledge Bases

Improve response quality

Call History

Track conversation metrics