Smart Booking & Appointments

Complete appointment scheduling system for WordPress — no monthly fees, own it forever.

Version 2.0.0 WordPress 6.0+ PHP 8.0+ License: GPL-2.0+

Thank you for purchasing Smart Booking & Appointments! If you have any questions not covered in this documentation, please use the support tab on the CodeCanyon item page.

Requirements

RequirementMinimumRecommended
WordPress6.06.5+
PHP8.08.2+
MySQL5.78.0+
HTTPSRequiredRequired
WooCommerceOptional7.0+ for WC payments

HTTPS is required for Stripe payments, Google OAuth, reCAPTCHA, and Zoom integration. All of these APIs block plain HTTP connections.

Installation

1

Upload the plugin

In your WordPress admin go to Plugins → Add New → Upload Plugin. Choose the smart-booking.zip file you downloaded and click Install Now.

2

Activate

Click Activate Plugin. The plugin will create 11 database tables automatically during activation.

3

Run the repair tool (first time)

Go to Smart Booking → Dashboard and click Repair Data. This seeds default working hours and links for any existing staff and services.

4

Set your timezone

Go to WordPress Settings → General → Timezone and choose your city/region (e.g. Asia/Kolkata). Do not use the manual UTC offset — use the named timezone. This is critical for Google Calendar sync and slot availability.

5

Add the booking form to a page

Create or edit any page and add the shortcode [smartbook]. Publish the page and you're ready to take bookings.

Quick start (5 minutes)

  1. Go to Smart Booking → Services → add your first service (e.g. "30-minute consultation", price $50, duration 30 min)
  2. Go to Smart Booking → Staff → add a staff member with their name and email
  3. Create a page, add [smartbook], publish it
  4. Visit the page — you should see the full booking form
  5. Go to Smart Booking → Settings → Notifications → set your from-email so customers receive confirmations

The first booking you receive will appear in Smart Booking → Appointments.

General settings

SettingDescription
Currency / SymbolControls price display in the booking form and admin. Use ISO code (USD, EUR, INR) and matching symbol ($, €, ₹).
Slot intervalMinutes between available time slots (e.g. 15 = slots at 9:00, 9:15, 9:30…). Default: 15.
Min advance hoursHow many hours in advance a customer must book. E.g. 2 = cannot book slots within 2 hours of now. Default: 2.
Allow any staffShows an "Any available" staff option in the booking form. The system auto-assigns the staff member with the fewest bookings that day.
Date format / Time formatPHP date format strings for display. E.g. Y-m-d or d/m/Y. Time: H:i (24h) or g:i A (12h).
First day of week0 = Sunday, 1 = Monday. Affects the calendar display.
Success redirect URLIf set, customers are redirected here after a successful booking. Leave blank to show the built-in confirmation screen.
Custom CSSInject CSS to override booking form styles without editing files.

Notifications

All notification settings are under Smart Booking → Settings → Notifications.

SettingDescription
From nameThe sender name in all outgoing emails. Defaults to your WordPress site name.
From emailThe sender address. Defaults to WordPress admin email. Use a transactional email address (e.g. noreply@yoursite.com) for better deliverability.
Confirmation emailSend booking confirmation to customer when auto-confirmed.
Reminder emailSend a reminder N hours before the appointment.
Reminder hours beforeHow many hours before the appointment to send the reminder. Default: 24.
SMS confirmationSend SMS via Twilio on booking. Requires Twilio credentials in Integrations tab.
SMS reminderSend SMS reminder. Same timing as email reminder.

Email templates

Emails use these variables which are replaced automatically:

VariableReplaced with
{{customer_name}}Customer's full name
{{service_name}}Name of the booked service
{{staff_name}}Assigned staff member name
{{date}}Appointment date (formatted)
{{time}}Appointment time (formatted)
{{duration}}Service duration in minutes
{{price}}Appointment price
{{site_name}}WordPress site name
{{cancel_url}}One-click cancellation link
{{zoom_link}}Zoom join URL (if Zoom is enabled)

To customise email templates, create a file in your active theme at smart-booking/email-confirmation.php (or email-confirmed.php, email-cancelled.php, email-reminder.php). The plugin checks the theme folder first.

