Call Handling & Routing
Implement intelligent call handling with Skaala’s AI receptionist.
Overview
Skaala provides flexible call routing to ensure customers reach the right destination:
- Smart Routing: Route based on intent, time, or customer data
- Overflow Handling: Fallback options when agents unavailable
- Business Hours: Different routing for office hours vs after-hours
- VIP Treatment: Priority routing for high-value customers
Call Flow Architecture
Basic Call Routing
Business Hours Configuration
{
"business_hours": {
"monday": { "start": "09:00", "end": "17:00" },
"tuesday": { "start": "09:00", "end": "17:00" },
"wednesday": { "start": "09:00", "end": "17:00" },
"thursday": { "start": "09:00", "end": "17:00" },
"friday": { "start": "09:00", "end": "17:00" },
"saturday": { "start": "10:00", "end": "14:00" },
"sunday": "closed"
},
"timezone": "Europe/Stockholm"
}
After-Hours Handling
Voicemail
Emergency Transfer
Automated Booking
Record message and create ticket{
"after_hours_action": "voicemail",
"voicemail_prompt": "We're currently closed. Please leave a message.",
"notify_email": "support@example.com"
}
Route urgent calls to on-call staff{
"after_hours_action": "emergency_transfer",
"emergency_number": "+46701234567",
"emergency_prompt": "For emergencies, I'll connect you now."
}
Allow self-service booking 24/7{
"after_hours_action": "booking_only",
"booking_prompt": "I can help you schedule an appointment."
}
Advanced Routing
Intent-Based Routing
Route calls based on detected customer intent:
const routingRules = {
"sales_inquiry": {
action: "transfer",
number: "+46701111111",
message: "Let me connect you with sales"
},
"technical_support": {
action: "transfer",
number: "+46702222222",
priority: "high"
},
"booking": {
action: "ai_handle",
tools: ["calendar", "booking"]
},
"general_question": {
action: "ai_handle",
tools: ["knowledge_base"]
}
};
Customer-Based Routing
Detect VIP customers by phone number and provide priority serviceif (customer.tier === 'vip') {
return {
greeting: "Welcome back, valued customer",
wait_time: 0,
transfer_priority: "immediate"
};
}
Recognize returning customers and personalize greetingif (customer.previous_calls > 0) {
return {
greeting: `Welcome back! I see you called about ${lastTopic}`,
context: customer.history
};
}
Call Analytics
Track and optimize call performance:
Call Volume
Monitor peak hours and staffing needs
Resolution Rate
Track % of calls handled by AI vs transferred
Wait Times
Measure average hold and response times
Customer Satisfaction
Post-call surveys and feedback
Webhook Integration
React to call events in real-time:
app.post('/webhooks/skaala', async (req, res) => {
const { event, data } = req.body;
switch (event) {
case 'call.started':
// Log call initiation
await logCall(data.call_id, data.from);
break;
case 'call.transferred':
// Notify agent of incoming transfer
await notifyAgent(data.agent_id, data.call_context);
break;
case 'call.completed':
// Update CRM with call summary
await updateCRM(data.contact_id, data.summary);
break;
}
res.status(200).send('OK');
});
Best Practices
Test your routing rules thoroughly before deploying to production
Map Customer Journeys
Document all possible call paths and outcomes
Set Fallback Rules
Always have a default route for unexpected scenarios
Monitor & Optimize
Review call analytics weekly and adjust routing
Train Staff
Ensure human agents understand AI handoff process
Calls API
Programmatic call management
Webhooks
Real-time call event notifications