Skip to main content

Call Logs

Call logs give you access to every conversation your agents have had—whether from test simulations or real customer calls. Use them to analyze performance, identify training opportunities, and understand what’s working (and what’s not).

Why Call Logs Matter

Historical call data helps you:
  • Identify patterns - See recurring issues across many conversations
  • Validate improvements - Compare performance before and after changes
  • Train better agents - Use successful calls as training examples
  • Ensure compliance - Audit conversations for regulatory requirements
Example: Searching call logs reveals that 80% of escalations happen when customers mention “refund policy.” You update the agent’s prompt to address this proactively.

What’s in a Call Log?

Each call log contains:

Call Metadata

  • Source (VAPI, Bland, etc.)
  • Phone numbers (from/to)
  • Date and duration
  • Agent that handled it
  • Simulation vs real call

Content & Analysis

  • Full audio recording
  • Complete transcript
  • Quality score (if analyzed)
  • AI-powered insights
  • Tags and categories

Viewing Call Logs

Navigate to Call Logs to see:
  • Searchable list of all historical calls
  • Filter by date, agent, score, or source
  • Sort by most recent, lowest score, or longest duration
  • Click any call for detailed view

Analyzing Call Logs

Run Analysis on Historical Calls

Analyze calls that weren’t evaluated when they occurred:
curl -X POST https://api.chanl.ai/v1/call-logs/call_abc123/analyze \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scorecard": "customer-service-quality"
  }'
This generates:
  • Quality score based on scorecard criteria
  • AI-powered analysis of strengths and weaknesses
  • Specific recommendations for improvement
  • Comparison to similar calls

Batch Analysis

Analyze multiple calls at once:
const chanl = require('@chanl/sdk');

// Analyze all unscored calls from last week
const results = await chanl.callLogs.batchAnalyze({
  filters: {
    dateRange: {
      start: '2024-01-08',
      end: '2024-01-15'
    },
    analyzed: false
  },
  scorecard: 'customer-service-quality'
});

console.log(`Analyzed ${results.count} calls`);
console.log(`Average score: ${results.avgScore}`);

Search and Filtering

Find specific types of calls:
# Find failing calls
curl "https://api.chanl.ai/v1/call-logs?minScore=0&maxScore=70" \
  -H "Authorization: Bearer YOUR_API_KEY"
Search within conversation transcripts:
curl -X POST https://api.chanl.ai/v1/call-logs/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "refund policy",
    "dateRange": "30d",
    "minScore": 0,
    "maxScore": 75
  }'
Results show calls where “refund policy” was mentioned and scored below 75:
{
  "results": [
    {
      "callId": "call_xyz789",
      "date": "2024-01-14T10:22:00Z",
      "score": 68,
      "matches": [
        {
          "speaker": "customer",
          "text": "What's your refund policy?",
          "timestamp": 45
        },
        {
          "speaker": "agent",
          "text": "Our refund policy allows returns within 30 days",
          "timestamp": 48
        }
      ]
    }
  ],
  "totalResults": 23
}

Accessing Call Content

Audio Files

Download or stream call recordings:
# Get audio URL
curl https://api.chanl.ai/v1/call-logs/call_abc123/audio \
  -H "Authorization: Bearer YOUR_API_KEY"
Returns a signed URL valid for 1 hour:
{
  "url": "https://chanl-audio.s3.amazonaws.com/...",
  "expiresAt": "2024-01-15T12:00:00Z",
  "format": "mp3",
  "duration": 245,
  "size": 3145728
}

Transcripts

Get full conversation text:
curl https://api.chanl.ai/v1/call-logs/call_abc123/transcript \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "callId": "call_abc123",
  "transcript": [
    {
      "speaker": "agent",
      "timestamp": 0,
      "text": "Thank you for calling. How can I help you today?"
    },
    {
      "speaker": "customer",
      "timestamp": 3.2,
      "text": "I received a damaged product and need a replacement."
    },
    {
      "speaker": "agent",
      "timestamp": 6.8,
      "text": "I'm sorry to hear that. Let me help you with a replacement right away."
    }
  ],
  "duration": 245,
  "wordCount": 487
}

Call Analysis Reports

Individual Call Analysis

