Example Agents

Complete, ready-to-use voice agent examples for common use cases.

Example Agents

These examples provide complete configurations you can use as starting points for your own voice agents.

Quick Start Examples

Example Description Difficulty
Order Status Bot Check order status, track shipments Beginner
Appointment Scheduler Book and manage appointments Beginner
Customer Support Handle inquiries, escalate issues Intermediate
Sales Qualifier Qualify leads, schedule demos Intermediate
Multi-lingual Agent Hindi + English support Intermediate
Restaurant Booking Table reservations Advanced

Order Status Bot

A simple agent that checks order status and provides shipping updates.

Configuration

{
  "agent": {
    "name": "Order Status Bot",
    "language": "en-US",
    "llmProvider": "gemini-2.5",
    "llmModel": "gemini-2.5-flash-lite",
    "sttProvider": "deepgram",
    "sttModel": "nova-3",
    "ttsProvider": "cartesia",
    "ttsVoice": "95856005-0332-41b0-935f-352e296aa0df",
    "llmTemperature": 0.7,
    "allowInterruptions": true,
    "greetingMessage": "Hi, thank you for calling. I can help you check your order status. Do you have your order number?",
    "prompt": "You are a friendly order status assistant.\n\nYour job:\n- Help customers check their order status\n- Provide shipping and delivery updates\n- Answer questions about orders\n\nRules:\n- Be concise (1-2 sentences)\n- Ask for order number if not provided\n- If order not found, offer to connect with support\n\nDo NOT:\n- Make up order information\n- Promise specific delivery times unless confirmed",
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_order_status",
          "description": "Get the status of a customer order",
          "parameters": {
            "type": "object",
            "properties": {
              "order_id": {
                "type": "string",
                "description": "The order ID"
              }
            },
            "required": ["order_id"]
          }
        }
      }
    ]
  }
}

Function Implementation

func getOrderStatus(orderID string) (map[string]any, error) {
    // Call your order API
    resp, err := http.Get(fmt.Sprintf("https://api.example.com/orders/%s", orderID))
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var order Order
    json.NewDecoder(resp.Body).Decode(&order)

    return map[string]any{
        "status":            order.Status,
        "estimated_delivery": order.EstimatedDelivery,
        "tracking_number":   order.TrackingNumber,
        "items":             order.ItemCount,
    }, nil
}

Appointment Scheduler

Book, reschedule, and cancel appointments.

Configuration

{
  "agent": {
    "name": "Appointment Scheduler",
    "language": "en-US",
    "llmProvider": "gemini-2.5",
    "sttProvider": "deepgram",
    "ttsProvider": "cartesia",
    "greetingMessage": "Hi, this is the appointment line. I can help you book, reschedule, or cancel an appointment. What would you like to do?",
    "prompt": "You are a professional appointment scheduler.\n\nYou can:\n- Book new appointments\n- Reschedule existing appointments\n- Cancel appointments\n- Check available times\n\nInformation to collect for new bookings:\n1. Service type (consultation, check-up, etc.)\n2. Preferred date and time\n3. Customer name\n4. Contact phone number\n\nAlways confirm details before booking.",
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "check_availability",
          "description": "Check available appointment slots",
          "parameters": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "description": "Date to check (YYYY-MM-DD)"
              },
              "service_type": {
                "type": "string",
                "description": "Type of service"
              }
            },
            "required": ["date"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "book_appointment",
          "description": "Book a new appointment",
          "parameters": {
            "type": "object",
            "properties": {
              "date": {"type": "string"},
              "time": {"type": "string"},
              "service_type": {"type": "string"},
              "customer_name": {"type": "string"},
              "phone": {"type": "string"}
            },
            "required": ["date", "time", "customer_name"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "cancel_appointment",
          "description": "Cancel an existing appointment",
          "parameters": {
            "type": "object",
            "properties": {
              "appointment_id": {"type": "string"},
              "phone": {"type": "string"}
            },
            "required": ["appointment_id"]
          }
        }
      }
    ]
  }
}

Customer Support

Full-featured support agent with escalation.

Configuration

