How can we help?

Calendar Booking — Outlook Calendar & Calendly

Calendar Booking — Outlook Calendar & Calendly

Overview

Velaro lets your bot book meetings directly on an Outlook Calendar or send a Calendly scheduling link — without any manual steps. The visitor chats, the bot collects their info, and a calendar event is created automatically.

Two options are available:

| Feature | Outlook Calendar | Calendly |

|---|---|---|

| Availability management | ✓ Built in — time blocks, working days, schedule overrides | ✓ Calendly manages it |

| Buffer time between appointments | ✓ Built in (per appointment type) | ✓ Built in |

| Max booking horizon & min notice | ✓ Built in (per appointment type) | ✓ Built in |

| Bot offers specific time slots | ✓ Bot presents options; visitor picks one | Visitor self-picks from Calendly link |

| Auto calendar invite to visitor | ✓ Sent via Microsoft Graph (works for Gmail too) | ✓ Calendly sends it |

| Per-rep routing | ✓ Appointment types per rep, each with own hours | Calendly routing forms |

| Automatic reminders | Custom workflows needed | ✓ Calendly sends them |

| CRM sync (Salesforce, HubSpot) | Via Velaro rules | ✓ Calendly integrations |

| Requires Calendly subscription | No (just Microsoft 365) | Yes |

| Best for | M365 teams wanting full control, bot-driven slot selection, company calendar | Google Workspace teams, visitor self-scheduling, teams already using Calendly |

Choose Outlook Calendar if you are on Microsoft 365 and want the bot to present specific slots and create calendar events automatically.

Choose Calendly if your team uses Google Workspace, you want Calendly's own reminders and CRM integrations, or visitors should freely pick any open slot.

Both can run simultaneously — use Outlook for structured demos and Calendly for quick calls.

Go to Integrations > Outlook Calendar or Integrations > Calendly to set up either.

---

Outlook Calendar setup

Prerequisites: Microsoft 365 must be connected first (Integrations > Microsoft 365). Velaro uses that same M365 connection — no separate login needed.

Steps:

1. Go to Integrations > Outlook Calendar.

2. Enter the organizer email — the calendar where bookings will land (e.g. demos@company.com).

3. Set a default meeting duration, title prefix, and optional meeting link (Teams/Zoom/Meet).

4. Click Save configuration, then Test connection to verify access.

5. Use Launch Starter Wizard to create a bot workflow for booking.

Azure permission note: The Velaro Azure app needs Calendars.ReadWrite application permission. If booking tests fail, ask your Azure admin to add this in Azure Portal → App Registrations → Velaro Admin → API Permissions.

---

Appointment types — the key concept

Instead of one global calendar, you define Appointment Types — named booking slots, each with its own rules. Think of it like Calendly event types, but native to Outlook.

Examples:

  • "Product Demo" → demos@company.com, 60 min, Mon–Fri 9 AM–5 PM, 2-day advance notice required
  • "Support Call" → support@company.com, 30 min, Mon–Fri 8 AM–6 PM, same-day OK
  • "Executive QBR" → ceo@company.com, 90 min, Tue–Thu 10 AM–3 PM, 5-day advance required

To create an appointment type: Go to Integrations > Outlook Calendar, scroll to "Appointment Types", click + Add type.

Each type can configure:

  • Name and description — shown in the admin UI and used as the calendar event title prefix
  • Organizer email — whose Outlook calendar gets the booking (leave blank = company shared calendar)
  • Duration — 15 to 120 minutes
  • Available days — checkboxes for Mon, Tue, Wed, Thu, Fri, Sat, Sun
  • Available hours — one or more time blocks per day (see below)
  • Timezone — IANA format, e.g. America/New_York, Europe/London, UTC
  • Min. notice — how many hours in advance a visitor must book (0 = same-day, 72 = 3 days minimum)
  • Book up to X days out — how far ahead visitors can schedule (default 90 days)
  • Buffer — minutes gap between consecutive appointments (e.g. 15 = back-to-back bookings blocked)
  • Random slots — show only N random available slots instead of all of them (see below)
  • Notify organizer — send an email to the organizer when a booking is made

---

Multiple time blocks per day

You are not limited to a single 9–5 window. You can define multiple time windows for the same day.

Example: Available 9–10 AM and again 2–5 PM (lunch break and morning after 10 are blocked).

In the appointment type form, under "Available hours", click + Add another time block to add a second window. The bot will only offer slots that fall entirely within one of those windows.

