Five9 Integration Guide
Integrate Sticky Calls API with Five9 for personalized IVR greetings and agent screen pops.
Overview
Setup Time: 15-20 minutes Difficulty: Easy Prerequisites:
- Five9 admin access
- Sticky Calls API key
- Web Services license in Five9
What You'll Build:
- Automatic caller identification via ANI
- Personalized IVR greetings
- Agent screen pop with caller history
- Context saving at call end
Architecture
Incoming Call → Five9 IVR → Web Connector (Sticky Calls) →
Match Found? → Personalized Greeting → Route to Agent →
Agent Screen Pop (History) → Call Ends → Save Context
Step 1: Create Web Connector
1.1 Navigate to Web Connectors
Five9 Admin Console → Contact Center → Web Connectors
1.2 Create New Connector
Click Add New
Configuration:
- Name:
StickyCallsStart - Method:
POST - URL:
https://api.stickycalls.com/v1/calls/start - Authentication: Custom Header
- Header Name:
Authorization - Header Value:
Bearer YOUR_API_KEY
- Header Name:
- Timeout: 5000ms
1.3 Request Body
{
"call_id": "$(call.id)",
"identity_hints": {
"ani": "$(call.ani)",
"external_ids": {
"five9_call_id": "$(call.id)",
"campaign_id": "$(campaign.id)"
}
}
}
1.4 Response Mapping
Map API response to Five9 variables:
| Five9 Variable | JSON Path | Default Value |
|---|---|---|
customerRef | $.customer_ref | `` |
confidence | $.identity.confidence | 0.0 |
confidenceLevel | $.identity.level | low |
recommendation | $.identity.recommendation | ignore |
openIntents | $.open_intents[0].intent | `` |
customerName | $.variables.name.value | `` |
Step 2: Create IVR Script
2.1 Call Web Connector
IVR Module: Web Connector
Settings:
- Connector:
StickyCallsStart - On Success: Store variables
- On Failure: Continue to standard greeting
2.2 Conditional Greeting
IVR Module: Play Message
Condition 1 (High Confidence Match):
IF $(confidence) >= 0.7
THEN Play: "Welcome back $(customerName)! I see you previously called about $(openIntents)"
Condition 2 (Low Confidence or No Match):
ELSE Play: "Welcome to our contact center"
2.3 Route Based on Context
IVR Module: Menu
Options:
- If
$(openIntents)contains "refund": Route to Billing queue - If
$(openIntents)contains "support": Route to Technical queue - Default: Standard menu
Step 3: Agent Screen Pop
3.1 Create Screen Pop Variable
Five9 Admin → Variables → Call Variables
Create new variable:
- Name:
CallerHistory - Type: String
- Value:
$(context)
3.2 Configure Agent Desktop
Five9 Agent Desktop → Settings → Screen Pop
Configuration:
{
"fields": [
{
"label": "Previous Context",
"value": "$(CallerHistory)"
},
{
"label": "Open Issues",
"value": "$(openIntents)"
},
{
"label": "Last Call",
"value": "$(lastCallAt)"
},
{
"label": "Confidence",
"value": "$(confidence)"
}
]
}
Step 4: Save Context on Call End
4.1 Create End Call Web Connector
Configuration:
- Name:
StickyCallsEnd - Method:
POST - URL:
https://api.stickycalls.com/v1/calls/end - Authentication: Bearer token (same as above)
4.2 Request Body
{
"call_id": "$(call.id)",
"customer_ref": "$(customerRef)",
"intent": "$(disposition.category)",
"intent_status": "resolved",
"variables": {
"last_interaction": "$(disposition.notes)",
"agent_name": "$(agent.name)"
}
}
4.3 Trigger on Call Disposition
Five9 Admin → Call Dispositions → Post-Disposition Actions
Add action:
- Event: After disposition saved
- Action: Call web connector
StickyCallsEnd
Step 5: Testing
5.1 Test Call Flow
- Make test call from known number
- Verify web connector executes
- Check Five9 variables populated
- Confirm greeting plays correctly
- Verify agent screen pop displays
5.2 Debug Web Connector
Five9 Admin → Web Connectors → StickyCallsStart → Test
Test Request:
{
"call_id": "test_001",
"identity_hints": {
"ani": "+14155551234",
"external_ids": {
"five9_call_id": "test_001"
}
}
}
Expected Response:
{
"call_id": "test_001",
"customer_ref": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"call_start": "2026-02-07T10:30:00.000Z",
"identity": {
"confidence": 0,
"level": "low",
"sources": [],
"recommendation": "ignore"
},
"open_intents": [],
"variables": {}
}
5.3 Verify Context Saving
- Complete test call
- Add disposition notes
- Check webhook logs in dashboard
- Make second call from same number
- Verify context returned
Advanced Configuration
Multi-Signal Identification
Add customer ID from CRM:
{
"call_id": "$(call.id)",
"identity_hints": {
"ani": "$(call.ani)",
"external_ids": {
"customer_id": "$(crm.customer_id)",
"account_number": "$(crm.account)"
}
}
}
Confidence-Based Routing
Route high-confidence matches to skilled agents:
IF $(confidence) > 0.9 AND $(openIntents) contains "escalation"
THEN Route to: Senior Support Queue
ELSE Route to: Standard Queue
Custom Greetings by Tier
IF $(variables.vip_tier.value) = "Gold" OR $(variables.vip_tier.value) = "Platinum"
THEN Play: "Welcome back, valued customer!"
ELSE Play: Standard greeting
Troubleshooting
Web Connector Fails
Symptom: Connector returns error Solution:
- Verify API key is correct
- Check authorization header format:
Bearer sk_test_... - Verify URL:
https://api.stickycalls.com/v1/calls/start - Check timeout setting (recommend 5000ms)
Variables Not Populating
Symptom: Five9 variables empty Solution:
- Check JSON path mappings
- Verify response structure matches expected format
- Test connector with sample data
- Check Five9 variable data types
Context Not Saving
Symptom: Second call doesn't show history Solution:
- Verify end-call connector is triggered
- Check disposition notes are populated
- Verify call_id and ANI match between start/end
- Check webhook logs in dashboard
ROI Metrics
Track these KPIs to measure success:
| Metric | Before | After | Improvement |
|---|---|---|---|
| Average Handle Time | 5:30 | 3:45 | -32% |
| First Call Resolution | 68% | 85% | +25% |
| CSAT Score | 7.2 | 8.9 | +24% |
| Repeat Call Rate | 22% | 12% | -45% |
Best Practices
- Set appropriate timeout - 5 seconds recommended
- Handle failures gracefully - Continue to standard flow if API fails
- Use confidence thresholds - Only personalize for confidence > 0.7
- Save rich context - Include resolution details, not just "issue resolved"
- Monitor API usage - Track credits in dashboard
Next Steps
- View API Reference - Complete endpoint documentation
- Best Practices - Production optimization tips
- Generic IVR Guide - Alternative integration patterns
- Contact Support - Get help
Ready to integrate? Sign up for free →