Payments

Stripe

  1. Create a Stripe account at stripe.com
  2. Go to Developers → API Keys and copy your Publishable key and Secret key
  3. Paste both into Smart Booking → Settings → Payments
  4. Set payment mode to Full price or Deposit only
  5. For webhook events (cancellations, refunds), copy the webhook URL shown in settings and paste it into your Stripe Dashboard → Webhooks

WooCommerce

Set payment mode to WooCommerce. A WooCommerce product is created automatically for each booking and the customer is redirected to the WooCommerce checkout. Requires WooCommerce 7.0+ to be installed and active.

Payment modes

ModeBehaviour
NoneNo payment collected. Booking is confirmed immediately (if auto-confirm is on).
DepositCustomer pays the deposit amount via Stripe. Remaining balance due on arrival.
Full priceCustomer pays the full service price via Stripe before confirmation.
WooCommerceBooking creates a WooCommerce order. Supports all WC payment gateways.

Integrations

Google Calendar

  1. Go to Google Cloud Console → New project
  2. Enable the Google Calendar API
  3. Go to Credentials → Create Credentials → OAuth 2.0 Client ID
  4. Application type: Web application
  5. Authorised redirect URI — add this exact URL:
    https://YOURSITE.com/wp-admin/admin.php?page=wpba-settings
  6. Copy the Client ID and Client Secret into Smart Booking → Settings → Integrations
  7. Go to Smart Booking → Staff, edit each staff member, and click Connect Google Calendar

Timezone note — Set your WordPress timezone to a named city (e.g. Asia/Kolkata) not a manual offset. Go to WordPress Settings → General → Timezone. Using a bare offset like UTC+5:30 causes Google Calendar events to appear at the wrong time.

Zoom

  1. Go to marketplace.zoom.us → Build App → Server-to-Server OAuth
  2. Copy the Account ID, Client ID, and Client Secret
  3. Paste into Smart Booking → Settings → Integrations → Zoom
  4. Zoom meeting links are automatically created for every confirmed appointment and included in the confirmation email

Twilio (SMS)

  1. Create a Twilio account and get a phone number
  2. Copy your Account SID, Auth Token, and From number
  3. Paste into Smart Booking → Settings → Integrations → Twilio
  4. Enable SMS notifications in the Notifications tab

reCAPTCHA v3

  1. Go to google.com/recaptcha → Create site (v3)
  2. Copy Site Key and Secret Key
  3. Paste into Smart Booking → Settings → Features → reCAPTCHA v3
  4. Set minimum score (0.5 recommended — higher is stricter for bots)

Calendly

  1. Go to calendly.com/integrations/api_webhooks and generate a Personal Access Token
  2. Paste into Smart Booking → Settings → Calendly
  3. Click Test connection — your Calendly event types appear for mapping
  4. Map each Calendly event type to a Smart Booking service
  5. Click Register webhook with Calendly to sync automatically

Once connected, every new Calendly booking creates a Smart Booking appointment, and Calendly cancellations automatically cancel the linked appointment.

Feature modules

Go to Smart Booking → Settings → Features to enable optional modules. Disabled modules have zero performance impact.

ModuleWhat it adds
Auto-confirm bookingsWhen enabled (default), bookings are confirmed immediately. When disabled, each booking requires manual admin approval.
Admin notification emailAdmin receives an email on every new booking. When approval mode is on, the email contains one-click Confirm/Reject buttons.
Multi-locationAdd multiple branches. Customers see a location picker in the booking form. Each location has its own timezone, phone, and email.
Recurring appointmentsCustomers can choose a weekly/biweekly/monthly schedule at booking time. All sessions are booked at once.
Session packagesCreate bundles of N sessions at a discounted total price. Customers choose a package in the booking form and session balances are tracked automatically.

Services

Go to Smart Booking → Services to manage your services.

FieldDescription
NameDisplayed in the booking form service selection
DescriptionOptional description shown under the service name
Duration (min)Length of the appointment. Controls the slot engine — a 60-minute service blocks 60 minutes of staff time.
PriceFull price of the service. Used for Stripe payments and displayed to customers.
Deposit amountAmount charged upfront when payment mode is "Deposit".
CapacityMaximum concurrent bookings for this service at the same time slot (for group classes).
Buffer before / afterMinutes of blocked time before/after each appointment (e.g. 10 min prep time, 15 min cleanup). Not visible to customers.
ColourColour-codes the service in the admin calendar view and on the booking form cards.