Why this is useful:

  • Morning calls + afternoon calls with a break in between
  • Split availability across two shifts
  • Reserve mornings for internal work, open afternoons for demos

---

Weekly schedule overrides

Your default availability is set in the appointment type. But you can change it for a specific week — or permanently from a certain week onwards — using Schedule Overrides.

To manage overrides: On any appointment type card, click Schedule.

Two override types:

1. Just this week (one-off): Changes availability for that single week only. The following Monday, the normal schedule resumes automatically. Example: "Next week I'm at a conference — available only 6–8 PM."

2. From this week onwards (recurring): Permanently changes the schedule starting from that week. This becomes the new baseline. Example: "From March 16 onwards, my new hours are 9–10 AM and 1–4 PM."

Override resolution order (highest priority first):

1. Week-specific override for this appointment type

2. Recurring override for this appointment type (most recent)

3. Week-specific global override (applies to all types)

4. Recurring global override

5. Appointment type's default schedule

Override fields:

  • Week starting — pick any date; it auto-rounds to that week's Monday
  • Applies to — "Just this week" or "From this week onwards"
  • Available days — optional; if set, overrides which days are bookable that week
  • Available hours — time blocks for that week (can be completely different from the default)
  • Note — internal note explaining why (e.g. "Alex at conference", "Q2 schedule change")

---

Availability example walkthrough

Say your normal hours are Mon–Fri 9 AM–5 PM. Here is how you handle the user's scenario:

"Next week 2–8 PM, the week after and thereafter 1–4 PM and 9–10 AM in the morning":

1. Add a one-off override for next week's Monday. Set time blocks: [2:00 PM – 8:00 PM]. Done — that week only 2–8 PM slots appear.

2. Add a recurring override for the following Monday. Set time blocks: [9:00 AM – 10:00 AM] and [1:00 PM – 4:00 PM]. Done — from that week onwards, visitors see 9–10 AM and 1–4 PM. The override from step 1 still applies for just its one week.

Outlook's real calendar is still checked — if the organizer has a meeting at 9:30 AM that week, that slot will not appear even though it's in the allowed window.

---

Random slots — creating scarcity

When Random slots is set to a number (e.g. 2), the bot shows only that many randomly-chosen available slots instead of every open slot.

Why use this: For smaller teams or high-demand meeting types, showing only 2 or 3 slots creates a premium, exclusive feel. Visitors feel they are getting a rare opportunity rather than seeing a mostly-empty calendar.

How it works: The server finds all free slots that match the availability rules, shuffles them, and returns only N. The visitor sees those N options and picks one.

Set to 0 (default) to show all available slots.

---

Company mode vs. per-agent mode

Company mode (recommended for most teams):

  • Leave the organizer email blank in the appointment type
  • All bookings land on the shared company calendar (set in the global config)
  • A Rule in the Rules Engine assigns the conversation to an agent and notifies them by email
  • The assigned agent gets an alert; if they have SMS configured as an agent, they can be notified there too
  • Best for: sales teams routing leads, support teams sharing a queue

Per-agent mode:

  • Set a specific organizer email in the appointment type (e.g. sarah@company.com)
  • Bookings go directly to that person's Outlook calendar
  • The organizer receives an email notification from Velaro with the visitor's name, time, and a direct calendar link
  • Best for: individual reps with their own named calendars, executive assistants booking for a specific person

---

Notification emails

Each appointment type has a Notifications section with two independent toggles:

Notify organizer on booking (default: on)

When enabled, Velaro emails the organizer immediately after a booking is made. The email contains:

  • Meeting title and time (UTC)
  • Visitor name and email address
  • A direct link to the calendar event in Outlook
  • Reply-To set to the visitor's email so the organizer can reply directly

Send visitor confirmation email (default: on)

When enabled, Velaro emails the visitor immediately after booking. The email contains:

  • Meeting title, date, and time
  • Duration
  • A link to view the event in Outlook (if available)

Both emails are sent via Mandrill and require a MandrillApiKey App Setting. They fire as non-blocking background tasks — the booking response returns instantly. If the visitor has no email address, the visitor email is skipped automatically.

---

How the bot uses appointment types

In a workflow, the bot calls the AvailableSlots endpoint to get open times, presents them to the visitor, then books the selected slot.

Getting available slots:

GET /api/admin/OutlookCalendar/AvailableSlots
  ?date=2026-03-20
  &appointmentTypeId=3

Pass the appointment type's ID (shown on each type card in the admin). The API applies that type's working days, time blocks, lead time, horizon, overrides, and Graph free/busy — and returns only genuinely bookable slots.

