Skip to main content

ManyChat Integration

Build an Instagram, Facebook Messenger, or WhatsApp chatbot that lets customers browse your services and book appointments through chat.

What You'll Build

A ManyChat flow that guides customers through three steps:

  1. Browse your services using quick-reply buttons
  2. Pick an available time slot for their chosen date
  3. Confirm and book the appointment

Plus, optionally receive webhook notifications when bookings happen to trigger follow-up messages.

Prerequisites

  • A ManyChat account connected to your Instagram, Facebook, or WhatsApp channel.
  • A Reservly account with an API key (write scope). Go to Settings → Integrations to generate one.

Step 1: Create a New Flow

In ManyChat, go to Automation → Flows and click New Flow. Name it "Book an Appointment". This flow will be triggered when a customer sends a keyword like "book" or taps a menu button.

Step 2: Fetch Services with External Request

Add an External Requestaction (ManyChat's HTTP request block) as the first step in your flow:

External Request configuration
Request Type: GET
URL: https://reservly.io/api/public/luxe-salon/services
Headers: (none needed for GET requests)

Response Mapping:
  services[0].name  →  Custom Field: service_1_name
  services[0].price →  Custom Field: service_1_price
  services[0].id    →  Custom Field: service_1_id
  services[1].name  →  Custom Field: service_2_name
  services[1].price →  Custom Field: service_2_price
  services[1].id    →  Custom Field: service_2_id
  (repeat for as many services as you want to show)
text

Replace luxe-salon with your business slug. Create Custom Fields in ManyChat ahead of time to store the service data.

Step 3: Display Services as Buttons

After the External Request, add a Send Message block with quick-reply buttons. Use the custom fields to label each button:

Message template
Here are our available services:

💇 {{service_1_name}} — ${{service_1_price}}
💅 {{service_2_name}} — ${{service_2_price}}
✨ {{service_3_name}} — ${{service_3_price}}

Tap a service to check availability:
text

Each quick-reply button should save the selected service ID to a Custom Field (e.g., selected_service_id) and continue to the next step.

Step 4: Check Available Slots

After the customer selects a service, ask them for a date (or offer quick replies for "Today", "Tomorrow", etc.). Then add another External Request:

External Request for slots
Request Type: GET
URL: https://reservly.io/api/public/luxe-salon/slots?date={{selected_date}}&service_id={{selected_service_id}}
Headers: (none needed for GET requests)

Response Mapping:
  slots[0].time →  Custom Field: slot_1
  slots[1].time →  Custom Field: slot_2
  slots[2].time →  Custom Field: slot_3
  slots[3].time →  Custom Field: slot_4
text

Display the available times as quick-reply buttons so the customer can tap to select one.

Step 5: Book the Appointment

Once the customer picks a time, make a final External Request to create the booking:

External Request for booking
{
  "request_type": "POST",
  "url": "https://reservly.io/api/public/luxe-salon/book",
  "headers": {
    "Authorization": "Bearer rsvly_YOUR_KEY",
    "Content-Type": "application/json"
  },
  "body": {
    "service_ids": ["{{selected_service_id}}"],
    "date": "{{selected_date}}",
    "time": "{{selected_time}}",
    "customer_name": "{{full_name}}",
    "customer_email": "{{email}}",
    "source": "manychat"
  }
}
json

ManyChat automatically collects the user's name from their social profile. You can use the built-in Full Name and Email system fields, or ask the customer to provide them in the flow before booking.

Step 6: Booking Confirmation Webhooks

To send follow-up messages when bookings are confirmed (or cancelled), set up a Reservly webhook that posts to ManyChat:

  1. In Reservly, go to Settings → Integrations → Webhooks and add a new webhook.
  2. Set the URL to your ManyChat External Trigger URL (found under Settings → Integrations → API in ManyChat).
  3. Select the events you want: booking.created, booking.cancelled, etc.
  4. In ManyChat, create a flow triggered by the external trigger. Use the webhook payload data (customer name, service, date, time) to send a personalized confirmation message.

Flow Diagram

ManyChat flow overview
Customer sends "book"
    │
    ▼
[External Request: GET /services]
    │
    ▼
[Show services as quick-reply buttons]
    │
    ▼
Customer taps a service
    │
    ▼
[Ask for date — quick replies: Today / Tomorrow / Pick a date]
    │
    ▼
[External Request: GET /slots?date=...&service_id=...]
    │
    ▼
[Show available times as quick-reply buttons]
    │
    ▼
Customer taps a time
    │
    ▼
[Collect name + email if not already known]
    │
    ▼
[External Request: POST /book]
    │
    ▼
[Send confirmation message with booking details]
text

Testing

  1. In ManyChat, use the Preview mode to test the flow end-to-end.
  2. Send the trigger keyword ("book") from your connected Instagram, Messenger, or WhatsApp account.
  3. Walk through the full flow: select a service, date, and time.
  4. Check your Reservly dashboard — the booking should appear with the source "manychat".

Example Use Case

Luxe Salon & Spaadds a "Book Now" button to their Instagram profile that opens a DM with their ManyChat bot. When a follower taps it, the bot walks them through selecting a service, picking a time, and booking — all without leaving Instagram. The salon owner sees the booking in their dashboard and the customer gets a confirmation message in their DMs.

Next Steps