Skip to main content
Docs
Appointment Reminders

Appointment Reminders

Appointment confirmation texts and next-day reminders through Quo, with legacy voice reminders for other configurations.

FrontdeQ can send appointment confirmations and next-day reminders through your configured Quo number. Salons without Quo reminder routing retain the legacy voice-reminder workflow described below.

Quo Confirmation and Reminder Texts

Confirmation texts require the caller's agreement to receive a text at the number saved on the booking's customer record. FrontdeQ retrieves the saved Square booking and renders its date, time, timezone and salon name. Pending appointment requests are described as pending, not confirmed.

Reminders run every 15 minutes during the 5 PM hour in the salon's timezone for tomorrow's appointments. Immediately before sending, FrontdeQ checks the current booking again and skips cancelled appointments, appointments moved to another day, missing numbers and explicit opt-outs. Supported Square note tags include [no-sms], [no-text], [no-reminders] and [do-not-contact]. [do-not-call] also suppresses these reminders conservatively. Quo's own messaging restrictions still apply.

A durable send claim prevents duplicate sends from overlapping requests. If a request times out, FrontdeQ treats its outcome as unknown and does not retry it automatically. Queued means accepted for sending; sent does not prove delivery. FrontdeQ checks Quo delivery status every 15 minutes. Failed or unknown messages are never described as delivered.

Replies arrive in the salon's Quo inbox. Replying does not automatically change or confirm an appointment in Square. Quo-routed salons do not fall back to Retell reminder calls when texting is disabled or fails.

Quo setup and per-salon reminder enablement are currently operator-managed. Confirmation and reminder messages use English date/time text.

Legacy Voice Reminders

Current Behavior

The reminder cron runs every 15 minutes and processes each salon around 5 PM in its configured timezone. For each eligible salon, it:

  1. Finds active Square locations for each salon with an active receptionist.
  2. Queries Square for appointments starting tomorrow in each location's local day.
  3. Looks up the booked customer's phone number.
  4. Skips customers whose Square note contains [no-reminders] or [do-not-call], and bookings without a valid international phone number.
  5. Places one outbound Retell call using a dedicated reminder agent with appointment context. FrontdeQ provisions and updates this agent automatically; if that fails, reminders for the salon are skipped for that run.

Each reminder is claimed in a persistent reminder_sent ledger (unique per salon, booking, and send date) before the call is placed, so retried or overlapping cron runs never call the same customer twice for the same day's reminder.

What the Caller Hears

The dedicated reminder agent uses your salon's configured voice with appointment context attached, such as the customer's first name, appointment time, service, stylist, and Square booking ID.

Example:

Agent:    Hi Maria, this is Luxe Salon calling to confirm your color
          appointment tomorrow at 2 PM with Sofia. Can you still make it?
Caller:   Yes, I'll be there.
Agent:    Great, thank you. We'll see you tomorrow.

Outcomes

Can attend. The agent acknowledges the caller's answer. The booking stays unchanged; the call does not record a confirmation in Square.

Needs a change. If the caller needs to reschedule, cancel, or ask a more complex question, the agent asks them to call the salon back at the number the reminder came from. The appointment stays unchanged until the salon handles the request. Reminder calls cannot change bookings, transfer, take messages, or arrange a callback from staff.

Unanswered. Retell's voicemail handling leaves the configured voicemail message when voicemail is detected. There is no automatic retry later in the day.

Not Yet Self-Service

The following controls are not yet exposed as self-service dashboard settings:

  • A dashboard control for per-client reminder opt-outs. For now, add [no-reminders] or [do-not-call] to the customer's Square note.
  • A salon-level appointment-reminder toggle.
  • Choosing or customizing the dedicated reminder agent from the dashboard (provisioning is automatic).
  • A dedicated outbound/reminder filter in the call log.

If you need reminders disabled or filtered for a salon, contact support or disable the reminder cron while the self-service controls are being built.

Call Volume and Cost

Reminder calls count against your monthly call allowance the same way inbound calls do. A salon with 50 appointments per week can use about 200 reminder calls per month before counting inbound calls.

Troubleshooting

Reminders aren't firing. Check that the salon has an active receptionist, Square is connected, tomorrow's appointments have customer phone numbers without an opt-out tag, and the reminder cron is enabled with the correct CRON_SECRET. Agent provisioning or update failures also prevent dialing for that run.

Reminders are firing at the wrong time. The dialing hour uses the salon's configured timezone; tomorrow's appointment lookup uses each Square location's timezone. Check both settings. Reminders are scheduled for 5 PM local time, without checking business opening hours.

Duplicate reminder calls happened. This should not occur: each reminder is claimed in the persistent reminder_sent ledger (unique per salon, booking, and send date) before dialing, so retried or overlapping cron runs skip already-claimed bookings. If you see a genuine duplicate, check whether the booking was recreated with a new Square booking ID.