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:
- Browse your services using quick-reply buttons
- Pick an available time slot for their chosen date
- 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:
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:
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:textEach 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:
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_4textDisplay 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:
{
"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"
}
}jsonManyChat 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:
- In Reservly, go to Settings → Integrations → Webhooks and add a new webhook.
- Set the URL to your ManyChat External Trigger URL (found under Settings → Integrations → API in ManyChat).
- Select the events you want:
booking.created,booking.cancelled, etc. - 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
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]textTesting
- In ManyChat, use the Preview mode to test the flow end-to-end.
- Send the trigger keyword ("book") from your connected Instagram, Messenger, or WhatsApp account.
- Walk through the full flow: select a service, date, and time.
- 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
- REST API Reference— full endpoint documentation
- Webhooks— trigger follow-up flows when bookings change
- All Integration Guides— connect with other platforms