Smart Booking & Appointments
Complete appointment scheduling system for WordPress — no monthly fees, own it forever.
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
| Requirement | Minimum | Recommended |
|---|---|---|
| WordPress | 6.0 | 6.5+ |
| PHP | 8.0 | 8.2+ |
| MySQL | 5.7 | 8.0+ |
| HTTPS | Required | Required |
| WooCommerce | Optional | 7.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
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.
Activate
Click Activate Plugin. The plugin will create 11 database tables automatically during activation.
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.
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.
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)
- Go to Smart Booking → Services → add your first service (e.g. "30-minute consultation", price $50, duration 30 min)
- Go to Smart Booking → Staff → add a staff member with their name and email
- Create a page, add
[smartbook], publish it - Visit the page — you should see the full booking form
- 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
| Setting | Description |
|---|---|
| Currency / Symbol | Controls price display in the booking form and admin. Use ISO code (USD, EUR, INR) and matching symbol ($, €, ₹). |
| Slot interval | Minutes between available time slots (e.g. 15 = slots at 9:00, 9:15, 9:30…). Default: 15. |
| Min advance hours | How many hours in advance a customer must book. E.g. 2 = cannot book slots within 2 hours of now. Default: 2. |
| Allow any staff | Shows 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 format | PHP 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 week | 0 = Sunday, 1 = Monday. Affects the calendar display. |
| Success redirect URL | If set, customers are redirected here after a successful booking. Leave blank to show the built-in confirmation screen. |
| Custom CSS | Inject CSS to override booking form styles without editing files. |
Notifications
All notification settings are under Smart Booking → Settings → Notifications.
| Setting | Description |
|---|---|
| From name | The sender name in all outgoing emails. Defaults to your WordPress site name. |
| From email | The sender address. Defaults to WordPress admin email. Use a transactional email address (e.g. noreply@yoursite.com) for better deliverability. |
| Confirmation email | Send booking confirmation to customer when auto-confirmed. |
| Reminder email | Send a reminder N hours before the appointment. |
| Reminder hours before | How many hours before the appointment to send the reminder. Default: 24. |
| SMS confirmation | Send SMS via Twilio on booking. Requires Twilio credentials in Integrations tab. |
| SMS reminder | Send SMS reminder. Same timing as email reminder. |
Email templates
Emails use these variables which are replaced automatically:
| Variable | Replaced 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
- Create a Stripe account at stripe.com
- Go to Developers → API Keys and copy your Publishable key and Secret key
- Paste both into Smart Booking → Settings → Payments
- Set payment mode to Full price or Deposit only
- 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
| Mode | Behaviour |
|---|---|
| None | No payment collected. Booking is confirmed immediately (if auto-confirm is on). |
| Deposit | Customer pays the deposit amount via Stripe. Remaining balance due on arrival. |
| Full price | Customer pays the full service price via Stripe before confirmation. |
| WooCommerce | Booking creates a WooCommerce order. Supports all WC payment gateways. |
Integrations
Google Calendar
- Go to Google Cloud Console → New project
- Enable the Google Calendar API
- Go to Credentials → Create Credentials → OAuth 2.0 Client ID
- Application type: Web application
- Authorised redirect URI — add this exact URL:
https://YOURSITE.com/wp-admin/admin.php?page=wpba-settings - Copy the Client ID and Client Secret into Smart Booking → Settings → Integrations
- 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
- Go to marketplace.zoom.us → Build App → Server-to-Server OAuth
- Copy the Account ID, Client ID, and Client Secret
- Paste into Smart Booking → Settings → Integrations → Zoom
- Zoom meeting links are automatically created for every confirmed appointment and included in the confirmation email
Twilio (SMS)
- Create a Twilio account and get a phone number
- Copy your Account SID, Auth Token, and From number
- Paste into Smart Booking → Settings → Integrations → Twilio
- Enable SMS notifications in the Notifications tab
reCAPTCHA v3
- Go to google.com/recaptcha → Create site (v3)
- Copy Site Key and Secret Key
- Paste into Smart Booking → Settings → Features → reCAPTCHA v3
- Set minimum score (0.5 recommended — higher is stricter for bots)
Calendly
- Go to calendly.com/integrations/api_webhooks and generate a Personal Access Token
- Paste into Smart Booking → Settings → Calendly
- Click Test connection — your Calendly event types appear for mapping
- Map each Calendly event type to a Smart Booking service
- 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.
| Module | What it adds |
|---|---|
| Auto-confirm bookings | When enabled (default), bookings are confirmed immediately. When disabled, each booking requires manual admin approval. |
| Admin notification email | Admin receives an email on every new booking. When approval mode is on, the email contains one-click Confirm/Reject buttons. |
| Multi-location | Add multiple branches. Customers see a location picker in the booking form. Each location has its own timezone, phone, and email. |
| Recurring appointments | Customers can choose a weekly/biweekly/monthly schedule at booking time. All sessions are booked at once. |
| Session packages | Create 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.
| Field | Description |
|---|---|
| Name | Displayed in the booking form service selection |
| Description | Optional 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. |
| Price | Full price of the service. Used for Stripe payments and displayed to customers. |
| Deposit amount | Amount charged upfront when payment mode is "Deposit". |
| Capacity | Maximum concurrent bookings for this service at the same time slot (for group classes). |
| Buffer before / after | Minutes of blocked time before/after each appointment (e.g. 10 min prep time, 15 min cleanup). Not visible to customers. |
| Colour | Colour-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:
Text
Single-line free text input
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.
| Field | Description |
|---|---|
| Name | Branch name shown in the booking form dropdown |
| Address / City / Country | Displayed in confirmation emails and admin view |
| Timezone | Each location can operate in its own timezone. Use IANA names (e.g. America/New_York). |
| Phone / Email | Location-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.
| Field | Description |
|---|---|
| Package name | e.g. "10-class yoga pack" |
| Service | Which service this package applies to |
| Number of sessions | How many bookings are included |
| Package price | Total 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. |
| Description | Optional 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:
- Frequency: Weekly, every 2 weeks, monthly, or daily
- Number of sessions: 2–52 occurrences
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:
| Event | Google Calendar action |
|---|---|
| Booking confirmed | Creates calendar event on staff member's primary calendar |
| Booking cancelled | Deletes 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:
- Included in the customer confirmation email as a clickable link
- Shown on the booking confirmation screen
- Added to the Google Calendar event location field
- Visible in the appointment detail modal in the admin
Booking approval workflow
Go to Settings → Features and uncheck Auto-confirm bookings to enable manual approval.
When a new booking arrives:
- Appointment is created with status
pending - Customer receives a "Booking request received" email
- Admin receives an email with Confirm and Reject buttons
- Clicking Confirm sends the customer a confirmation email; clicking Reject sends a rejection email
- 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:
| Page | Export includes |
|---|---|
| Appointments | ID, Service, Staff, Customer, Email, Phone, Date, Time, Status, Price, Payment status, Notes |
| Staff | ID, Name, Email, Phone, Bio, Active status, Created date |
| Services | ID, Name, Description, Duration, Price, Deposit, Capacity, Buffers, Active, Created |
| Customers | ID, 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:
| Attribute | Values | Description |
|---|---|---|
service | Service ID (integer) | Pre-select a service and skip the service step |
staff | Staff ID (integer) | Pre-select a staff member |
hide_staff | yes / no | Hide the staff selection step entirely (auto-assigns best available) |
Examples
Full booking form — customer picks service, staff, date, and time.
Pre-selects service ID 3. Customer goes straight to staff selection.
Minimal form — customer only picks date and time. Staff is auto-assigned.
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
- Multi-location support with per-location timezone
- Recurring appointments (weekly, biweekly, monthly, daily)
- Session packages and bundles with customer balance tracking
- Calendly integration — bidirectional event sync via webhooks
- Admin approval workflow with one-click email approve/reject
- Admin notification emails on every new booking
- CSV export for appointments, staff, services, and customers
- Drag-and-drop reordering for booking form fields
- Google Calendar: fixed timezone handling for IST and other offset timezones
- Settings: secret API keys no longer overwritten on save
- Recurring fix: series now starts from customer's chosen date
v1.2.0
- Custom booking form fields (text, email, phone, number, textarea, dropdown, radio, checkbox, date)
- Google reCAPTCHA v3 spam protection
- Per-staff Google Calendar OAuth connection
- Admin approve/reject from Appointments page
- DB migration on plugin update (no need to deactivate/reactivate)
v1.1.0
- Stripe payments — full price and deposit modes
- WooCommerce bridge
- Zoom meeting auto-creation
- Twilio SMS confirmations and reminders
- FullCalendar admin view
- Repair Data tool for missing working hours and service links
v1.0.0
- Initial release — multi-step booking form, services, staff, Google Calendar sync, email notifications
Getting support
Before submitting a support request, please:
- Check this documentation thoroughly
- Try the Repair Data tool on the Dashboard
- Check your browser's developer console (F12 → Console) for JavaScript errors
- Enable WordPress debug logging: add
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);towp-config.phpand check/wp-content/debug.log
To submit a support ticket, use the Support tab on the CodeCanyon item page. Please include:
- WordPress version, PHP version, and plugin version
- A description of the issue and steps to reproduce it
- Any relevant error messages from the console or debug log
- A screenshot if the issue is visual
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