View detailed AI analysis:
curl https://api.chanl.ai/v1/call-logs/call_abc123/analysis \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "callId": "call_abc123",
  "overallScore": 87,
  "analysis": {
    "strengths": [
      "Showed immediate empathy for customer's issue",
      "Offered solution within first minute",
      "Confirmed customer satisfaction before ending"
    ],
    "weaknesses": [
      "Didn't verify customer identity before processing",
      "Missed opportunity to upsell protection plan"
    ],
    "recommendations": [
      "Add identity verification step to prompt",
      "Train on upselling during replacement scenarios"
    ]
  },
  "categoryScores": {
    "Communication": 92,
    "Problem Resolution": 88,
    "Compliance": 79
  }
}

Exporting Call Data

Bulk Export

Export multiple calls for external analysis:
curl -X POST https://api.chanl.ai/v1/call-logs/export \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "csv",
    "dateRange": "30d",
    "fields": ["date", "agent", "score", "duration"],
    "filters": {
      "minScore": 0
    }
  }' > calls_export.csv

Finding Training Data

High-Quality Call Examples

Find calls to use as training data:
const chanl = require('@chanl/sdk');

// Find top-performing calls
const topCalls = await chanl.callLogs.list({
  minScore: 90,
  dateRange: '90d',
  limit: 50,
  sortBy: 'score',
  order: 'desc'
});

// Export for fine-tuning
const trainingData = await chanl.fineTuning.prepareDataset({
  calls: topCalls.map(c => c.id),
  format: 'conversational'
});

console.log(`Prepared ${topCalls.length} high-quality examples for training`);

Problem Pattern Identification

Find calls with recurring issues:
const chanl = require('@chanl/sdk');

// Find common failure patterns
const patterns = await chanl.callLogs.analyzePatterns({
  filters: {
    maxScore: 70,
    dateRange: '30d'
  },
  groupBy: 'issue_type'
});

console.log('Common issues:');
patterns.forEach(p => {
  console.log(`- ${p.issue}: ${p.count} occurrences (${p.percentage}%)`);
});

/*
Common issues:
- Refund policy confusion: 23 occurrences (34%)
- Unable to verify customer: 15 occurrences (22%)
- Tool failure: 12 occurrences (18%)
*/

Compliance & Auditing

Find calls for regulatory review:
curl -X POST https://api.chanl.ai/v1/call-logs/compliance-search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "dateRange": {
      "start": "2024-01-01",
      "end": "2024-01-31"
    },
    "requiredDisclosures": [
      "data_privacy_notice",
      "call_recording_notice"
    ],
    "onlyFlagged": true
  }'
Returns calls missing required disclosures:
{
  "flaggedCalls": [
    {
      "callId": "call_compliance123",
      "date": "2024-01-15T09:30:00Z",
      "missingDisclosures": ["call_recording_notice"],
      "severity": "high"
    }
  ],
  "totalFlagged": 3,
  "complianceRate": 98.7
}

Best Practices

1

Analyze Regularly

Run analysis on all calls, not just the ones with obvious issues. You’ll discover patterns you didn’t know existed.
2

Search Before Building

Before creating new scenarios, search call logs to find real examples of situations you want to test.
3

Export for Records

Regularly export call data for compliance and backup purposes. Don’t rely solely on cloud storage.
4

Tag and Categorize

Add tags to calls (e.g., “excellent_example”, “training_needed”) for easier filtering later.
5

Compare Time Periods

When you make changes, compare call logs from before and after to measure impact.

Troubleshooting

Problem: Expected calls not appearing in call logsSolutions:
  • Verify date range filter includes when call occurred
  • Check if call actually completed (not dropped)
  • Confirm agent is connected and logging enabled
  • Look in failed calls section
Problem: Audio playback fails or URL expiredSolutions:
  • Audio URLs expire after 1 hour - request new URL
  • Check browser allows audio playback
  • Try downloading file instead of streaming
  • Verify call has audio recording (some simulations might not)
Problem: Batch analysis timing out or very slowSolutions:
  • Reduce batch size to 50-100 calls at a time
  • Run analysis during off-peak hours
  • Consider processing in smaller date ranges
  • Contact support for large-scale analysis needs
Problem: Transcript search returns no resultsSolutions:
  • Try broader search terms (e.g., “refund” vs “refund policy”)
  • Verify spelling of search terms
  • Check if calls have been transcribed
  • Expand date range

What’s Next?