Skip to main content

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

Record message and create ticket
{
  "after_hours_action": "voicemail",
  "voicemail_prompt": "We're currently closed. Please leave a message.",
  "notify_email": "support@example.com"
}

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 service
if (customer.tier === 'vip') {
  return {
    greeting: "Welcome back, valued customer",
    wait_time: 0,
    transfer_priority: "immediate"
  };
}
Recognize returning customers and personalize greeting
if (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
1

Map Customer Journeys

Document all possible call paths and outcomes
2

Set Fallback Rules

Always have a default route for unexpected scenarios
3

Monitor & Optimize

Review call analytics weekly and adjust routing
4

Train Staff

Ensure human agents understand AI handoff process

Calls API

Programmatic call management

Webhooks

Real-time call event notifications