Implementing Predictive vs Progressive Dialer Mode Selection based on Campaign Metrics

Implementing Predictive vs Progressive Dialer Mode Selection based on Campaign Metrics

What This Guide Covers

You are implementing an automated logic to switch between Predictive and Progressive dialing modes for your Genesys Cloud outbound campaigns. Predictive dialing maximizes agent occupancy by over-dialing based on statistical models, but it carries the risk of “abandoned calls” if no agent is available when a customer answers. Progressive dialing only dials when an agent is actually idle, eliminating abandons but reducing efficiency. This guide shows how to build an AWS Lambda monitor that analyzes real-time campaign performance (abandon rate, hit rate, agent idle time) and programmatically flips the campaign mode to maintain regulatory compliance while optimizing for productivity.


Prerequisites, Roles & Licensing

  • Genesys Cloud: CX 1, 2, or 3 with Outbound.
  • Permissions:
    • Outbound > Campaign > Edit
    • Analytics > Outbound > View
  • Infrastructure: AWS Lambda (or similar) to host the monitoring script.

The Implementation Deep-Dive

1. Defining the Switching Thresholds

You must define the “Safe Zone” and the “Efficiency Zone”.

  • Trigger for Progressive: If Abandon Rate > 2.8% (assuming a 3% legal limit) OR Agent Wait Time < 5 seconds.
  • Trigger for Predictive: If Abandon Rate < 1% AND Agent Idle Time > 20 seconds AND Hit Rate (Live Answers) < 15%.

2. Extracting Real-Time Campaign Metrics

Use the Analytics API to get the current campaign stats for the last hour.

import requests

def get_campaign_metrics(access_token, campaign_id):
    headers = {"Authorization": f"Bearer {access_token}"}
    
    # Query for campaign stats
    # Note: Replace with actual analytics query for dialer metrics
    resp = requests.get(f"https://api.mypurecloud.com/api/v2/outbound/campaigns/{campaign_id}/stats", headers=headers)
    stats = resp.json()
    
    abandon_rate = stats.get('abandonRate', 0)
    agent_idle_time = stats.get('averageAgentIdleTime', 0)
    
    return abandon_rate, agent_idle_time

3. Programmatic Mode Switching

The Campaign API allows you to update the dialingMode.

def set_campaign_mode(access_token, campaign_id, mode):
    """
    mode: 'predictive' or 'progressive'
    """
    headers = {"Authorization": f"Bearer {access_token}"}
    
    # Fetch current campaign config
    campaign = requests.get(f"https://api.mypurecloud.com/api/v2/outbound/campaigns/{campaign_id}", headers=headers).json()
    
    if campaign['dialingMode'].lower() == mode.lower():
        return # Already in the correct mode
    
    # Update mode
    campaign['dialingMode'] = mode
    requests.put(f"https://api.mypurecloud.com/api/v2/outbound/campaigns/{campaign_id}", headers=headers, json=campaign)
    print(f"Campaign {campaign_id} switched to {mode} mode.")

4. Orchestration Logic (The Monitor)

Run this logic every 10 minutes via EventBridge.

def lambda_handler(event, context):
    CAMPAIGN_ID = "your-campaign-id"
    token = get_token() # Helper to get OAuth token
    
    abandon_rate, idle_time = get_campaign_metrics(token, CAMPAIGN_ID)
    
    if abandon_rate > 2.8:
        set_campaign_mode(token, CAMPAIGN_ID, 'progressive')
    elif abandon_rate < 1.0 and idle_time > 20:
        set_campaign_mode(token, CAMPAIGN_ID, 'predictive')

Validation, Edge Cases & Troubleshooting

Edge Case 1: Small Agent Pools

Predictive dialing requires a minimum of 10-15 active agents to be statistically effective.
Solution: Add an agent count check to the logic. If active_agents < 10, force the campaign into Progressive mode regardless of metrics.

Edge Case 2: Regulatory “Reset” Periods

Most jurisdictions measure abandon rates over a 24-hour period. Flipped modes mid-day might not lower the average fast enough.
Solution: If the abandon rate is critically high (e.g., > 4%), not only switch to Progressive but also reduce the callAnalysisResponse speed to slow down dialing even further.

Edge Case 3: Flapping

If the metrics oscillate around the threshold, the campaign might switch modes too frequently.
Solution: Implement “Hysteresis”. Wait for at least two consecutive 10-minute intervals to meet the criteria before switching modes.

Official References