Staff

Go to Smart Booking → Staff to manage staff members.

Working hours

Click Edit on any staff member to set their working hours per day of week. Check Day off for days they don't work. If no working hours are configured, the system defaults to Monday–Friday 9:00–17:00.

Service assignments

When you add a service, it is automatically linked to all active staff. When you add a staff member, they are automatically linked to all active services. To customise individual assignments, use the Repair Data tool to reset defaults, or manage links directly in the database.

Google Calendar connection

Each staff member can connect their own Google Calendar. Click Edit → Connect Google Calendar. A popup opens for Google OAuth. After authorising, the popup closes and the button turns red ("Disconnect"). All future confirmed appointments create events in their calendar, and cancellations delete the events.

Booking form fields

Go to Smart Booking → Form Fields to customise what information you collect from customers.

Four core fields always exist: Name, Email, Phone, Notes. These cannot be deleted but can be made optional or hidden. Add unlimited custom fields of these types:

T

Text

Single-line free text input

@

Email

Email address with format validation

#

Number

Numeric input with min/max support

Phone

Telephone number input

Textarea

Multi-line text area

Dropdown

Select from predefined options

Radio buttons

Choose one from a list

Checkbox

Yes/no toggle

📅

Date

Date picker

Drag rows by the :: handle to reorder fields. The order is saved automatically.

Multi-location

Enable first: Go to Settings → Features → enable Multi-location support.

Go to Smart Booking → Locations to add branches.

FieldDescription
NameBranch name shown in the booking form dropdown
Address / City / CountryDisplayed in confirmation emails and admin view
TimezoneEach location can operate in its own timezone. Use IANA names (e.g. America/New_York).
Phone / EmailLocation-specific contact details

When more than one active location exists, the booking form shows a location dropdown above the service grid. The selected location is tagged to each appointment.

Packages & bundles

Enable first: Go to Settings → Features → enable Session packages & bundles.

Go to Smart Booking → Packages to create bundles.

FieldDescription
Package namee.g. "10-class yoga pack"
ServiceWhich service this package applies to
Number of sessionsHow many bookings are included
Package priceTotal bundle price (usually discounted vs. per-session price)
Validity (days)How many days from purchase the bundle remains valid. Set to 0 for no expiry.
DescriptionOptional description shown in the booking form

When a customer selects a service that has packages, a Choose a package step appears between Date/Time and Your Details. The booking form automatically shows the per-session saving percentage. The Customer package balances table at the bottom of the Packages page shows every customer's used vs remaining sessions.

Recurring appointments

Enable first: Go to Settings → Features → enable Recurring appointments.

Once enabled, a Recurring booking section appears at the bottom of the booking form's details step. The customer can choose:

On submission, all sessions are booked at once starting from the customer's chosen date. Future occurrences are pre-booked even if the slot isn't listed as available (to avoid blocking recurring customers from booking their regular slot).

All appointments in a series share a recurring_group_id. To cancel an entire series from the admin, you can use the REST API endpoint POST /wp-json/wpba/v1/cancel-series/{group_id}.

Google Calendar sync

Events are created and managed automatically:

EventGoogle Calendar action
Booking confirmedCreates calendar event on staff member's primary calendar
Booking cancelledDeletes the calendar event

Events include the customer name, service name, email, phone, notes, and Zoom link (if applicable). The staff member and customer are added as attendees so both receive Google Calendar invitations.

Zoom integration

When Zoom credentials are configured, a unique Zoom meeting is created for every confirmed appointment. The join URL is:

Booking approval workflow

Go to Settings → Features and uncheck Auto-confirm bookings to enable manual approval.

When a new booking arrives:

  1. Appointment is created with status pending
  2. Customer receives a "Booking request received" email
  3. Admin receives an email with Confirm and Reject buttons
  4. Clicking Confirm sends the customer a confirmation email; clicking Reject sends a rejection email
  5. Approval can also be done from the Appointments page in the admin

