一个为服务行业提供的完整预约预订和管理系统。处理预约接收、确认电子邮件、自动提醒、无预约检测和日程报告。
问题
服务行业(沙龙、诊所、顾问、工作室)因错过预约、无预约和排程混乱而损失收入。预约平台每月收费30美元-100美元以上,且往往缺乏自定义。手动提醒不可靠。该系统提供自托管的预约管理,零月费。
做什么
- 预约接收 — Webhook API接收预约,验证字段,生成预约ID,存储在Sheets
- 确认 — 立即发送确认电子邮件到客户和通知员工
- 智能提醒 — 自动发送24小时和2小时提醒
- 无预约跟进 — 检测错过的预约并发送重新安排电子邮件
- 日程 — 早晨电子邮件包含今天和明天的预约以及周统计
包含工作流
| # | 文件 | 目的 |
|---|
| 01 | 01-booking-intake.json | Webhook → 验证 → 存储 → 确认客户 → 告知员工 |
| 02 | 02-booking-confirmation.json | 通过Webhook更新预约状态(确认/取消) |
| 03 | 03-reminder-engine.json | 每小时检查 → 发送24小时和2小时提醒 |
| 04 | 04-noshow-followup.json | 检查过去的预约 → 检测无预约 → 跟进电子邮件 |
| 05 | 05-daily-schedule.json | 晨间报告包含今天的日程和周统计 |
架构
...
(由于字符限制,架构图和部分内容未全翻译,但保留了关键结构)
快速开始
...
(同上,部分内容未全翻译)
A complete appointment booking and management system for service businesses. Handles booking intake, confirmation emails, automated reminders, no-show detection, and daily schedule reports.
Problem
Service businesses (salons, clinics, consultants, studios) lose revenue from missed appointments, no-shows, and scheduling chaos. Booking platforms charge $30-100+/month and often lack customization. Manual reminders are unreliable.
This system provides self-hosted booking management with zero monthly fees.
What It Does
- Booking Intake — Webhook API receives bookings, validates fields, generates booking ID, stores in Sheets
- Confirmation — Sends confirmation email to client and notification to staff immediately
- Smart Reminders — Sends 24-hour and 2-hour reminders automatically
- No-Show Followup — Detects missed appointments and sends rescheduling email
- Daily Schedule — Morning email with today's and tomorrow's appointments plus weekly stats
Included Workflows
| # | File | Purpose |
|---|
| 01 | 01-booking-intake.json | Webhook → validate → store → confirm client → notify staff |
| 02 | 02-booking-confirmation.json | Update booking status (confirm/cancel) via webhook |
| 03 | 03-reminder-engine.json | Hourly check → send 24h and 2h reminders |
| 04 | 04-noshow-followup.json | Check past appointments → detect no-shows → followup email |
| 05 | 05-daily-schedule.json | Morning report with today's schedule and weekly stats |
Architecture
Client books online (form/API)
|
v
Workflow 01: Booking Intake
+-> Validate required fields
+-> Generate booking ID
+-> Save to Google Sheets
+-> Email confirmation to client
+-> Email notification to staff
+-> Return booking IDStatus update (confirm/cancel):
|
v
Workflow 02: Booking Confirmation
+-> Update status in Sheets
Hourly:
|
v
Workflow 03: Reminder Engine
+-> Read confirmed appointments
+-> Check: is appointment in 24h? -> send reminder
+-> Check: is appointment in 2h? -> send reminder
+-> Mark reminders as sent in Sheets
Every 2 hours:
|
v
Workflow 04: No-Show Followup
+-> Check past appointments (1-48h ago)
+-> IF no showed_up status -> mark as no-show
+-> Send rescheduling email
Daily at 7 AM:
|
v
Workflow 05: Daily Schedule
+-> Build today's and tomorrow's schedule tables
+-> Calculate weekly stats (completed, no-shows, cancelled)
+-> Email to staff
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|
| Google Sheets OAuth2 | Appointment storage | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP | Confirmations, reminders, reports | YOUR_SMTP_CREDENTIAL_ID |
Environment Variables
# Business Details (used in client-facing emails)
BUSINESS_NAME=Your Business Name
BUSINESS_PHONE=+1234567890
STAFF_EMAIL=staff@yourbusiness.com
Note: The Google Sheet ID is configured as a YOUR_BOOKING_SHEET_ID placeholder in the workflow JSON files (not an environment variable). Replace it directly in n8n after import.
Configuration Placeholders
| Placeholder | Description |
|---|
YOUR_BOOKING_SHEET_ID | Google Sheet ID for appointments |
YOUR_GOOGLE_SHEETS_CREDENTIAL_ID | n8n Google Sheets credential ID |
YOUR_SMTP_CREDENTIAL_ID | n8n SMTP credential ID |
YOUR_NOTIFICATION_EMAIL | Staff email for schedule reports |
Google Sheets Schema (Appointments)
| Column | Type | Description |
|---|
| booking_id | text | Unique booking ID (auto-generated) |
| name | text | Client full name |
| email | text | Client email |
| phone | text | Client phone |
| service | text | Service type (e.g., haircut, consultation) |
| date | date | Appointment date (YYYY-MM-DD) |
| time | text | Appointment time (HH:MM) |
| notes | text | Client notes |
| status | text | confirmed / cancelled / no-show / completed |
| showed_up | boolean | Whether client attended |
| reminder_24h | boolean | 24h reminder sent |
| reminder_2h | boolean | 2h reminder sent |
| created_at | datetime | Booking creation timestamp |
Quick Start
1. Prerequisites
- n8n v2.4+ (self-hosted)
- Google Sheets OAuth2 credentials
- SMTP email credentials
2. Create Appointments Sheet
Create a Google Sheet with the columns above. Name the tab "Appointments".
3. Import & Configure
Import all 5 JSON files into n8n. Replace all
YOUR_* placeholders and set environment variables.
4. Test Booking
curl -X POST https://your-n8n.com/webhook/booking/new \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"email": "jane@example.com",
"phone": "+1234567890",
"service": "Consultation",
"date": "2026-03-10",
"time": "14:00",
"notes": "First visit"
}'
Use Cases
- Hair salons — Booking, reminders, and no-show tracking for stylists
- Medical/dental clinics — Patient appointment management
- Consultants — Strategy call scheduling with automated reminders
- Fitness studios — Class and personal training bookings
- Auto repair shops — Service appointment scheduling
Requirements
- n8n v2.4+ (self-hosted or cloud)
- Google Sheets OAuth2 credentials
- SMTP email credentials