Skip to main content

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 CenterWeb 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
  • 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 VariableJSON PathDefault Value
customerRef$.customer_ref``
confidence$.identity.confidence0.0
confidenceLevel$.identity.levellow
recommendation$.identity.recommendationignore
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 → VariablesCall Variables

Create new variable:

  • Name: CallerHistory
  • Type: String
  • Value: $(context)

3.2 Configure Agent Desktop

Five9 Agent Desktop → SettingsScreen 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 DispositionsPost-Disposition Actions

Add action:

  • Event: After disposition saved
  • Action: Call web connector StickyCallsEnd

Step 5: Testing

5.1 Test Call Flow

  1. Make test call from known number
  2. Verify web connector executes
  3. Check Five9 variables populated
  4. Confirm greeting plays correctly
  5. Verify agent screen pop displays

5.2 Debug Web Connector

Five9 Admin → Web ConnectorsStickyCallsStartTest

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

  1. Complete test call
  2. Add disposition notes
  3. Check webhook logs in dashboard
  4. Make second call from same number
  5. 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:

  1. Verify API key is correct
  2. Check authorization header format: Bearer sk_test_...
  3. Verify URL: https://api.stickycalls.com/v1/calls/start
  4. Check timeout setting (recommend 5000ms)

Variables Not Populating

Symptom: Five9 variables empty Solution:

  1. Check JSON path mappings
  2. Verify response structure matches expected format
  3. Test connector with sample data
  4. Check Five9 variable data types

Context Not Saving

Symptom: Second call doesn't show history Solution:

  1. Verify end-call connector is triggered
  2. Check disposition notes are populated
  3. Verify call_id and ANI match between start/end
  4. Check webhook logs in dashboard

ROI Metrics

Track these KPIs to measure success:

MetricBeforeAfterImprovement
Average Handle Time5:303:45-32%
First Call Resolution68%85%+25%
CSAT Score7.28.9+24%
Repeat Call Rate22%12%-45%

Best Practices

  1. Set appropriate timeout - 5 seconds recommended
  2. Handle failures gracefully - Continue to standard flow if API fails
  3. Use confidence thresholds - Only personalize for confidence > 0.7
  4. Save rich context - Include resolution details, not just "issue resolved"
  5. Monitor API usage - Track credits in dashboard

Next Steps


Ready to integrate? Sign up for free →