Booking a slot:

POST /api/admin/OutlookCalendar/Book
{
  "visitorName": "<<visitorName>>",
  "visitorEmail": "<<visitorEmail>>",
  "visitorPhone": "<<visitorPhone>>",
  "startTimeUtc": "<<selectedSlot>>",
  "appointmentTypeId": 3,
  "conversationId": "<<conversationId>>"
}

Response includes confirmationMessage — send it directly to the visitor in the chat. Notification emails (organizer and visitor) fire automatically based on the appointment type's notification settings. visitorPhone is stored for future SMS reminders — collect it in the bot before calling Book.

The type ID is shown on each appointment type card in the UI. Use it consistently in both the AvailableSlots and Book calls.

---

Calendly integration

Calendly is the best option for Google Workspace teams, individual reps who manage their own scheduling, or when you want the visitor to freely pick any open slot.

Setup:

1. Go to Integrations > Calendly.

2. Generate a Personal Access Token from: Calendly → My Account → Integrations → API & Webhooks → Personal Access Tokens.

3. Paste the token and click Save. Velaro fetches your event types automatically.

4. Select a default event type.

5. Enable Single-use links (recommended) so each link only works for one booking.

In a workflow: Use the Send Calendly Link node. The bot generates a unique scheduling link for the visitor and optionally sends it in the chat automatically.

---

Booking tracking and history

Every booking made through Velaro (Outlook or Calendly) is recorded in the BookedAppointments table. You can:

  • View recent bookings in the Booking history accordion on the Outlook Calendar page
  • Cancel a booking from the UI — Velaro calls the Outlook API to delete the event and notifies all attendees
  • Reference the booking in workflows using <<bookingEventId>> and <<bookingConfirmation>> variables

---

Automation flows for appointments

Once a booking is made, you can automate follow-ups using Rules:

Confirmation email: Built-in. Enable Send visitor confirmation email on the appointment type — Velaro sends it automatically via Mandrill the moment the booking is created. No rule or workflow needed.

24-hour reminder: Create a scheduled workflow that queries upcoming bookings and sends a reminder email or SMS to the visitor.

Cancel via reply: If a visitor replies "cancel", a Rule matches the keyword + the appointment-booked tag → calls DELETE /api/admin/OutlookCalendar/CancelEvent with the stored event ID → sends confirmation.

Reschedule offer: After a cancellation, immediately send a Calendly link so the visitor can pick a new time.

No-show follow-up: A scheduled workflow checks bookings past their start time with "active" status → sends a "Sorry we missed you" message with a reschedule link.

Post-meeting satisfaction survey: 2 hours after the meeting end time, send a 1–5 rating survey. Rules capture the reply and store it as a contact attribute.

---

Common questions

Q: Do I need to connect Microsoft 365 separately?

A: Yes — Outlook Calendar booking reuses the M365 connection. Go to Integrations > Microsoft 365 first, then return to Outlook Calendar to configure booking.

Q: What if the visitor is on Google Calendar?

A: No problem. When Velaro books an event on the organizer's Outlook and the visitor's email is a Gmail address, Microsoft automatically sends a standard .ics invite that appears in Google Calendar. No extra setup needed.

Q: Can each sales rep have their own availability?

A: Yes — create one appointment type per rep, each with that rep's organizer email and their own working hours, lead time, and time blocks.

Q: What if I want visitors to book with "the company" and we assign internally?

A: Leave the organizer email blank on the appointment type. All bookings go to the shared company calendar. Use a Rule to assign the conversation to an available agent and notify them.

Q: How does timezone work?

A: All times returned by the API are UTC. In the workflow, display slots in the visitor's local timezone. You can ask the visitor their timezone early in the conversation and store it as a variable, then format the confirmation message using that timezone.

Q: What is "min. notice" and when should I use it?

A: Min. notice is how far in advance a visitor must book. Setting 72 hours means visitors cannot book a slot that starts less than 3 days from now. Use it for meetings that require preparation (demos, QBRs) or to avoid last-minute surprises.

Q: What does "buffer" do?

A: Buffer adds a gap after each appointment. If buffer is 15 minutes and an appointment ends at 3:00 PM, the next available slot is 3:15 PM, not 3:00 PM. Use it to give the organizer time to wrap up and prepare.

Q: Can I show fewer slots to make it look busier?

A: Yes — set Random slots to 2 or 3 on the appointment type. The bot will show only that many randomly selected available slots, creating a premium feel.

Was this article helpful?