Skip to main content

Proactive Callback Use Case

Enable agents to call customers back with full context of previous conversation and open issues.


Business Problem

Scenario: Agent needs to call customer back

Without Context:

  • Agent: "Hi, this is John from support. I'm calling you back."
  • Customer: "About what?"
  • Agent: "Let me look up your account... what was your issue again?"
  • Customer: Frustrated, repeats entire story
  • Poor experience

With Sticky Calls:

  • Agent pulls up caller's context before dialing
  • Agent: "Hi Sarah, this is John from billing. I'm calling about the refund request you made yesterday. I have good news - it's been approved!"
  • Customer: Impressed by proactive, informed service
  • Excellent experience

ROI:

  • 📉 40% reduction in escalations
  • 📈 55% improvement in callback CSAT
  • ⏱️ 50% faster callback resolution
  • 💰 Higher first-call resolution

Implementation

1. Agent Initiates Callback

Agent Workflow:

1. Agent opens CRM/dialer
2. Enters customer phone number
3. System calls: GET /v1/calls/start with ANI
4. System displays context before call connects:

┌─ Caller Context ──────────────────────┐
│ Name: Sarah Johnson │
│ Phone: +1 (415) 555-1234 │
│ │
│ Last Contact: Yesterday at 2:30 PM │
│ │
│ Context: │
│ "Customer requested refund for │
│ duplicate charge ($50). Submitted │
│ to billing team for approval." │
│ │
│ Open Issues: │
│ • Refund pending approval │
│ │
│ Confidence: 98% │
└────────────────────────────────────────┘

5. Agent reviews context
6. Agent places call fully informed

2. API Call Before Dialing

POST /v1/calls/start
{
"call_id": "callback_001",
"identity_hints": {
"ani": "+14155551234",
"external_ids": {
"agent_id": "agent_john_123"
}
}
}

Response:

{
"call_id": "callback_001",
"customer_ref": "cust_abc123",
"call_start": "2026-02-06T15:30:00.000Z",
"identity": {
"confidence": 0.98,
"level": "very_high",
"sources": ["ani:mobile", "recency:1day"],
"recommendation": "reuse"
},
"open_intents": [
{
"intent": "refund_pending",
"status": "open",
"attempt_count": 1
}
],
"variables": {
"last_issue": {
"value": "Customer requested refund for duplicate charge ($50). Submitted to billing for approval.",
"source": null,
"ttl_seconds": 2592000
}
}
}

3. Informed Opening

Agent Script:

Opening: "Hi \{customer_name\}, this is \{agent_name\} from \{department\}. 
I'm calling about \{context_summary\}."

Example: "Hi Sarah, this is John from our billing department.
I'm calling about the refund request you submitted yesterday."

NOT: "Hi, I'm calling you back."
NOT: "Can you remind me what this was about?"

4. Save Updated Context

After callback:

POST /v1/calls/end
{
"call_id": "callback_001",
"customer_ref": "cust_abc123",
"intent": "refund_request",
"intent_status": "resolved",
"variables": {
"resolution": "Callback completed. Refund approved and processed ($50). Customer satisfied.",
"refund_amount": "50.00",
"callback_date": "2026-02-06"
}
}

Use Cases

Scenario 1: Follow-Up on Pending Issue

Initial Call:

  • Customer: "I need a refund for a duplicate charge"
  • Agent: "I'll submit this to billing and call you back tomorrow"
  • Context saved: "Refund request submitted - pending approval"
  • Open intent: refund_pending

Callback Next Day:

  • Agent pulls context before calling
  • Sees: Refund pending, submitted yesterday
  • Calls customer: "Hi Sarah, I'm calling about your refund request from yesterday. Good news - it's been approved!"
  • Customer: Delighted by proactive follow-up

Result: CSAT 9.5/10, issue resolved

Scenario 2: Escalation Follow-Up

Initial Call:

  • Customer frustrated with technical issue
  • Tier 1 agent: "Let me escalate this to our senior team"
  • Context: "Router configuration issue - needs tier 2 support"

Escalation Callback:

  • Senior agent reviews context
  • Sees full troubleshooting history
  • Calls customer: "Hi, I'm calling about your router issue. I've reviewed the troubleshooting you already completed..."
  • No repeated steps, immediate advanced support

Result: Escalation resolved, prevented churn

Scenario 3: Appointment Reminder

Scheduled Callback:

  • Customer scheduled technical support callback for 3 PM
  • At 2:55 PM, agent pulls context
  • Sees: "Customer needs help setting up new device"
  • Agent calls at 3:00 PM sharp: "Hi, I'm calling for your scheduled tech support session. I understand you need help setting up your new device?"

