Implementing Dynamic Cross-Skill Routing to Balance Over-Staffed Queues in Genesys Cloud CX
What This Guide Covers
You will configure a skill-based routing matrix that automatically directs agents from over-staffed queues to under-staffed queues based on proficiency thresholds, routing strategy algorithms, and real-time availability. The end result is a resilient contact center topology where agents flow dynamically across queue boundaries without manual intervention, reducing average speed of answer (ASA) and preventing skill starvation during demand spikes.
Prerequisites, Roles & Licensing
- Licensing Tier: Genesys Cloud CX 1 minimum. Skill-based routing is included in all CX tiers. WEM (Workforce Engagement Management) is recommended for forecasting skill-level capacity but is not required for the routing configuration itself.
- Permissions:
routing:queue:writeto modify queue skill requirements and routing strategies.routing:skill:writeto create and manage skills.routing:skill-group:writeto define cross-skill groupings.routing:user:writeto assign skills to agent routing profiles.
- OAuth Scopes: If automating via API, requests must include
routing:queue:write,routing:skill:write, androuting:skill-group:write. - External Dependencies: WFM integration is critical for scheduling agents with the correct skill mix. This guide assumes WFM is providing shift patterns that align with the skill matrix defined here.
The Implementation Deep-Dive
1. Designing the Skill Topology and Proficiency Tiers
Cross-skilling fails when skills are defined as binary flags rather than weighted proficiencies. Genesys Cloud CX evaluates agent suitability using proficiency ratings on a scale of 0 to 100. If your skills are flat (all agents rated 100 on everything), the routing engine cannot differentiate between a primary specialist and a cross-trained generalist.
You must structure skills to reflect business value and complexity. Create distinct skills for each function (e.g., Sales-NewBusiness, Sales-Renewals, Support-Tech, Support-Billing). Assign proficiency ratings that reflect the agent’s capability. A primary Sales agent might have Sales-NewBusiness at 100 and Support-Billing at 60.
The Trap: Flat Proficiency Ratings
If you assign a cross-skill rating of 100 to an agent for a secondary function, the routing engine treats that agent as equally qualified as a primary specialist. During an overflow event, the engine may route a complex renewal call to a billing agent rated 100 on Sales-Renewals simply because they are idle. This degrades first-call resolution (FCR) and CSAT.
Remediation: Cap cross-skill proficiencies at a realistic threshold (e.g., 60-75). This ensures primary specialists (rated 90-100) retain priority for their core function, while cross-skilled agents absorb overflow only when primary agents are fully utilized.
API Implementation: Updating Agent Skill Proficiency
Use the routing profile API to assign skills with specific ratings. Do not rely on the UI for bulk updates.
POST /api/v2/routing/users/{userId}/routingprofile
{
"skills": [
{
"skillId": "uuid-sales-primary",
"skillName": "Sales-NewBusiness",
"proficiencyRating": 95
},
{
"skillId": "uuid-support-cross",
"skillName": "Support-Billing",
"proficiencyRating": 65
}
],
"wrapUpCodes": []
}
2. Configuring Queue Skills and Routing Strategies
The queue defines the demand side of the equation. Each queue must require the appropriate skill. The critical configuration lies in the routingStrategy within the queue object. Genesys Cloud CX offers strategies like Most Skilled, Longest Idle, and Least Recently Routed.
For cross-skilling strategies, Most Skilled is the default recommendation, but it introduces specific behaviors you must manage. Most Skilled selects the agent with the highest proficiency rating for the queue’s required skill. If Queue A requires Skill-A and Queue B requires Skill-B, and an agent has Skill-A (90) and Skill-B (60), that agent will always prefer Queue A over Queue B if both have calls. This prevents the agent from flowing to Queue B even if Queue A is over-staffed and Queue B is starved.
The Trap: The “Most Skilled” Lock
When using Most Skilled, agents become sticky to their highest-rated queues. In an over-staffed scenario, agents will sit idle in Queue A rather than taking calls in Queue B, because their rating in Queue A is higher. The routing engine does not consider “time idle” as a tie-breaker if the proficiency difference exceeds the system’s tolerance threshold.
Remediation: For queues designed to receive cross-skill overflow, switch the routing strategy to Longest Idle or Least Recently Routed. This forces agents to rotate across queues, ensuring that an idle cross-skilled agent takes a call in the overflow queue rather than waiting for a call in their primary queue. Alternatively, keep Most Skilled but implement a Skill Group with weighted priorities (see Step 3).
API Implementation: Queue Routing Strategy Configuration
Update the queue to use a strategy that supports cross-flow.
PATCH /api/v2/routing/queues/{queueId}
{
"name": "Support-Billing-Overflow",
"skills": [
{
"skillId": "uuid-support-billing",
"skillName": "Support-Billing",
"proficiencyRating": 60
}
],
"routingStrategy": {
"type": "longestIdle"
},
"wrapUpPolicy": "required",
"mediaTypes": ["voice"]
}
3. Utilizing Skill Groups for Overflow Hierarchy
Skill Groups allow you to bundle multiple skills into a single routing requirement. This is powerful for defining “Cross-Skill Sets.” You can create a Skill Group named Billing-Cross-Skill that includes Support-Billing, Sales-Renewals, and Support-General.
When a queue requires a Skill Group, the routing engine looks for agents who possess any skill within that group. The engine then scores agents based on the proficiency of the matching skill. This enables a queue to accept calls from multiple agent pools.
The Trap: Priority Inversion in Skill Groups
If you configure a queue to require a Skill Group, and agents have varying proficiencies across the skills in the group, you may encounter priority inversion. An agent with a high proficiency in a secondary skill might outrank a primary specialist if the primary specialist has a slightly lower rating on the primary skill.
Remediation: Define the Skill Group with explicit skill weights if your use case demands strict hierarchy. More importantly, validate that the proficiencyRating on the queue matches the minimum threshold you expect. If the queue requires Support-Billing with a threshold of 60, an agent with Support-Billing at 59 will never match, even if they are idle. Ensure the queue skill rating aligns with the cross-skill proficiency caps defined in Step 1.
API Implementation: Creating a Cross-Skill Group
POST /api/v2/routing/skillgroups
{
"name": "Billing-Cross-Skill-Group",
"description": "Agents capable of handling billing overflow",
"skills": [
{
"skillId": "uuid-support-billing",
"skillName": "Support-Billing",
"proficiencyRating": 60
},
{
"skillId": "uuid-sales-renewals",
"skillName": "Sales-Renewals",
"proficiencyRating": 70
}
]
}
4. Managing Wrap-Up Codes and State Transitions
Cross-skilling is heavily impacted by agent state management. When an agent finishes a call in Queue A, they enter a wrap-up state. During wrap-up, the agent is unavailable for routing. If wrap-up times are long, or if wrap-up codes are misconfigured, agents become “phantom available” to WFM but “busy” to the routing engine.
For cross-skilling to function, agents must transition to Available rapidly after completing calls in over-staffed queues. If an agent completes a call in Queue A and enters a 5-minute wrap-up, they cannot absorb overflow in Queue B. This creates artificial shortages in Queue B while Queue A remains over-staffed with agents stuck in wrap.
The Trap: Wrap-Up Code Bottlenecks
Configuring wrapUpPolicy: required on all queues without analyzing average handle time (AHT) distributions causes cross-skill flow to stall. Agents in high-volume queues accumulate wrap-up time, effectively reducing their utilization to zero during the wrap period.
Remediation: Implement short, standardized wrap-up codes for cross-skill queues. Use wrapUpPolicy: optional on overflow queues if business processes allow, or configure specific wrap-up codes that trigger immediate skill release. Monitor the Available vs Ready state metrics. An agent is Ready only when they are Available and not in wrap-up. Cross-skill routing only targets Ready agents.
Architectural Reasoning:
Wrap-up is a hard block on the routing engine. The engine does not route to agents in wrap-up regardless of skill. You must treat wrap-up time as part of the occupancy calculation. If your cross-skill strategy relies on 20% overflow absorption, and wrap-up consumes 15% of agent time, your effective cross-skill capacity drops to 5%. Adjust WFM schedules to account for this lost capacity.
5. Integrating WFM Scheduling with Skill Capacity
The routing engine executes the strategy, but WFM determines if the strategy is viable. Cross-skilling fails if WFM schedules agents based on headcount rather than skill capacity. If WFM schedules 10 agents with Skill-A for Queue A, and Queue A only needs 5 agents, the remaining 5 agents must have Skill-B assigned and scheduled to absorb overflow.
If WFM schedules agents with Skill-A only, those agents cannot route to Queue B even if Queue B is starved. The routing engine respects the skill matrix; it does not invent skills.
The Trap: Schedule-Skill Mismatch
WFM forecasts demand for Queue A and Queue B independently. If WFM optimizes for Queue A, it may schedule agents with only Skill-A. When Queue A demand drops, those agents have no secondary skill to route to.
Remediation: Configure WFM to schedule based on “Skill Capacity” rather than “Queue Headcount.” Create WFM profiles that include multiple skills. Ensure the WFM optimization engine considers cross-skill availability when generating shift patterns. Use the wfm:forecast:write scope to push skill-level forecasts to Genesys, ensuring the routing engine has visibility into expected demand for each skill.
Validation, Edge Cases & Troubleshooting
Edge Case 1: The “Skill Hoarding” Effect
Failure Condition: Agents remain assigned to a queue long after demand has subsided, refusing calls from other queues even though they possess the cross-skill.
Root Cause: The Most Skilled strategy is active, and the agent’s proficiency in the current queue is higher than in the overflow queue. The agent is also “Longest Idle” in the current queue, reinforcing the stickiness.
Solution: Switch the overflow queue strategy to Longest Idle. Alternatively, reduce the proficiency rating of the primary skill on the agent’s routing profile to match the cross-skill rating, forcing the engine to treat them as equal. This is a temporary measure for testing; permanent changes require WFM schedule adjustments.
Edge Case 2: Proficiency Threshold Misconfiguration
Failure Condition: Agents are idle and possess the cross-skill, but calls in the overflow queue remain in queue without routing.
Root Cause: The queue skill requirement has a proficiencyRating threshold higher than the agent’s assigned rating. For example, the queue requires Support-Billing at 70, but the agent has Support-Billing at 65. The agent does not match the queue.
Solution: Audit the queue skill configuration via GET /api/v2/routing/queues/{queueId}. Verify the proficiencyRating on the queue matches or is lower than the agent’s rating. Adjust the queue threshold or the agent’s proficiency to align.
Edge Case 3: Wrap-Up Code Blocking
Failure Condition: Cross-skill flow stops intermittently during peak wrap-up periods. Agents appear “Available” in the agent desktop but do not receive calls.
Root Cause: Agents are in Available state but have an active wrap-up code assigned. The routing engine filters out agents with active wrap-up codes.
Solution: Check the agent’s routing profile state via GET /api/v2/routing/users/{userId}/statehistory. Look for wrapUpCodeId values. If present, the agent is blocked. Implement a flow in Architect to clear wrap-up codes automatically after a duration, or train agents to use “No Wrap” codes for cross-skill calls.