Exporting data

Each data page has an ↓ Export button in the top-right of the table heading:

PageExport includes
AppointmentsID, Service, Staff, Customer, Email, Phone, Date, Time, Status, Price, Payment status, Notes
StaffID, Name, Email, Phone, Bio, Active status, Created date
ServicesID, Name, Description, Duration, Price, Deposit, Capacity, Buffers, Active, Created
CustomersID, Name, Email, Phone, Total bookings, Total spent, Last booking, Created

Files download as UTF-8 CSV with BOM (Excel-compatible). All exports are limited to 10,000 rows for performance.

Shortcode reference

The booking form is inserted with the [smartbook] shortcode. Optional attributes:

AttributeValuesDescription
serviceService ID (integer)Pre-select a service and skip the service step
staffStaff ID (integer)Pre-select a staff member
hide_staffyes / noHide the staff selection step entirely (auto-assigns best available)

Examples

[smartbook]

Full booking form — customer picks service, staff, date, and time.

[smartbook service="3"]

Pre-selects service ID 3. Customer goes straight to staff selection.

[smartbook service="3" hide_staff="yes"]

Minimal form — customer only picks date and time. Staff is auto-assigned.

[smartbook service="3" staff="2"]

Pre-selects both service and staff. Customer only picks date and time.

Gutenberg block

Search for Smart Booking Form in the block inserter. The block supports the same attributes as the shortcode via the block sidebar.

Frequently asked questions

Why is the booking form showing "No services available"?

Go to Smart Booking → Services and make sure at least one service is set to Active. Also visit Smart Booking → Dashboard → Repair Data which ensures services and staff are properly linked.

Why are no time slots available?

Check: (1) Staff member has working hours set for that day. (2) The date is not in the past. (3) The date is not in a blackout period. (4) The minimum advance hours setting isn't blocking near-future slots. Click Repair Data on the Dashboard if working hours are missing.

Google Calendar events appear at the wrong time

Go to WordPress Settings → General → Timezone and select your city from the dropdown (e.g. Asia/Kolkata). Do NOT use the manual offset options like UTC+5:30 — use the named city/timezone.

Customers aren't receiving confirmation emails

WordPress uses PHP's mail() function by default which many hosts block. Install an SMTP plugin (e.g. WP Mail SMTP) and configure it with your email provider (Gmail, SendGrid, Mailgun, etc.). Also check your spam folder and verify the From email in Smart Booking Settings → Notifications is a real address on your domain.

How do I cancel a recurring series?

From the admin Appointments page, cancel individual appointments by viewing them and clicking Cancel. To cancel an entire series at once, use the REST API: POST /wp-json/wpba/v1/cancel-series/{group_id} (requires admin authentication).

Can I use multiple booking forms on the same page?

Yes — each [smartbook] shortcode instance is fully isolated. You can have multiple forms for different services on the same page.

How do I change the booking form colours?

The form uses CSS custom properties. Add CSS overrides in Settings → Advanced → Custom CSS:

:root {
  --wpba-primary: #e63946;   /* main accent colour */
  --wpba-radius:  12px;       /* border radius */
}

Is the plugin GDPR/DPDP compliant?

The plugin stores customer data (name, email, phone) to process bookings. You should add a privacy notice to your booking page and configure data retention in line with your local regulations. The plugin does not share data with third parties except the explicitly configured integrations (Stripe, Zoom, Google Calendar, Twilio, Calendly).

Changelog

v2.0.0

v1.2.0

v1.1.0

v1.0.0

Getting support

Before submitting a support request, please:

  1. Check this documentation thoroughly
  2. Try the Repair Data tool on the Dashboard
  3. Check your browser's developer console (F12 → Console) for JavaScript errors
  4. Enable WordPress debug logging: add define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); to wp-config.php and check /wp-content/debug.log

To submit a support ticket, use the Support tab on the CodeCanyon item page. Please include:

For any technical support kindly email to us on pragoinfotech@gmail.com

Support hours: Monday–Friday, 9:00–18:00 IST. Responses within 24 hours on business days.



Smart Booking & Appointments v2.0.0  ·  Documentation  ·  © 2026