Call Summarization
Automatically generate concise summaries of conversations.
Overview
Call Summarization helps you:
- Create quick call overviews
- Extract key decisions and action items
- Track conversation outcomes
- Improve record-keeping efficiency
- Enable quick call reviews
How It Works
SpeechLytics summarization analyzes the full transcription to:
- Identify key points: Main topics discussed
- Extract outcomes: Decisions made and resolutions
- Generate summary: Concise overview of the call
- Highlight actions: Follow-up items and next steps
Getting Call Summaries
From Transcript Status
curl -X GET "https://api.example.com/api/v1/transcripts/123456789/status" \
-H "Authorization: Bearer YOUR_TOKEN"
Response includes summary:
{
"callSummary": {
"summary": "Customer called regarding billing discrepancy on account #12345. Agent investigated and found double charge from last payment. Customer satisfied with explanation. Issue resolved by issuing refund credit of $50 to account effective immediately. Customer will receive credit in next billing cycle."
}
}
Summary Fields
| Field | Description |
|---|---|
| summary | Human-readable call summary |
Summary Structure
Summaries typically include:
-
Caller Information
- Who called and why
- Account/reference numbers
-
Key Topics
- Main issues discussed
- Resolutions offered
-
Actions Taken
- What was resolved
- What was escalated
-
Outcomes
- Customer satisfaction level
- Follow-up requirements
-
Next Steps
- Required follow-up
- Timelines
Example Summaries
Customer Service Call
Customer contacted regarding delayed order #ORD-2025-001. Agent reviewed
order status and confirmed it is in transit with expected delivery Friday.
Customer accepted timeline. Agent provided tracking number: 1Z123456789.
No further action required.
Technical Support Call
Customer experiencing login issues with mobile app. Agent requested logs
and identified DNS configuration problem on customer's network. Customer
implemented suggested DNS changes (8.8.8.8, 8.8.4.4). Issue resolved.
App now accessible. Customer confirmed working status.
Sales Call
Prospect inquired about enterprise pricing for 500+ users. Agent provided
overview of features and pricing tier options. Prospect interested in
comprehensive package. Next step: Product demo scheduled for Tuesday
at 2 PM. Sales rep: John (ext. 4532).
Integration Example
Python
import requests
class SummaryAnalyzer:
def __init__(self, api_base, token):
self.api_base = api_base
self.headers = {"Authorization": f"Bearer {token}"}
def get_summary(self, transcript_id):
"""Get call summary"""
response = requests.get(
f"{self.api_base}/api/v1/transcripts/{transcript_id}/status",
headers=self.headers
)
transcript = response.json()
summary = transcript.get('callSummary', {})
return summary.get('summary', '')
def extract_action_items(self, transcript_id):
"""Extract action items from summary"""
summary = self.get_summary(transcript_id)
action_keywords = [
'follow up', 'call back', 'send', 'email', 'callback',
'next step', 'scheduled', 'meeting', 'appointment', 'check'
]
lines = summary.split('. ')
action_items = []
for line in lines:
lower_line = line.lower()
if any(keyword in lower_line for keyword in action_keywords):
action_items.append(line.strip())
return action_items
def extract_resolution(self, transcript_id):
"""Extract call resolution from summary"""
summary = self.get_summary(transcript_id)
resolution_indicators = [
'resolved', 'fixed', 'issued', 'provided', 'explained',
'clarified', 'confirmed', 'approved', 'denied'
]
lines = summary.split('. ')
resolutions = []
for line in lines:
lower_line = line.lower()
if any(indicator in lower_line for indicator in resolution_indicators):
resolutions.append(line.strip())
return resolutions
# Usage
analyzer = SummaryAnalyzer("https://api.example.com", "your_token")
# Get summary
summary = analyzer.get_summary(123456789)
print("Call Summary:", summary)
# Extract action items
actions = analyzer.extract_action_items(123456789)
print("Action Items:", actions)
# Extract resolutions
resolutions = analyzer.extract_resolution(123456789)
print("Resolutions:", resolutions)
Summary Quality
Factors affecting summary quality:
-
Audio Quality
- Clear audio produces better summaries
- Background noise can affect accuracy
- Proper microphone placement helps
-
Speech Clarity
- Clear pronunciation important
- Mumbling affects transcription
- Accents may need extra processing
-
Conversation Structure
- Well-organized conversations summarize better
- Rambling calls are harder to summarize
- Multiple concurrent topics complicate summaries
Advanced Features
Key Metrics Extraction
{
"callSummary": {
"summary": "...",
"duration_seconds": 180,
"topics": ["Billing", "Account Update"],
"sentiment": "Positive",
"customer_satisfaction": 0.92,
"resolution_time": 120,
"actions_required": 2,
"escalation_needed": false
}
}
Timeline Extraction
{
"timeline": [
{
"timestamp": 0,
"event": "Customer called regarding order status"
},
{
"timestamp": 45,
"event": "Agent found tracking information"
},
{
"timestamp": 120,
"event": "Customer satisfied with update"
}
]
}
Use Cases
1. Record Keeping
- Create formal call records
- Document customer interactions
- Maintain audit trail
- Enable call reviews
2. Quality Assurance
- Review agent performance
- Identify training needs
- Monitor call handling
- Reward best practices
3. Customer Service
- Quick call reviews
- Customer follow-up
- Issue resolution tracking
- Escalation identification
4. Business Intelligence
- Track common issues
- Identify trends
- Measure resolution effectiveness
- Inform process improvements
5. Automation
- Trigger workflows based on content
- Route based on detected issues
- Create tickets from summaries
- Send alerts for escalations
CRM Integration
Push Summaries to CRM
def sync_summary_to_crm(transcript_id, api_token, crm_api_key):
"""Sync call summary to CRM system"""
# Get summary from SpeechLytics
analyzer = SummaryAnalyzer("https://api.example.com", api_token)
summary = analyzer.get_summary(transcript_id)
# Get customer info from transcript
response = requests.get(
f"https://api.example.com/api/v1/transcripts/{transcript_id}/status",
headers={"Authorization": f"Bearer {api_token}"}
)
transcript = response.json()
# Prepare CRM update
crm_payload = {
'transcript_id': transcript_id,
'summary': summary,
'call_date': transcript.get('created'),
'duration': transcript.get('duration'),
'sentiment': transcript.get('sentiments', [{}])[0].get('title'),
'call_type': transcript.get('name')
}
# Update CRM
crm_response = requests.post(
"https://crm.company.com/api/calls",
headers={"Authorization": f"Bearer {crm_api_key}"},
json=crm_payload
)
return crm_response.json()
Visualization
Summary Dashboard Widget
┌─────────────────────────────────────┐
│ Call Summary - ID: 123456789 │
├─────────────────────────────────────┤
│ Customer called regarding billing │
│ discrepancy. Issue identified and │
│ resolved with $50 credit issued. │
│ │
│ ✓ Resolved │
│ ⚠ Follow-up: Check if credit posts │
└─────────────────────────────────────┘
Best Practices
1. Review Summaries
- Always review AI-generated summaries
- Verify key information accuracy
- Add missing details manually
- Provide feedback for improvement
2. Consistency
- Use summaries for all calls
- Maintain standard format
- Track summary quality
- Monitor improvement over time
3. Action Items
- Extract and track actions
- Set reminders for follow-ups
- Assign responsibility
- Monitor completion
4. Training
- Share good summary examples
- Identify patterns to improve
- Train agents on clear communication
- Provide feedback
Troubleshooting
Summary Too Short
- Audio may be low quality
- Limited conversation content
- Transcription incomplete
- Try re-processing with better audio
Summary Too Long
- May include unnecessary details
- Complex multi-topic conversation
- Consider breaking into segments
- Adjust summarization parameters
Missing Key Information
- May not have been in audio
- Spoken too quickly or unclearly
- Overlapping speakers
- Review original transcription
Next Steps
- Sentiment Analysis - Emotional analysis
- Topic Detection - Topic identification
- Named Entity Recognition - Entity extraction
- Translation - Language translation
Summarization need to be enabled on your account in order to process the transcription and get summary.
Usage
To enable summarization, you will need to contact sales.
Once enabled, after transcription is finished, summarization will be automatically executed.
Result
The transcription result will contain a "callsummary" key with the output of the model:
"{
"transcription": {...},
"callsummary": {
"summary": "string"
},
}"
You’ll find the summarization of your audio under the summary key.