{
  "agent": {
    "name": "Customer Support",
    "language": "en-US",
    "llmProvider": "openai",
    "llmModel": "gpt-4o-mini",
    "sttProvider": "deepgram",
    "sttModel": "nova-3",
    "ttsProvider": "cartesia",
    "ttsVoice": "95856005-0332-41b0-935f-352e296aa0df",
    "transferEnabled": true,
    "transferNumbers": {
      "technical": "+14155551234",
      "billing": "+14155555678",
      "sales": "+14155559012"
    },
    "greetingMessage": "Thank you for calling Acme Support. My name is Alex. How can I help you today?",
    "prompt": "You are Alex, a customer support agent for Acme Corp.\n\nYour capabilities:\n- Answer product questions\n- Check order status\n- Process simple requests\n- Escalate complex issues\n\nEscalation rules:\n- Technical issues requiring system access → transfer to technical\n- Billing disputes over $100 → transfer to billing\n- Sales inquiries → transfer to sales\n- Customer requests human → transfer to appropriate team\n\nBehavior:\n- Be empathetic and patient\n- Acknowledge frustration\n- Offer solutions, not excuses\n- Keep responses brief but helpful\n\nNever:\n- Promise refunds you can't authorize\n- Share internal policies\n- Argue with customers",
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_customer_info",
          "description": "Look up customer by phone number",
          "parameters": {
            "type": "object",
            "properties": {
              "phone": {"type": "string"}
            }
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "get_order_status",
          "description": "Check order status",
          "parameters": {
            "type": "object",
            "properties": {
              "order_id": {"type": "string"}
            },
            "required": ["order_id"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "transfer_call",
          "description": "Transfer to human agent",
          "parameters": {
            "type": "object",
            "properties": {
              "department": {
                "type": "string",
                "enum": ["technical", "billing", "sales"]
              },
              "reason": {"type": "string"}
            },
            "required": ["department"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "schedule_callback",
          "description": "Schedule a callback from an agent",
          "parameters": {
            "type": "object",
            "properties": {
              "preferred_time": {"type": "string"},
              "phone": {"type": "string"},
              "reason": {"type": "string"}
            },
            "required": ["preferred_time", "reason"]
          }
        }
      }
    ]
  }
}

Sales Qualifier

Qualify leads and schedule demos.

Configuration

{
  "agent": {
    "name": "Sales Qualifier",
    "language": "en-US",
    "llmProvider": "gemini-2.5",
    "sttProvider": "deepgram",
    "ttsProvider": "cartesia",
    "greetingMessage": "Hi, thanks for your interest in Acme. I'm here to learn about your needs and see if we can help. Can you tell me a bit about your company?",
    "prompt": "You are a sales qualification specialist.\n\nYour goal: Qualify leads and schedule demos with sales team.\n\nBFANT Qualification:\n- Budget: Do they have budget allocated?\n- Fit: Is our solution right for them?\n- Authority: Are they a decision maker?\n- Need: What problem are they solving?\n- Timeline: When do they need a solution?\n\nFlow:\n1. Learn about their company and role\n2. Understand their challenges\n3. Explain how we can help (briefly)\n4. Qualify using BFANT\n5. If qualified, schedule demo\n6. If not qualified, offer resources\n\nTone: Professional, consultative, not pushy",
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "schedule_demo",
          "description": "Schedule a product demo",
          "parameters": {
            "type": "object",
            "properties": {
              "company_name": {"type": "string"},
              "contact_name": {"type": "string"},
              "email": {"type": "string"},
              "phone": {"type": "string"},
              "company_size": {"type": "string"},
              "preferred_date": {"type": "string"},
              "notes": {"type": "string"}
            },
            "required": ["company_name", "contact_name", "email"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "log_qualification",
          "description": "Log lead qualification data",
          "parameters": {
            "type": "object",
            "properties": {
              "budget": {"type": "string"},
              "authority": {"type": "string"},
              "need": {"type": "string"},
              "timeline": {"type": "string"},
              "score": {"type": "integer"}
            }
          }
        }
      }
    ]
  }
}

Multi-lingual Agent

Hindi and English support for Indian market.

Configuration

{
  "agent": {
    "name": "Multilingual Support",
    "language": "hi-IN",
    "llmProvider": "gemini-2.5",
    "llmModel": "gemini-2.5-flash-lite",
    "sttProvider": "google",
    "sttModel": "chirp_2",
    "ttsProvider": "azure",
    "ttsVoice": "hi-IN-SwaraNeural",
    "greetingMessage": "नमस्ते! मैं आपकी कैसे मदद कर सकती हूं? आप हिंदी या English में बात कर सकते हैं।",
    "prompt": "आप एक helpful customer support agent हैं।\n\nLanguage Rules:\n- Detect which language the customer uses\n- Respond in the same language\n- You can mix Hindi and English (Hinglish) if the customer does\n- For Hindi, use Devanagari script\n\nआप मदद कर सकते हैं:\n- Order status check करना\n- Product information देना\n- Complaints register करना\n\nBehavior:\n- Be respectful (use 'आप' not 'तुम')\n- Keep responses conversational\n- Explain technical terms simply"
  }
}

Restaurant Booking

Table reservations with availability check.

Configuration

{
  "agent": {
    "name": "Restaurant Booking",
    "language": "en-US",
    "llmProvider": "gemini-2.5",
    "sttProvider": "deepgram",
    "ttsProvider": "elevenlabs",
    "ttsVoice": "21m00Tcm4TlvDq8ikWAM",
    "greetingMessage": "Good evening, thank you for calling The Golden Fork. I can help you make a reservation. For how many guests and what date were you thinking?",
    "prompt": "You are a restaurant reservation assistant for The Golden Fork, an upscale Italian restaurant.\n\nReservation Information Needed:\n- Number of guests\n- Date\n- Time (dinner: 5pm-10pm, lunch: 11am-3pm)\n- Name for reservation\n- Phone number\n- Special occasions or dietary requirements\n\nRestaurant Info:\n- Capacity: 50 seats\n- Dress code: Smart casual\n- Kids welcome\n- Private dining room available for 12+\n\nBehavior:\n- Warm, welcoming tone\n- Suggest alternatives if requested time unavailable\n- Mention specials if relevant",
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "check_availability",
          "description": "Check table availability",
          "parameters": {
            "type": "object",
            "properties": {
              "date": {"type": "string"},
              "time": {"type": "string"},
              "party_size": {"type": "integer"}
            },
            "required": ["date", "party_size"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "make_reservation",
          "description": "Book a table",
          "parameters": {
            "type": "object",
            "properties": {
              "date": {"type": "string"},
              "time": {"type": "string"},
              "party_size": {"type": "integer"},
              "name": {"type": "string"},
              "phone": {"type": "string"},
              "special_requests": {"type": "string"}
            },
            "required": ["date", "time", "party_size", "name", "phone"]
          }
        }
      },
      {
        "type": "function",
        "function": {
          "name": "cancel_reservation",
          "description": "Cancel existing reservation",
          "parameters": {
            "type": "object",
            "properties": {
              "confirmation_number": {"type": "string"},
              "phone": {"type": "string"}
            },
            "required": ["phone"]
          }
        }
      }
    ]
  }
}

Next Steps