Appendix B: Workforce Optimization (WFO) Configuration Guide¶
Complete Setup for Quality Management, Workforce Management, Speech Analytics, and Performance Optimization¶
Document Version: 1.0
Project: KidsWear India - Cisco Webex Contact Center Greenfield Deployment
Related Chapter: Chapter 4 - Platform Provisioning (LLD)
Last Updated: March 2026
Table of Contents¶
- WFO Overview and Licensing
- Quality Management (QM) Configuration
- Workforce Management (WFM) Setup
- Speech Analytics Configuration
- Performance Dashboards and KPIs
- Agent Coaching and Development
- Compliance Recording and Monitoring
- Alternative Approaches for MSMEs
- Integration with Webex Contact Center
- Go-Live and Optimization
1. WFO Overview and Licensing¶
1.1 What is Workforce Optimization?¶
Workforce Optimization (WFO) is a comprehensive suite of tools designed to improve contact center efficiency, agent performance, and customer experience through:
- Quality Management (QM): Call recording, evaluation, and feedback
- Workforce Management (WFM): Forecasting, scheduling, and adherence tracking
- Speech Analytics: Automated call analysis and sentiment detection
- Performance Management: Agent scorecards and KPI tracking
- Coaching and Training: Structured agent development programs
1.2 Licensing Requirements¶
Webex Contact Center WFO Licensing:
| Component | License Type | Cost Model | Minimum Users |
|---|---|---|---|
| Recording | Standard (included) | Per agent/month | 1 |
| Quality Management | WFO Essentials | Per agent/month | 5 |
| Workforce Management | WFO Pro | Per agent/month | 10 |
| Speech Analytics | WFO Premium | Per agent/month | 25 |
| Full Suite | WFO Enterprise | Per agent/month | 50+ |
KidsWear India Deployment: - Current Plan: Webex Contact Center Standard (includes basic recording) - Recommended: WFO Essentials (QM) for 20 agents - Future Upgrade: WFO Pro (adds WFM) after 6 months of operations
1.3 WFO Architecture¶
┌─────────────────────────────────────────────────────────────────┐
│ Webex WFO Platform │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Quality │ │ Workforce │ │ Speech │ │
│ │ Management │ │ Management │ │ Analytics │ │
│ │ (QM) │ │ (WFM) │ │ (SA) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └──────────────────┴───────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Recording │ │
│ │ Storage (AWS │ │
│ │ S3) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌──────────────────┴──────────────────┐ │
│ │ Webex Contact Center Core │ │
│ │ (Call Routing, Agent Desktop) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
1.4 Integration Points¶
| System | Integration Method | Data Flow | Purpose |
|---|---|---|---|
| Webex CC → WFO | Native API | Call metadata, agent states | Automatic recording trigger |
| WFO → Webex CC | REST API | Evaluation scores, coaching flags | Agent performance tracking |
| WFO → Zendesk | Webhook | Quality scores, compliance alerts | CRM data enrichment |
| WFO → GCP | Export | Speech transcripts | AI model training |
2. Quality Management (QM) Configuration¶
2.1 QM System Setup¶
Step 1: Enable Quality Management Module
- Navigate to Control Hub → Contact Center → Features
- Enable Quality Management
- Accept license terms
- Configure storage location:
- Region: US-West (AWS us-west-2)
- Retention: 90 days (calls), 1 year (evaluations)
- Encryption: AES-256
Step 2: Configure Recording Rules
# Navigate to: WFO Portal → Settings → Recording Rules
Rule Name: Record All Customer Calls
Rule Type: Always Record
Scope: All Teams
Channels: Voice, Screen
Recording Mode: Full Interaction
Pause/Resume: Enabled (for PCI-DSS)
Recording Rule Configuration:
| Rule ID | Rule Name | Trigger | Teams | Channels | Storage |
|---|---|---|---|---|---|
| RR-001 | Record All Calls | Always | All | Voice, Screen | 90 days |
| RR-002 | Compliance Recording | All Queues | Sales, Billing | Voice | 1 year |
| RR-003 | Screen Recording | Agent Login | Sales | Screen | 30 days |
| RR-004 | Spot Recording | Random 20% | Support | Voice | 90 days |
Step 3: Configure PCI-DSS Pause/Resume
// IVR Flow Designer - SecureForm Node Configuration
{
"nodeType": "SecureForm",
"nodeName": "Collect_Payment_Details",
"properties": {
"recording": {
"action": "pause",
"scope": "all", // Pause both audio and screen recording
"resumeAfter": true
},
"fields": [
{
"fieldName": "cardNumber",
"fieldType": "encrypted",
"mask": true,
"tokenize": true
},
{
"fieldName": "cvv",
"fieldType": "encrypted",
"mask": true,
"tokenize": false
}
]
}
}
2.2 Evaluation Form Creation¶
Step 1: Design Evaluation Form
Navigate to: WFO Portal → Quality Management → Evaluation Forms → Create New
Sample Evaluation Form: Customer Service Call
Form Name: Customer Service Evaluation
Form Version: 1.0
Applicable Teams: Sales, Support
Total Points: 100
Sections:
- Section: Opening (15 points)
Questions:
- Question: "Did agent greet customer professionally?"
Type: Yes/No
Points: 5
Weight: High
- Question: "Did agent verify customer identity?"
Type: Yes/No
Points: 5
Weight: Critical
- Question: "Did agent set expectations?"
Type: Yes/No
Points: 5
Weight: Medium
- Section: Problem Resolution (40 points)
Questions:
- Question: "Did agent accurately identify the issue?"
Type: Scale (1-5)
Points: 10
Weight: High
- Question: "Did agent provide correct solution?"
Type: Yes/No
Points: 15
Weight: Critical
- Question: "Did agent verify resolution with customer?"
Type: Yes/No
Points: 10
Weight: High
- Question: "Was escalation handled appropriately?"
Type: Yes/No/NA
Points: 5
Weight: Medium
- Section: Communication Skills (25 points)
Questions:
- Question: "Was agent's tone professional and empathetic?"
Type: Scale (1-5)
Points: 10
Weight: High
- Question: "Did agent use active listening?"
Type: Yes/No
Points: 5
Weight: Medium
- Question: "Was communication clear and concise?"
Type: Scale (1-5)
Points: 10
Weight: High
- Section: Closing (10 points)
Questions:
- Question: "Did agent summarize resolution?"
Type: Yes/No
Points: 5
Weight: Medium
- Question: "Did agent thank customer?"
Type: Yes/No
Points: 5
Weight: Low
- Section: Compliance (10 points)
Questions:
- Question: "Did agent follow security procedures?"
Type: Yes/No
Points: 5
Weight: Critical
- Question: "Was call properly documented?"
Type: Yes/No
Points: 5
Weight: High
Scoring:
- 90-100: Excellent
- 80-89: Good
- 70-79: Satisfactory
- 60-69: Needs Improvement
- Below 60: Unsatisfactory
Auto-Fail Criteria:
- Identity verification skipped
- Security breach
- Compliance violation
Step 2: Create Form in WFO Portal
# Navigate to: WFO → QM → Forms → Create
1. Form Details:
Name: "Customer Service Evaluation"
Description: "Standard evaluation for sales and support calls"
Active: Yes
2. Add Sections (5 sections as above)
3. Configure Scoring:
- Weighted scoring enabled
- Auto-fail rules configured
- Score thresholds set
4. Assign to Teams:
- Sales Team
- Support Team
5. Save and Publish
2.3 Evaluator Configuration¶
Step 1: Create Evaluator Roles
Navigate to: Control Hub → Users → Roles → Create Custom Role
QM Evaluator Role Permissions:
| Permission Category | Specific Permissions | Access Level |
|---|---|---|
| Recording Access | View recordings, Download audio | Read |
| Evaluation | Create evaluations, Submit scores | Write |
| Reporting | View QM reports, Export data | Read |
| Coaching | Assign coaching sessions | Write |
| Calibration | Participate in calibration | Read/Write |
Step 2: Assign Evaluators
# Navigate to: WFO → QM → Evaluators → Add
Evaluator 1:
Name: Priya Sharma (Team Lead - Sales)
Email: priya.sharma@kidswear.in
Teams: Sales Team
Quota: 10 evaluations/week/agent
Focus Areas: Sales skills, Compliance
Evaluator 2:
Name: Amit Patel (Team Lead - Support)
Email: amit.patel@kidswear.in
Teams: Support Team
Quota: 10 evaluations/week/agent
Focus Areas: Technical accuracy, Customer satisfaction
Evaluator 3:
Name: Sunita Rao (QA Manager)
Email: sunita.rao@kidswear.in
Teams: All Teams
Quota: 5 calibration evaluations/week
Focus Areas: Calibration, Consistency
2.4 Evaluation Workflow¶
Automated Evaluation Assignment:
# Python script for automated evaluation assignment
import random
from datetime import datetime, timedelta
class EvaluationAssignment:
def __init__(self):
self.min_evaluations_per_agent_per_week = 2
self.max_evaluations_per_agent_per_week = 3
def assign_evaluations_weekly(self):
"""Assign evaluations at start of week"""
agents = self.get_active_agents()
evaluators = self.get_evaluators()
assignments = []
for agent in agents:
# Determine number of evaluations for this agent
num_evals = random.randint(
self.min_evaluations_per_agent_per_week,
self.max_evaluations_per_agent_per_week
)
# Get random calls from last week
calls = self.get_agent_calls(
agent_id=agent['id'],
start_date=datetime.now() - timedelta(days=7),
end_date=datetime.now(),
sample_size=num_evals
)
# Assign to evaluator (team lead or QA manager)
evaluator = self.get_evaluator_for_agent(agent['id'], evaluators)
for call in calls:
assignment = {
'agent_id': agent['id'],
'agent_name': agent['name'],
'call_id': call['id'],
'call_date': call['date'],
'evaluator_id': evaluator['id'],
'evaluator_name': evaluator['name'],
'due_date': datetime.now() + timedelta(days=5),
'status': 'pending'
}
assignments.append(assignment)
# Send notification to evaluator
self.send_evaluation_notification(assignment)
return assignments
def get_evaluator_for_agent(self, agent_id, evaluators):
"""Assign appropriate evaluator based on team"""
agent_team = self.get_agent_team(agent_id)
# Find evaluator for this team
for evaluator in evaluators:
if agent_team in evaluator['teams']:
return evaluator
# Fallback to QA manager
return self.get_qa_manager()
Manual Evaluation Process:
- Evaluator Login → WFO Portal → My Evaluations
- Select Call → Click on assigned call
- Listen to Recording → Play audio, view screen recording
- Complete Form → Answer all questions
- Add Comments → Provide specific feedback
- Submit Score → Final score calculated automatically
- Agent Notification → Agent receives evaluation via email/desktop
2.5 Calibration Sessions¶
Purpose: Ensure consistency among evaluators
Calibration Process:
Calibration Session Setup:
Frequency: Monthly
Duration: 2 hours
Participants: All evaluators + QA Manager
Sample Size: 5 calls
Session Agenda:
1. Select Calibration Calls (10 minutes)
- Mix of teams and complexity
- Include edge cases
2. Individual Evaluation (30 minutes)
- Each evaluator scores independently
- No discussion during this phase
3. Score Comparison (30 minutes)
- Compare scores across evaluators
- Identify discrepancies (>10 point variance)
4. Discussion and Alignment (40 minutes)
- Discuss scoring rationale
- Clarify interpretation guidelines
- Update evaluation form if needed
5. Action Items (10 minutes)
- Document agreed-upon standards
- Schedule re-calibration if needed
- Update training materials
Calibration Metrics:
- Inter-rater reliability score: Target >85%
- Standard deviation: Target <8 points
- Auto-fail agreement: Target 100%
2.6 Quality Scorecards¶
Agent Quality Scorecard Structure:
Scorecard: Monthly Agent Quality Report
Period: November 2025
Agent: [Agent Name]
Metrics:
- Overall QM Score: 87/100 (Good)
- Number of Evaluations: 12
- Trend: +3 points from October
Section Breakdown:
- Opening: 14/15 (93%)
- Problem Resolution: 36/40 (90%)
- Communication Skills: 22/25 (88%)
- Closing: 9/10 (90%)
- Compliance: 10/10 (100%)
Strengths:
- Excellent compliance adherence
- Strong problem-solving skills
- Professional tone
Areas for Improvement:
- Active listening (scored 3/5 in 4 out of 12 evaluations)
- Call summarization (missed in 3 evaluations)
Action Plan:
- Coaching session on active listening techniques
- Shadow top performer for call closing best practices
- Review documentation on Nov 30
Next Review: December 15, 2025
3. Workforce Management (WFM) Setup¶
3.1 WFM Module Activation¶
Prerequisites: - WFO Pro license purchased - Historical call data (minimum 6 months recommended) - Team and skill definitions finalized
Step 1: Enable WFM Module
# Navigate to: Control Hub → Contact Center → WFM
1. Click "Enable Workforce Management"
2. Accept license agreement
3. Configure timezone: Asia/Kolkata (UTC+5:30)
4. Set business hours:
- Monday-Saturday: 9:00 AM - 9:00 PM
- Sunday: Closed
5. Define holidays (Indian national holidays)
6. Save configuration
3.2 Historical Data Import¶
Step 1: Export Historical Data from Webex CC
-- SQL query to extract 6 months of historical call data
SELECT
call_date,
date_part('hour', call_time) AS hour_of_day,
date_part('dow', call_date) AS day_of_week,
queue_name,
skill_requirement,
COUNT(*) AS calls_offered,
SUM(CASE WHEN answered = true THEN 1 ELSE 0 END) AS calls_answered,
AVG(handle_time) AS avg_handle_time,
AVG(after_call_work_time) AS avg_acw_time
FROM call_detail_records
WHERE call_date >= CURRENT_DATE - INTERVAL '6 months'
GROUP BY call_date, hour_of_day, day_of_week, queue_name, skill_requirement
ORDER BY call_date, hour_of_day;
Step 2: Upload to WFM System
# Navigate to: WFM → Data Import → Historical Data
1. Select file: historical_call_data_6months.csv
2. Map columns:
- Date → call_date
- Hour → hour_of_day
- Queue → queue_name
- Offered → calls_offered
- Handled → calls_answered
- AHT → avg_handle_time
- ACW → avg_acw_time
3. Validate data (check for anomalies)
4. Import
3.3 Forecasting Configuration¶
Forecasting Model Setup:
Forecast Configuration:
Algorithm: Holt-Winters Exponential Smoothing
Seasonality: Weekly (7 days)
Trend: Additive
Confidence Interval: 80%
Input Parameters:
- Historical period: 6 months
- Forecast horizon: 4 weeks (rolling)
- Update frequency: Weekly (every Monday)
- Include holidays: Yes
- Include marketing campaigns: Yes (requires manual input)
Adjustment Factors:
- Diwali period: +30% call volume
- Year-end sale: +50% call volume
- Monsoon season: -10% call volume
- School reopening: +20% call volume
Step 1: Run Initial Forecast
# Navigate to: WFM → Forecasting → Generate Forecast
1. Select forecast period: Next 4 weeks
2. Select queues: All (Sales, Support)
3. Apply seasonal adjustments: Yes
4. Include upcoming holidays: Yes
- Diwali (November 12-13, 2025)
5. Run forecast
6. Review forecast accuracy (compare with actuals from last month)
7. Adjust parameters if MAE > 15%
8. Publish forecast
Sample Forecast Output:
| Date | Day | Queue | Calls (Forecast) | Calls (Lower Bound) | Calls (Upper Bound) | AHT (sec) | Shrinkage (%) |
|---|---|---|---|---|---|---|---|
| Nov 22 | Fri | Sales | 187 | 168 | 206 | 312 | 25% |
| Nov 22 | Fri | Support | 245 | 221 | 269 | 405 | 25% |
| Nov 23 | Sat | Sales | 223 | 201 | 245 | 298 | 20% |
| Nov 23 | Sat | Support | 312 | 281 | 343 | 389 | 20% |
3.4 Staffing Requirements¶
Erlang C Calculation:
# Python script for Erlang C staffing calculation
import math
from scipy.special import factorial
class ErlangC:
def __init__(self, call_volume, aht, service_level_target, target_answer_time):
"""
call_volume: Calls per hour
aht: Average handle time in seconds
service_level_target: % of calls answered within target (e.g., 0.80 for 80%)
target_answer_time: Target answer time in seconds (e.g., 20)
"""
self.call_volume = call_volume
self.aht = aht
self.service_level_target = service_level_target
self.target_answer_time = target_answer_time
# Calculate traffic intensity (Erlangs)
self.traffic_intensity = (call_volume * aht) / 3600
def erlang_c(self, agents):
"""Calculate probability of wait (Erlang C formula)"""
a = self.traffic_intensity
n = agents
# Erlang C formula
numerator = (a ** n / factorial(n)) * (n / (n - a))
denominator = sum([a ** k / factorial(k) for k in range(n)]) + numerator
pw = numerator / denominator
return pw
def service_level(self, agents):
"""Calculate service level for given number of agents"""
pw = self.erlang_c(agents)
# Probability of answering within target time
sl = 1 - (pw * math.exp(-((agents - self.traffic_intensity) * self.target_answer_time / self.aht)))
return sl
def calculate_required_agents(self):
"""Calculate minimum agents needed to meet service level"""
# Start with traffic intensity rounded up
agents = int(math.ceil(self.traffic_intensity)) + 1
while self.service_level(agents) < self.service_level_target:
agents += 1
# Safety check
if agents > self.traffic_intensity * 3:
raise Exception("Unable to meet service level target")
return agents
def generate_staffing_report(self, shrinkage=0.25):
"""Generate complete staffing requirement"""
raw_agents = self.calculate_required_agents()
# Account for shrinkage (breaks, training, meetings, absenteeism)
productive_factor = 1 - shrinkage
total_agents = int(math.ceil(raw_agents / productive_factor))
report = {
'call_volume_per_hour': self.call_volume,
'aht_seconds': self.aht,
'traffic_intensity_erlangs': round(self.traffic_intensity, 2),
'service_level_target': f"{self.service_level_target * 100}%/{self.target_answer_time}s",
'raw_agents_required': raw_agents,
'shrinkage_percent': f"{shrinkage * 100}%",
'total_agents_required': total_agents,
'actual_service_level': f"{self.service_level(raw_agents) * 100:.1f}%"
}
return report
# Example usage
erlang = ErlangC(
call_volume=187, # Calls per hour
aht=312, # AHT in seconds
service_level_target=0.80, # 80% service level
target_answer_time=20 # Within 20 seconds
)
staffing = erlang.generate_staffing_report(shrinkage=0.25)
print(staffing)
# Output:
# {
# 'call_volume_per_hour': 187,
# 'aht_seconds': 312,
# 'traffic_intensity_erlangs': 16.22,
# 'service_level_target': '80.0%/20s',
# 'raw_agents_required': 21,
# 'shrinkage_percent': '25.0%',
# 'total_agents_required': 28,
# 'actual_service_level': '80.3%'
# }
3.5 Schedule Generation¶
Step 1: Define Shift Templates
Navigate to: WFM → Shifts → Create Shift Template
Shift Templates for KidsWear:
| Shift ID | Shift Name | Start Time | End Time | Duration | Breaks | Lunch |
|---|---|---|---|---|---|---|
| SH-001 | Morning Full | 9:00 AM | 6:00 PM | 9 hours | 2 × 15 min | 1 hour |
| SH-002 | Afternoon Full | 12:00 PM | 9:00 PM | 9 hours | 2 × 15 min | 1 hour |
| SH-003 | Morning Part | 9:00 AM | 2:00 PM | 5 hours | 1 × 15 min | - |
| SH-004 | Evening Part | 4:00 PM | 9:00 PM | 5 hours | 1 × 15 min | - |
Step 2: Configure Scheduling Rules
Scheduling Rules:
- Rule: Maximum consecutive working days
Value: 6 days
- Rule: Minimum rest between shifts
Value: 12 hours
- Rule: Maximum shift hours per week
Value: 48 hours
- Rule: Minimum shift hours per week (full-time)
Value: 40 hours
- Rule: Weekend coverage requirement
Value: 50% of team must work Saturday
- Rule: Preferred shift patterns
Value: Agents can rank shift preferences 1-4
- Rule: Skill requirements
Value: Each shift must have minimum 1 agent with each critical skill
Step 3: Generate Schedule
# Navigate to: WFM → Scheduling → Generate Schedule
1. Select schedule period: Week of November 22-28, 2025
2. Load forecast data
3. Load agent availability
4. Apply scheduling rules
5. Run optimizer
6. Review generated schedule
7. Make manual adjustments (agent requests, skill gaps)
8. Publish schedule to agents
Sample Generated Schedule:
Week: November 22-28, 2025
Team: Sales
| Agent Name | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Total Hours |
|------------|-----|-----|-----|-----|-----|-----|-----|-------------|
| Rajesh K. | SH-001 | SH-001 | SH-001 | SH-001 | SH-001 | OFF | SH-003 | 50 |
| Priya S. | SH-002 | SH-002 | OFF | SH-002 | SH-002 | SH-001 | OFF | 45 |
| Amit P. | SH-001 | OFF | SH-001 | SH-001 | SH-001 | SH-001 | OFF | 45 |
| Sunita R. | SH-003 | SH-003 | SH-003 | SH-003 | SH-003 | OFF | OFF | 25 |
Schedule Coverage:
- Monday 9-10 AM: 18 agents (Requirement: 16) ✓
- Monday 10-11 AM: 21 agents (Requirement: 19) ✓
- Monday 11-12 PM: 23 agents (Requirement: 22) ✓
...
- Overall service level forecast: 82% (Target: 80%) ✓
3.6 Real-Time Adherence¶
Adherence Monitoring:
Real-Time Adherence (RTA) Configuration:
Monitor: Every 5 minutes
Tolerance: ±5 minutes
Alerts:
- Out-of-adherence >10 minutes: Notify agent
- Out-of-adherence >20 minutes: Notify supervisor
States Tracked:
- Available: In adherence if scheduled to be available
- On Call: In adherence if handling customer
- After Call Work: In adherence if within ACW time limit
- Break: In adherence if break is scheduled
- Idle: Out of adherence (not ready when should be)
- Not Ready (Unscheduled): Out of adherence
Metrics:
- Adherence % = (Time in adherence / Scheduled time) × 100
- Target: >90% adherence per agent
- Team average target: >92%
Adherence Dashboard:
Real-Time Adherence - November 22, 2025, 10:30 AM
Team: Sales (20 agents)
| Agent Name | Scheduled State | Current State | Duration | Status | Adherence % (Today) |
|------------|----------------|---------------|----------|--------|---------------------|
| Rajesh K. | Available | On Call | 3m 15s | ✓ In Adherence | 94% |
| Priya S. | Available | Available | 0m 0s | ✓ In Adherence | 91% |
| Amit P. | Available | Idle | 12m 30s | ⚠️ Out of Adherence | 85% |
| Sunita R. | Break | On Call | 8m 45s | ⚠️ Overdue from break | 89% |
Team Summary:
- Agents in adherence: 16/20 (80%)
- Average adherence today: 90%
- Alerts triggered: 4
4. Speech Analytics Configuration¶
4.1 Speech Analytics Overview¶
Capabilities: - Transcription: Convert audio to text (80-95% accuracy) - Keyword Detection: Flag specific words/phrases - Sentiment Analysis: Detect customer emotions - Trend Analysis: Identify common themes - Compliance Monitoring: Detect script deviations
4.2 Enable Speech Analytics¶
Step 1: Activate Module
# Navigate to: WFO → Speech Analytics → Enable
1. Accept WFO Premium license terms
2. Configure language: English (Indian accent model)
3. Set transcription engine: Google Speech-to-Text
4. Configure processing:
- Real-time: Disabled (performance impact)
- Batch: Enabled (process overnight)
5. Set retention: 90 days
6. Enable PII redaction: Yes
4.3 Configure Categories and Keywords¶
Step 1: Create Categories
Navigate to: Speech Analytics → Categories → Create
Category 1: Competitive Mentions
Category Name: Competitive Mentions
Keywords:
- "Amazon"
- "Flipkart"
- "Myntra"
- "FirstCry"
- "Hopscotch"
Alert: Yes (notify supervisor)
Category 2: Dissatisfaction
Category Name: Customer Dissatisfaction
Keywords:
- "unhappy"
- "disappointed"
- "frustrated"
- "angry"
- "refund"
- "cancel order"
- "speak to manager"
Phrases:
- "not satisfied"
- "poor quality"
- "terrible experience"
- "waste of money"
Alert: Yes (flag for QM review)
Category 3: Compliance Violations
Category Name: Compliance Risk
Keywords:
- "guarantee"
- "promise"
- "always"
- "never"
- "100% sure"
Phrases:
- "will definitely"
- "I guarantee"
Alert: Yes (immediate escalation)
Priority: Critical
Category 4: Sales Opportunities
Category Name: Upsell/Cross-sell
Keywords:
- "bundle"
- "combo"
- "discount"
- "offer"
- "looking for more"
Phrases:
- "what else do you have"
- "need something else"
- "buying for multiple children"
Alert: No
Purpose: Coaching and training
4.4 Sentiment Analysis¶
Sentiment Model Configuration:
Sentiment Analysis:
Model: VADER (Valence Aware Dictionary and sEntiment Reasoner)
Granularity: Per sentence
Aggregation: Overall call sentiment
Sentiment Levels:
- Positive: Score > 0.5
- Neutral: Score -0.5 to 0.5
- Negative: Score < -0.5
Trigger Actions:
- Negative call: Flag for QM review
- Escalation detected: Notify supervisor
- High emotion: Include in coaching sample
Sample Sentiment Analysis:
Call ID: CALL-78901
Duration: 8 minutes 23 seconds
Agent: Rajesh Kumar
Customer: CUST-12345
Sentiment Timeline:
00:00-01:00 (Opening): Neutral (0.2)
01:01-03:30 (Problem description): Negative (-0.7)
03:31-06:00 (Resolution discussion): Neutral (0.1)
06:01-08:23 (Closing): Positive (0.6)
Overall Call Sentiment: Neutral (0.05)
Key Moments:
- 01:45: Customer: "This is very frustrating" (Sentiment: -0.9)
- 02:30: Agent: "I understand your concern" (Sentiment: 0.4)
- 07:15: Customer: "Thank you so much for your help" (Sentiment: 0.8)
Recommendation: Positive resolution despite negative opening. Use as coaching example for handling upset customers.
4.5 Compliance Monitoring¶
Automated Compliance Checks:
Compliance Scorecard:
Call ID: CALL-78901
Agent: Rajesh Kumar
Date: November 21, 2025
Required Script Elements:
✓ Opening greeting: "Thank you for calling KidsWear India"
✓ Identity verification: Asked for customer ID and DOB
✓ Privacy disclaimer: "This call may be recorded"
✗ Data protection notice: MISSING
✓ Closing statement: "Is there anything else I can help you with?"
✓ Thank you: "Thank you for calling. Have a great day!"
Prohibited Words/Phrases:
✗ "Guarantee" used at 04:23
✓ No other violations
Compliance Score: 85% (6/7 requirements met)
Status: Non-compliant (requires coaching)
Action: Schedule coaching session on data protection disclosure
5. Performance Dashboards and KPIs¶
5.1 KPI Framework¶
Key Performance Indicators for Contact Center:
| Category | KPI | Target | Measurement | Dashboard |
|---|---|---|---|---|
| Service Level | Calls answered in 20s | 80% | Real-time | Operations |
| Efficiency | Average Handle Time | <6 minutes | Daily | Operations |
| Quality | QM Score | >85/100 | Weekly | Quality |
| Quality | First Call Resolution | >75% | Daily | Quality |
| Productivity | Occupancy Rate | 65-75% | Real-time | Operations |
| Productivity | Adherence | >90% | Real-time | WFM |
| Customer Sat | CSAT Score | >4.⅖.0 | Daily | CX |
| Customer Sat | Net Promoter Score | >40 | Monthly | CX |
| Compliance | Compliance Score | 100% | Weekly | Compliance |
5.2 Real-Time Dashboard¶
Operations Dashboard (Wallboard):
┌──────────────────────────────────────────────────────────────┐
│ KidsWear Contact Center - LIVE STATUS │
│ Friday, November 22, 2025 - 10:30 AM │
├──────────────────────────────────────────────────────────────┤
│ │
│ CALLS IN QUEUE SERVICE LEVEL (TODAY) │
│ ┌────────────┐ ┌────────────┐ │
│ │ 8 │ │ 82% │ │
│ └────────────┘ └────────────┘ │
│ Longest Wait: 45s Target: 80%/20s │
│ │
│ AGENTS AVAILABLE AVERAGE HANDLE TIME │
│ ┌────────────┐ ┌────────────┐ │
│ │ 12/20 │ │ 5m 23s │ │
│ └────────────┘ └────────────┘ │
│ 60% of team Target: <6m │
│ │
│ CALLS HANDLED TODAY ABANDONMENT RATE │
│ ┌────────────┐ ┌────────────┐ │
│ │ 247 │ │ 4.2% │ │
│ └────────────┘ └────────────┘ │
│ vs. 312 yesterday Target: <5% │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ AGENT STATUS BREAKDOWN │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ Available: 12 │ On Call: 5 │ ACW: 2 │ Idle: 1│ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ HOURLY CALL VOLUME (Today vs Forecast) │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ 9-10: █████████░ 18 (F: 16) │ │
│ │ 10-11:███████████ 23 (F: 21) │ │
│ │ 11-12:████░░░░░░░ 8 (F: 19) ⚠️ │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
5.3 Historical Performance Dashboard¶
Weekly Performance Report:
┌──────────────────────────────────────────────────────────────┐
│ WEEKLY PERFORMANCE REPORT │
│ November 15-21, 2025 │
├──────────────────────────────────────────────────────────────┤
│ │
│ SERVICE LEVEL TREND │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Mon ███████████████████████░░░ 82% │ │
│ │ Tue ████████████████████░░░░░░ 78% ⚠️ │ │
│ │ Wed ██████████████████████████ 85% │ │
│ │ Thu ████████████████████████░░ 83% │ │
│ │ Fri ███████████████████████░░░ 80% │ │
│ │ Sat ████████████████████████████ 89% │ │
│ │ Sun Closed │ │
│ └────────────────────────────────────────────────────────┘ │
│ Weekly Avg: 83% (Target: 80%) ✓ │
│ │
│ QUALITY METRICS │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Average QM Score: 87/100 ✓ │ │
│ │ First Call Resolution: 78% ✓ │ │
│ │ Customer Satisfaction: 4.3/5.0 ✓ │ │
│ │ Compliance Rate: 98% ⚠️ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ EFFICIENCY METRICS │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Average Handle Time: 5m 47s ✓ │ │
│ │ Occupancy: 68% ✓ │ │
│ │ Adherence: 91% ✓ │ │
│ │ Abandonment Rate: 4.1% ✓ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ TOP PERFORMERS COACHING OPPORTUNITIES │
│ 1. Priya Sharma (QM: 94) 1. Amit Patel (Adh: 82%)│
│ 2. Rajesh Kumar (FCR: 92%) 2. Sunita Rao (QM: 76) │
│ 3. Meera Desai (CSAT: 4.8) 3. Rohan Singh (AHT: 8m)│
│ │
└──────────────────────────────────────────────────────────────┘
5.4 Custom Analytics¶
Power BI Integration:
# Python script to export WFO data to Power BI
import requests
import json
from datetime import datetime, timedelta
class WFOPowerBIExport:
def __init__(self, wfo_api_key, powerbi_workspace, powerbi_dataset):
self.wfo_api_key = wfo_api_key
self.powerbi_workspace = powerbi_workspace
self.powerbi_dataset = powerbi_dataset
def export_quality_data(self, start_date, end_date):
"""Export QM evaluation data"""
# Fetch from WFO API
evaluations = self.fetch_evaluations(start_date, end_date)
# Transform data
transformed = self.transform_quality_data(evaluations)
# Push to Power BI
self.push_to_powerbi('QualityEvaluations', transformed)
def export_agent_performance(self, date):
"""Export daily agent performance"""
# Fetch agent stats
agent_stats = self.fetch_agent_stats(date)
# Calculate composite scores
performance_data = []
for agent in agent_stats:
score = self.calculate_performance_score(agent)
performance_data.append({
'date': date,
'agent_id': agent['id'],
'agent_name': agent['name'],
'team': agent['team'],
'qm_score': agent['qm_score'],
'adherence': agent['adherence'],
'occupancy': agent['occupancy'],
'aht': agent['aht'],
'fcr': agent['fcr'],
'csat': agent['csat'],
'composite_score': score
})
# Push to Power BI
self.push_to_powerbi('AgentPerformance', performance_data)
def calculate_performance_score(self, agent):
"""Calculate composite performance score (0-100)"""
# Weighted scoring
weights = {
'qm_score': 0.30, # 30% weight
'adherence': 0.15, # 15% weight
'occupancy': 0.10, # 10% weight
'aht_score': 0.15, # 15% weight (normalized)
'fcr': 0.20, # 20% weight
'csat': 0.10 # 10% weight
}
# Normalize AHT (lower is better, convert to 0-100 scale)
aht_score = max(0, 100 - (agent['aht'] - 300) / 6) # Target: 5min (300s)
# Calculate weighted score
composite = (
agent['qm_score'] * weights['qm_score'] +
agent['adherence'] * weights['adherence'] +
agent['occupancy'] * weights['occupancy'] +
aht_score * weights['aht_score'] +
(agent['fcr'] * 100) * weights['fcr'] +
(agent['csat'] * 20) * weights['csat'] # Convert 5.0 scale to 100
)
return round(composite, 2)
6. Agent Coaching and Development¶
6.1 Coaching Framework¶
Structured Coaching Process:
Coaching Cycle: 30 Days
Frequency: Bi-weekly (every 2 weeks)
Week 1-2: Evaluation and Feedback
- Review QM evaluations (2-3 calls)
- Identify strengths and opportunities
- One-on-one coaching session (30 minutes)
- Document action plan
Week 3-4: Skill Development
- Targeted training on identified areas
- Side-by-side monitoring (if needed)
- Practice scenarios/role-play
- Mid-cycle check-in (15 minutes)
End of Cycle:
- Re-evaluation (2 calls)
- Measure improvement
- Update development plan
- Recognition for progress
6.2 Coaching Session Template¶
One-on-One Coaching Session Guide:
Coaching Session: Agent Development
Date: November 22, 2025
Agent: Amit Patel
Coach: Priya Sharma (Team Lead)
Duration: 30 minutes
SECTION 1: OPENING (5 minutes)
- Set positive tone
- Review session purpose
- Check agent's self-assessment
SECTION 2: REVIEW STRENGTHS (5 minutes)
Sample Call: CALL-78543 (Nov 18)
Strengths Demonstrated:
✓ Professional greeting
✓ Accurate problem identification
✓ Empathy in tone
Recognition:
"Amit, your opening on this call was excellent. The customer
immediately felt heard and valued. This is a skill many agents
struggle with, and you've mastered it."
SECTION 3: IDENTIFY OPPORTUNITY (10 minutes)
Sample Call: CALL-78901 (Nov 20)
Area for Improvement: Active Listening
Specific Example:
Timestamp 02:45 - Customer mentioned they needed the order by
Nov 25 for a birthday party. Agent didn't acknowledge this
deadline and didn't offer expedited shipping.
Impact:
- Customer had to call back
- Created additional work
- Risked negative CSAT
Coaching Point:
"When customers share specific dates or deadlines, it's important
to repeat them back and ensure we address them. Let's practice..."
SECTION 4: SKILL DEVELOPMENT (8 minutes)
Practice Scenario:
Coach role-plays customer with deadline
Agent practices:
1. Acknowledging deadline
2. Repeating it back
3. Offering solutions
4. Confirming understanding
Feedback:
"Much better! You caught the deadline immediately and offered
expedited shipping. This will significantly improve customer
satisfaction."
SECTION 5: ACTION PLAN (2 minutes)
Action Items:
[ ] Listen to 2 top performer calls focusing on how they capture
customer needs
[ ] Practice active listening techniques daily
[ ] Use checklist: "Have I addressed all customer requirements?"
Next Coaching Session: December 6, 2025
Success Metric: No missed customer requirements in next 3 evaluations
SECTION 6: CLOSING (2 minutes)
- Summarize key points
- Get agent's commitment
- End on positive note
Agent Signature: _________________
Coach Signature: _________________
6.3 Side-by-Side Monitoring¶
Silent Monitoring Process:
Silent Monitoring Session:
Duration: 2 hours
Purpose: Observe agent in real-time environment
Observer: Team Lead or QA Manager
Pre-Session:
- Notify agent 24 hours in advance
- Explain non-punitive nature
- Set expectations (normal calls, no special treatment)
During Session:
- Listen to live calls (no intervention)
- Take detailed notes
- Track both strengths and opportunities
- Note patterns across multiple calls
Post-Session:
- Immediate debrief (within 1 hour)
- Share specific examples
- Acknowledge strengths first
- Provide constructive feedback
- Answer agent's questions
Documentation:
- Monitoring report filed in WFO
- Key observations shared with agent
- Action items tracked
6.4 Agent Development Plans¶
Individual Development Plan (IDP) Template:
AGENT DEVELOPMENT PLAN
Agent: Sunita Rao
Period: Q4 2025 (Oct-Dec)
Current Role: Customer Service Agent
Career Goal: Senior Agent / Team Lead
CURRENT PERFORMANCE ASSESSMENT:
Strengths:
- Excellent product knowledge
- High compliance scores
- Reliable attendance
Development Areas:
- Communication clarity (QM scores averaging 82%)
- Call handling efficiency (AHT: 7m 15s, target: 6m)
- First call resolution (68%, target: 75%)
DEVELOPMENT GOALS:
Goal 1: Improve Communication Clarity
Target: QM communication score >85% by Dec 31
Actions:
- Complete "Effective Communication" online course (by Nov 30)
- Practice with speech coach weekly
- Review 3 top performer calls for communication techniques
Measurement: Weekly QM evaluations
Goal 2: Reduce Average Handle Time
Target: AHT <6m 30s by Dec 31
Actions:
- Shadow efficient agent (Priya Sharma) for 4 hours
- Identify time-wasting patterns in own calls
- Use call scripting template for common scenarios
Measurement: Daily AHT tracking
Goal 3: Increase First Call Resolution
Target: FCR >75% by Dec 31
Actions:
- Deep dive training on troubleshooting (8-hour workshop)
- Access to advanced knowledge base
- Empowerment to offer resolutions without escalation
Measurement: Monthly FCR calculation
SUPPORT REQUIRED:
From Manager:
- Weekly coaching sessions (30 min)
- Access to training resources
- Regular feedback
From Organization:
- Training budget allocation
- Mentorship assignment (pair with Priya Sharma)
- Time off for training (8 hours)
PROGRESS REVIEWS:
- Mid-cycle review: November 30, 2025
- Final review: December 31, 2025
Agent Signature: _______________ Date: _______________
Manager Signature: _____________ Date: _______________
7. Compliance Recording and Monitoring¶
7.1 Regulatory Requirements¶
India-Specific Compliance:
| Regulation | Requirement | WFO Implementation |
|---|---|---|
| DPDP Act 2023 | Customer consent for recording | Announce recording at call start |
| DPDP Act 2023 | Data retention limits | 90-day retention for non-compliance calls |
| PCI-DSS | Secure payment data | Pause recording during payment collection |
| RBI Guidelines | Call recording for financial transactions | 100% recording for payment-related calls |
| TRAI Regulations | No recording without consent | IVR announcement + agent verbal consent |
7.2 Recording Consent Management¶
IVR Consent Announcement:
IVR Script:
"Thank you for calling KidsWear India. This call may be recorded or
monitored for quality assurance, training, and compliance purposes.
By continuing with this call, you consent to this recording. If you
do not wish to be recorded, please press 9 now and an agent will
assist you without recording."
[If customer presses 9: Route to non-recorded queue]
[If customer continues: Proceed with recording]
Agent Verbal Consent Script:
Agent Script (for direct-dial calls):
"Before we begin, I'd like to let you know that this call may be
recorded for quality and training purposes. Are you comfortable
proceeding with the recording?"
Customer Response:
- Yes: Continue with recording
- No: Disable recording for this call
7.3 Secure Recording Storage¶
Storage Architecture:
Recording Storage Configuration:
Primary Storage: AWS S3 (US-West-2)
Backup Storage: AWS S3 (Asia-Mumbai)
Encryption:
- In Transit: TLS 1.3
- At Rest: AES-256
Access Control:
- Role-Based Access Control (RBAC)
- MFA required for access
- Audit logging enabled
Lifecycle Policy:
- Standard calls: 90 days → Delete
- Compliance calls: 1 year → Archive → 7 years total
- Evaluated calls: 1 year (linked to QM evaluation)
S3 Bucket Policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyUnencryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::kidswear-recordings/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "RestrictAccessToAuthorizedRoles",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::123456789012:role/WFO-QM-Evaluator",
"arn:aws:iam::123456789012:role/WFO-Compliance-Officer"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::kidswear-recordings",
"arn:aws:s3:::kidswear-recordings/*"
]
}
]
}
7.4 PCI-DSS Compliance Recording¶
Pause/Resume Configuration:
PCI-DSS Recording Rules:
Trigger: SecureForm node activated in IVR flow
Action: Pause recording (audio + screen)
Indicator: Red icon on agent desktop "Recording Paused"
Resume: After SecureForm completion
Verification: Check recording metadata for pause timestamps
Audit Trail:
- Log pause event with timestamp
- Log resume event with timestamp
- Store payment token (non-sensitive) in recording metadata
- Alert if pause duration >5 minutes (possible stuck flow)
Recording Metadata Example:
{
"recordingId": "REC-789012",
"callId": "CALL-78901",
"agentId": "agent-001",
"customerId": "CUST-12345",
"startTime": "2025-11-21T10:30:00Z",
"endTime": "2025-11-21T10:38:23Z",
"duration": 503,
"channels": ["audio", "screen"],
"pauseEvents": [
{
"timestamp": "2025-11-21T10:33:15Z",
"reason": "PCI-DSS-SecureForm",
"duration": 45,
"resumeTimestamp": "2025-11-21T10:34:00Z"
}
],
"storage": {
"bucket": "kidswear-recordings",
"region": "us-west-2",
"encryption": "AES256",
"key": "recordings/2025/11/21/REC-789012.wav"
},
"retention": {
"category": "standard",
"deleteAfter": "2026-02-19T10:38:23Z"
}
}
7.5 Compliance Auditing¶
Quarterly Compliance Audit Checklist:
COMPLIANCE AUDIT - Q4 2025
Auditor: Compliance Officer
Date: December 15, 2025
RECORDING CONSENT:
[ ] IVR consent announcement active and clear
[ ] Agent verbal consent script followed (spot check 50 calls)
[ ] Non-consent queue properly configured
[ ] Consent refusals logged and analyzed
PCI-DSS COMPLIANCE:
[ ] 100% pause/resume during payment collection (spot check 100 calls)
[ ] No payment data in recording metadata
[ ] Payment tokens properly stored
[ ] Audit trail complete for all pause events
DATA RETENTION:
[ ] Standard calls deleted after 90 days
[ ] Compliance calls retained for required period
[ ] No recordings beyond retention policy
[ ] Archive process functional
ACCESS CONTROL:
[ ] RBAC properly configured
[ ] MFA enforced for all recording access
[ ] Access logs reviewed for anomalies
[ ] No unauthorized access detected
DATA PROTECTION:
[ ] Encryption at rest verified
[ ] Encryption in transit verified
[ ] Backup integrity tested
[ ] Disaster recovery plan validated
FINDINGS:
- Issue 1: 3 calls found with >5min pause duration (investigated - legitimate)
- Issue 2: 1 agent forgot verbal consent in direct-dial scenario (coaching completed)
RECOMMENDATIONS:
- Add automated alert for extended pause durations
- Enhance agent training on consent requirements
Audit Status: PASS
Next Audit: March 15, 2026
8. Alternative Approaches for MSMEs¶
8.1 Manual QM Without Full Licensing¶
For organizations without WFO licenses:
Option 1: Spreadsheet-Based QM
Monthly QM Tracking Spreadsheet:
Columns:
- Date
- Agent Name
- Call ID (manual log)
- Call Duration
- Evaluator Name
- Opening Score (/15)
- Problem Resolution Score (/40)
- Communication Score (/25)
- Closing Score (/10)
- Compliance Score (/10)
- Total Score (/100)
- Comments
- Action Items
- Follow-up Date
Process:
1. Team lead manually selects 2 calls per agent per week
2. Listens to call recording (accessed from Webex CC)
3. Completes evaluation in spreadsheet
4. Meets with agent weekly to discuss scores
5. Tracks trends using pivot tables
Option 2: Google Forms + Google Sheets
Google Form: QM Evaluation Form
- Auto-populates timestamp
- Dropdown for agent names
- Text field for Call ID
- Rating scales for each section
- Text areas for comments
- Automatic calculation of total score
Google Sheets: Automatic Dashboard
- Responses feed into sheet automatically
- Pivot tables for:
* Agent average scores
* Weekly trends
* Section-specific weaknesses
- Charts for visualization
- Conditional formatting for scores below target
8.2 Free WFM Tools¶
Option 1: Google Calendar + Sheets
Workforce Management Using Google Tools:
1. Forecasting:
- Export historical call data from Webex CC
- Use Google Sheets with FORECAST function
- Manual adjustments for holidays/events
2. Scheduling:
- Google Calendar for shift schedules
- Color-coded by shift type
- Shared calendars for entire team
- Google Forms for shift preference collection
3. Adherence:
- Manual spot checks every 30 minutes
- Google Sheets log for out-of-adherence events
- Weekly adherence calculation
Option 2: When I Work (Free Tier)
When I Work (Free for up to 75 users):
Features:
- Shift scheduling
- Time clock (mobile app)
- Availability management
- Shift swapping (with approval)
- Push notifications for schedule changes
Limitations:
- No integration with Webex CC
- No forecasting
- No real-time adherence
- Manual call volume input
Use Case: Suitable for MSMEs with <30 agents
8.3 Free Speech Analytics Alternatives¶
Option 1: YouTube Auto-Transcription
Workaround Using YouTube:
1. Export call recording from Webex CC
2. Upload to unlisted YouTube video
3. Enable auto-generated captions (free)
4. Download transcript (VTT format)
5. Use text analysis tools:
- Keyword search (Ctrl+F)
- Word frequency counter
- Manual sentiment analysis
Limitations:
- Not real-time
- Lower accuracy than paid tools
- Manual effort required
- No automated categorization
Option 2: Google Cloud Speech-to-Text (Free Tier)
Google Cloud Free Tier:
- 60 minutes of speech-to-text per month (free)
- REST API or Python client library
Python Script:
from google.cloud import speech_v1
def transcribe_call(audio_file_path):
client = speech_v1.SpeechClient()
with open(audio_file_path, "rb") as audio_file:
content = audio_file.read()
audio = speech_v1.RecognitionAudio(content=content)
config = speech_v1.RecognitionConfig(
encoding=speech_v1.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=8000,
language_code="en-IN", # Indian English
enable_automatic_punctuation=True,
)
response = client.recognize(config=config, audio=audio)
transcript = ""
for result in response.results:
transcript += result.alternatives[0].transcript + " "
return transcript
# Use for 2 calls per agent per month within free tier
Limitations:
- 60 min/month limit (unsustainable for all calls)
- No sentiment analysis
- No categorization
- Manual keyword search required
Best Use: Spot-check critical calls or compliance checks
8.4 Low-Cost Performance Tracking¶
Option 1: Webex CC Standard Reporting
Native Reporting (Included):
Available Reports:
- Agent Activity Report
- Queue Statistics Report
- Call Detail Records (CDR)
- Abandoned Call Report
Export to Excel:
- Create pivot tables for:
* Agent AHT trends
* Queue service level
* Hourly call volumes
* Abandonment rates
Create Manual Dashboard:
- Excel with charts
- Update daily with fresh exports
- Track against targets
- Share via email or Google Drive
Option 2: Google Data Studio (Free)
Google Data Studio Dashboard:
1. Export Webex CC reports as CSV daily
2. Upload to Google Sheets
3. Connect Google Data Studio to Sheets
4. Build dashboard with:
- Service level gauge chart
- AHT trend line
- Agent performance table
- Call volume heatmap
Pros:
- Free
- Professional-looking dashboards
- Auto-refresh if using Sheets
- Shareable links
Cons:
- Not real-time
- Manual data export required
- No drill-down into call recordings
9. Integration with Webex Contact Center¶
9.1 API Integration¶
Webex CC → WFO Integration:
# Python script to sync data between Webex CC and WFO
import requests
import json
from datetime import datetime
class WebexWFOIntegration:
def __init__(self, webex_token, wfo_api_key):
self.webex_token = webex_token
self.wfo_api_key = wfo_api_key
self.webex_base_url = "https://api.wxcc-us1.cisco.com/v1"
self.wfo_base_url = "https://wfo.example.com/api/v1"
def sync_agent_states(self):
"""Sync agent states to WFO for adherence tracking"""
# Get current agent states from Webex CC
response = requests.get(
f"{self.webex_base_url}/organization/12345/agents",
headers={'Authorization': f'Bearer {self.webex_token}'}
)
agents = response.json()['data']
# Push to WFO
for agent in agents:
wfo_payload = {
'agent_id': agent['id'],
'timestamp': datetime.now().isoformat(),
'state': agent['currentState'],
'state_duration': agent['stateDuration']
}
requests.post(
f"{self.wfo_base_url}/adherence/state-update",
headers={'X-API-Key': self.wfo_api_key},
json=wfo_payload
)
def sync_call_recordings(self):
"""Sync call metadata to WFO for QM evaluation"""
# Get list of recent calls
response = requests.get(
f"{self.webex_base_url}/organization/12345/calls",
headers={'Authorization': f'Bearer {self.webex_token}'},
params={
'startTime': (datetime.now() - timedelta(hours=1)).isoformat(),
'endTime': datetime.now().isoformat()
}
)
calls = response.json()['data']
# Push call metadata to WFO
for call in calls:
wfo_payload = {
'call_id': call['id'],
'agent_id': call['agentId'],
'customer_id': call['customerId'],
'start_time': call['startTime'],
'end_time': call['endTime'],
'duration': call['duration'],
'queue_id': call['queueId'],
'recording_url': call['recordingUrl'],
'disposition': call['disposition']
}
requests.post(
f"{self.wfo_base_url}/recordings/import",
headers={'X-API-Key': self.wfo_api_key},
json=wfo_payload
)
def sync_qm_scores_to_webex(self):
"""Push QM scores back to Webex CC for agent dashboard"""
# Get recent QM evaluations from WFO
response = requests.get(
f"{self.wfo_base_url}/evaluations/recent",
headers={'X-API-Key': self.wfo_api_key},
params={'days': 7}
)
evaluations = response.json()['data']
# Push scores to Webex CC
for evaluation in evaluations:
webex_payload = {
'agent_id': evaluation['agent_id'],
'date': evaluation['date'],
'qm_score': evaluation['total_score'],
'evaluation_id': evaluation['id']
}
requests.post(
f"{self.webex_base_url}/organization/12345/agents/{evaluation['agent_id']}/metrics",
headers={'Authorization': f'Bearer {self.webex_token}'},
json=webex_payload
)
# Schedule this to run every 5 minutes
integration = WebexWFOIntegration(
webex_token=os.getenv('WEBEX_TOKEN'),
wfo_api_key=os.getenv('WFO_API_KEY')
)
while True:
integration.sync_agent_states()
integration.sync_call_recordings()
integration.sync_qm_scores_to_webex()
time.sleep(300) # 5 minutes
9.2 Agent Desktop Integration¶
WFO Widget on Agent Desktop:
<!-- Embedded widget showing agent's real-time performance -->
<div id="wfo-widget" style="width: 300px; height: 400px; border: 1px solid #ccc;">
<div class="widget-header">
<h3>My Performance Today</h3>
</div>
<div class="widget-content">
<div class="metric">
<span class="metric-label">Calls Handled:</span>
<span class="metric-value">23</span>
</div>
<div class="metric">
<span class="metric-label">Average Handle Time:</span>
<span class="metric-value">5m 47s</span>
<span class="metric-status green">↓ 13s from yesterday</span>
</div>
<div class="metric">
<span class="metric-label">Latest QM Score:</span>
<span class="metric-value">87/100</span>
<span class="metric-status green">Good</span>
</div>
<div class="metric">
<span class="metric-label">Adherence Today:</span>
<span class="metric-value">94%</span>
<span class="metric-status green">On Track</span>
</div>
<div class="metric">
<span class="metric-label">Schedule:</span>
<span class="metric-value">
Next Break: 11:30 AM (in 25 min)
</span>
</div>
</div>
<div class="widget-footer">
<button onclick="viewFullDashboard()">View Full Dashboard</button>
</div>
</div>
<script>
// Real-time updates via WebSocket
const ws = new WebSocket('wss://wfo.example.com/agent-feed');
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
updateMetrics(data);
};
function updateMetrics(data) {
// Update widget with real-time data
document.querySelector('.metric-value').textContent = data.callsHandled;
// ... update other metrics
}
</script>
10. Go-Live and Optimization¶
10.1 WFO Go-Live Checklist¶
PRE-GO-LIVE (T-4 weeks):
[ ] WFO licenses purchased and activated
[ ] All agents enrolled in WFO system
[ ] Evaluation forms created and tested
[ ] Evaluators trained
[ ] Recording storage configured
[ ] Historical data imported (WFM)
[ ] Shift templates created
[ ] Initial schedule generated
[ ] Speech analytics categories configured
[ ] Dashboards built and tested
T-2 WEEKS:
[ ] UAT completed with sample evaluations
[ ] Agent training on QM expectations
[ ] Supervisor training on WFO portal
[ ] Calibration session conducted
[ ] WFM schedule published for first 2 weeks
[ ] Performance targets communicated
T-1 WEEK:
[ ] Final configuration review
[ ] Security audit passed
[ ] Backup/restore tested
[ ] Support escalation plan finalized
[ ] Go-live communication sent to all agents
GO-LIVE DAY:
[ ] WFO systems enabled in production
[ ] Recording starts for all calls
[ ] Real-time adherence monitoring active
[ ] Support team on standby
[ ] Monitor for first 4 hours continuously
POST-GO-LIVE (Week 1):
[ ] Daily evaluation assignments made
[ ] No critical issues reported
[ ] Agent feedback collected
[ ] First coaching sessions conducted
[ ] Adherence tracking validated
[ ] First weekly reports generated
MONTH 1 REVIEW:
[ ] QM evaluation completion rate >90%
[ ] Agent satisfaction survey conducted
[ ] Calibration consistency >85%
[ ] WFM forecast accuracy measured
[ ] Speech analytics categories refined
[ ] First performance improvement documented
10.2 Continuous Optimization¶
Monthly WFO Review:
Monthly WFO Optimization Meeting:
Attendees: QA Manager, WFM Manager, Team Leads, Operations Manager
Duration: 90 minutes
Agenda:
1. QM Metrics Review (20 min)
- Average QM score trend
- Evaluation completion rate
- Inter-rater reliability
- Common quality gaps identified
2. WFM Performance (20 min)
- Forecast accuracy
- Schedule efficiency
- Adherence trends
- Scheduling complaints/requests
3. Speech Analytics Insights (15 min)
- Top keywords/categories
- Sentiment trends
- Compliance violations detected
- Coaching opportunities identified
4. Action Items Review (15 min)
- Status of last month's action items
- Impact measurement
5. New Initiatives (15 min)
- Propose new evaluation criteria
- Adjust WFM parameters
- Add speech analytics categories
6. Next Month Planning (5 min)
- Set targets
- Schedule calibration session
- Plan training workshops
Annual WFO Assessment:
ANNUAL WFO EFFECTIVENESS ASSESSMENT
Year: 2025
QUALITY MANAGEMENT:
Metrics:
- Average QM score: 87/100 (target: 85) ✓
- Evaluation completion: 92% (target: 90%) ✓
- Inter-rater reliability: 88% (target: 85%) ✓
- Agent satisfaction with QM: 4.2/5.0 ✓
ROI Analysis:
- Quality score improvement: +7 points from Q1 to Q4
- Customer satisfaction correlation: +0.5 CSAT increase with +5 QM score
- Reduced escalations: 25% decrease year-over-year
- Estimated customer retention value: ₹12 lakhs
WORKFORCE MANAGEMENT:
Metrics:
- Forecast accuracy (MAPE): 12% (target: <15%) ✓
- Service level achievement: 84% (target: 80%) ✓
- Adherence: 91% (target: 90%) ✓
- Agent schedule satisfaction: 3.9/5.0 ⚠️
ROI Analysis:
- Optimized staffing saved: ₹8 lakhs (reduced overtime)
- Improved service level: 4% improvement = ₹5 lakhs customer retention value
- Reduced absenteeism: 15% improvement = ₹3 lakhs savings
SPEECH ANALYTICS:
Metrics:
- Calls analyzed: 89% of total calls
- Transcription accuracy: 87%
- Compliance violations detected: 127 (prevented losses)
- Coaching opportunities identified: 1,247
ROI Analysis:
- Compliance risk mitigation: Prevented 3 potential regulatory issues
- Sales opportunities identified: ₹18 lakhs additional revenue
- Customer retention from proactive issue detection: ₹7 lakhs
TOTAL WFO ROI:
Investment: ₹25 lakhs (licenses + implementation)
Returns: ₹53 lakhs (direct + indirect benefits)
ROI: 112%
RECOMMENDATIONS FOR 2026:
1. Expand speech analytics to 100% of calls
2. Implement AI-powered auto-scoring (reduce evaluator workload)
3. Integrate WFM with HR system for better absence management
4. Add agent self-service portal for schedule changes
5. Develop predictive analytics for agent attrition risk
Document Change Log¶
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | Nov 21, 2025 | Raj | Initial creation - Complete WFO configuration guide |
Additional Resources¶
Cisco Webex WFO Documentation
- Webex Contact Center User Guides - Official Cisco product user guides
WFM Best Practices
- SWPP - Society of Workforce Planning Professionals
Quality Assurance Standards
- COPC Standards - Customer experience operations performance standards
END OF APPENDIX B