Skip to main content

Vapi Voice AI Integration

Build an AI voice receptionist that answers phone calls, checks your availability, and books appointments automatically using Reservly's API.

What You'll Build

A phone-answering assistant powered by Vapi that can handle three tasks for your callers:

  1. List your available services and pricing
  2. Check open time slots for a specific date
  3. Book an appointment and confirm it with the caller

Prerequisites

  • A Reservly account with an API key (write scope). Go to Settings → Integrations to generate one.
  • A Vapi account with a phone number provisioned.

Step 1: Get Your Reservly API Key

In your Reservly dashboard, go to Settings → Integrations and click Generate API Key. Select the write scope (needed for booking). Copy the key — you'll paste it into Vapi in the next steps.

Step 2: Create a Vapi Assistant

In the Vapi dashboard, create a new assistant. Give it a name like "Luxe Salon Receptionist" and choose a voice model. The assistant will use custom tools (defined next) to interact with Reservly's API.

Step 3: Add Custom Tools

In Vapi, go to your assistant's Tools section and add three tools. Each tool maps to a Reservly API endpoint.

Tool 1: Check Services

Lists all available services so the caller can choose one.

check_services tool definition
{
  "type": "function",
  "function": {
    "name": "check_services",
    "description": "Get the list of available services with names, durations, and prices.",
    "parameters": {
      "type": "object",
      "properties": {},
      "required": []
    }
  },
  "server": {
    "url": "https://reservly.io/api/public/luxe-salon/services"
  }
}
json

Tool 2: Check Availability

Checks open time slots for a given date and service. The assistant will call this after the caller picks a service and date.

check_availability tool definition
{
  "type": "function",
  "function": {
    "name": "check_availability",
    "description": "Check available time slots for a specific date and service.",
    "parameters": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "description": "The date to check in YYYY-MM-DD format."
        },
        "service_id": {
          "type": "string",
          "description": "The service ID returned from check_services."
        }
      },
      "required": ["date", "service_id"]
    }
  },
  "server": {
    "url": "https://reservly.io/api/public/luxe-salon/slots"
  }
}
json

Tool 3: Book Appointment

Creates a booking once the caller confirms. Requires your API key in the Authorization header.

book_appointment tool definition
{
  "type": "function",
  "function": {
    "name": "book_appointment",
    "description": "Book an appointment for the caller. Collect their name, email, chosen service, date, and time first.",
    "parameters": {
      "type": "object",
      "properties": {
        "service_id": {
          "type": "string",
          "description": "The service ID to book."
        },
        "date": {
          "type": "string",
          "description": "Booking date in YYYY-MM-DD format."
        },
        "time": {
          "type": "string",
          "description": "Booking time in HH:MM format (24-hour)."
        },
        "customer_name": {
          "type": "string",
          "description": "The caller's full name."
        },
        "customer_email": {
          "type": "string",
          "description": "The caller's email address."
        }
      },
      "required": ["service_id", "date", "time", "customer_name", "customer_email"]
    }
  },
  "server": {
    "url": "https://reservly.io/api/public/luxe-salon/book",
    "method": "POST",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer rsvly_YOUR_API_KEY"
    }
  }
}
json

Replace rsvly_YOUR_API_KEY with your actual Reservly API key and luxe-salon with your business slug.

Step 4: Configure the System Prompt

In Vapi's assistant settings, set the system prompt to define how the assistant behaves. Here is a starting template:

System prompt
You are a friendly receptionist for Luxe Salon & Spa.

Your job is to help callers book appointments over the phone.

Follow this flow:
1. Greet the caller warmly. Ask how you can help.
2. If they want to book, use check_services to list available services. Read out the service names and prices.
3. Once they pick a service, ask what date works for them.
4. Use check_availability to find open slots for that date and service. Read out the available times.
5. Once they pick a time, ask for their full name and email address.
6. Use book_appointment to create the booking.
7. Confirm the booking details: service, date, time, and let them know they'll receive a confirmation email.

Be conversational and helpful. If no slots are available, suggest the next day. If they ask about something you can't help with, let them know the salon will call them back.
text

Step 5: Test Your Assistant

  1. In Vapi, click Test to start a simulated call.
  2. Ask to book a haircut for tomorrow.
  3. Verify the assistant calls check_services, then check_availability, then book_appointment in sequence.
  4. Check your Reservly dashboard — the booking should appear in the Bookings page.

Example Use Case

Luxe Salon & Spaassigns a local phone number through Vapi. When a customer calls, the AI receptionist answers, walks them through available services (haircut, color, blowout), finds an open slot, and books the appointment. The customer receives a confirmation email automatically. The salon owner sees the booking in their dashboard with the source marked as "API".

Next Steps