Result: Customer impressed by punctuality and preparation


Integration Examples

Salesforce + Five9

// Salesforce clicks dial button
// Trigger: Before call placed

async function prepareCallback(phoneNumber) {
// Call Sticky Calls API
const response = await fetch('https://api.stickycalls.com/v1/calls/start', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_prod_abc123',
'Content-Type': 'application/json'
},
body: JSON.stringify({
call_id: generateCallId(),
identity_hints: {
ani: phoneNumber
}
})
});

const context = await response.json();

// Display context to agent
showContextPanel({
previousContext: context.variables?.last_issue?.value || '',
openIssues: context.open_intents.filter(i => i.status === 'open').map(i => i.intent),
customerRef: context.customer_ref,
confidence: context.identity.confidence
});

// Agent reviews before call connects
return context;
}

NICE CXone Outbound

Outbound Campaign:

Before Dial: Call Sticky Calls API

Display Context in Agent Desktop

Connect Call (agent is prepared)

After Call: Save updated context

Custom CRM Integration

def initiate_callback(customer_phone):
# Get context before calling
context = sticky_calls.identify_caller(
call_id=generate_id(),
identity_hints={
"ani": customer_phone
}
)

# Show agent the context
agent_ui.display_context({
"last_interaction": context['variables'].get('last_issue', {}).get('value', ''),
"open_issues": [i['intent'] for i in context['open_intents'] if i['status'] == 'open'],
"confidence": context['identity']['confidence'],
"customer_ref": context['customer_ref']
})

# Wait for agent to review (3 seconds)
time.sleep(3)

# Place call
dialer.call(customer_phone)

return context

Best Practices

1. Always Pull Context First

Never dial blind:

❌ Dial → Connect → "Can you remind me why I'm calling?"
✅ Pull context → Review → Dial → "I'm calling about \{specific issue\}"

2. Give Agents Time to Review

Don't auto-connect immediately:

# Show context
display_context(context)

# Wait 5 seconds for agent to read
time.sleep(5)

# Then connect call
place_call()

3. Highlight Open Issues

┌─ Callback Context ────────────────┐
│ ⚠️ OPEN ISSUES: │
│ • Refund pending (2 days old) │
│ • Follow-up promised by today │
│ │
│ Previous Context: │
│ "Customer was told callback would │
│ happen within 24 hours..." │
└───────────────────────────────────┘

4. Script Opening Lines

Train agents with templates:

Template 1: Follow-up "Hi {name}, this is {agent} from {company}. I'm following up on {issue} from {date}."

Template 2: Good news "Hi {name}, I'm calling with an update on {issue}. Good news - {resolution}!"

Template 3: Scheduled "Hi {name}, this is your scheduled callback about {issue}."

5. Close the Loop

Always save outcome:

POST /v1/calls/end
{
"call_id": "callback_001",
"customer_ref": "cust_abc123",
"intent": "callback_followup",
"intent_status": "resolved", # or "open" if unresolved
"variables": {
"resolution": "Callback completed. \{outcome\}. \{next_steps\}.",
"callback_outcome": "success"
}
}

Metrics to Track

MetricTargetBenefit
Callback CSAT> 9.0/10Customer delight
Callback Completion Rate> 90%Follow-through
Escalation Closure Rate> 85%Issue resolution
Avg Callback Duration< 3 minEfficiency
Repeat Callback Rate< 5%First-time resolution

ROI Example

Company Profile:

  • 500 callbacks/month
  • Agent cost: $25/hour
  • Average callback time: 10 minutes

Without Sticky Calls:

  • 2 minutes wasted per call: "What was this about again?"
  • Total wasted time: 1,000 minutes/month = 16.7 hours
  • Cost: $417/month = $5,004/year

With Sticky Calls:

  • Zero wasted time
  • Callbacks 50% more effective
  • Escalations reduced 40%
  • Savings: $5,004/year + prevented escalations

Sticky Calls Cost:

  • 500 callbacks/month × 0 credits (matches) = $0/month

ROI: Infinite (free for returning callers)


Implementation Checklist

  • Integrate API call before outbound dialing
  • Create context display UI for agents
  • Build 3-5 second review period
  • Train agents on informed callback scripts
  • Set up automatic context saving after callbacks
  • Create callback templates for common scenarios
  • Track callback CSAT separately
  • Monitor open intent closure rate
  • Celebrate wins with team

Next Steps


Ready to delight customers with informed callbacks? Sign up for free →