Skip to content

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

  1. WFO Overview and Licensing
  2. Quality Management (QM) Configuration
  3. Workforce Management (WFM) Setup
  4. Speech Analytics Configuration
  5. Performance Dashboards and KPIs
  6. Agent Coaching and Development
  7. Compliance Recording and Monitoring
  8. Alternative Approaches for MSMEs
  9. Integration with Webex Contact Center
  10. 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

  1. Navigate to Control HubContact CenterFeatures
  2. Enable Quality Management
  3. Accept license terms
  4. Configure storage location:
  5. Region: US-West (AWS us-west-2)
  6. Retention: 90 days (calls), 1 year (evaluations)
  7. 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:

  1. Evaluator Login → WFO Portal → My Evaluations
  2. Select Call → Click on assigned call
  3. Listen to Recording → Play audio, view screen recording
  4. Complete Form → Answer all questions
  5. Add Comments → Provide specific feedback
  6. Submit Score → Final score calculated automatically
  7. 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

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

WFM Best Practices

  • SWPP - Society of Workforce Planning Professionals

Quality Assurance Standards

  • COPC Standards - Customer experience operations performance standards

END OF APPENDIX B