Customers & Automation
SMS Reply Actions (Y / C / R)
Last updated 19 May 2026
SMS Reply Actions (Y / C / R)
Customers reply Y, C, or R to a reminder SMS to confirm, cancel, or reschedule their booking. Auto-recognised, instantly acted on, and confirmed with a context-aware reply. Cancellation policy applied automatically. Works on every plan with a dedicated SMS number.
Where to find it — Setting: Settings → Communications → Reminder template → Include reply actions (default on). Customer-facing: appended to the reminder SMS body.
TL;DR
- Y / Yes / Confirm = confirm the booking
- C / Cancel = cancel via your cancellation policy (deposit, fees, refund)
- R / Reschedule = send the customer a magic link to reschedule themselves
- Match is first-word-only, case-insensitive, punctuation-tolerant
- Window is 24 hours after the reminder was sent
How the customer sees it
When the reply-actions feature is on, your reminder SMS appends a footer:
"Hi Sarah, reminder you're booked for Balayage with Marcus tomorrow at 2pm at Salon Smith. Reply Y to confirm, C to cancel, R to reschedule."
The footer is 49 characters. Long reminder templates may push from 1 to 2 SMS segments — the template editor surfaces a segment hint so you know.
How matching works
The webhook checks the first word of any inbound SMS (case-insensitive, punctuation stripped):
| Customer types | Recognised as | Action |
|---|---|---|
Y, YES, CONFIRM (any case, any trailing) |
Confirm | Stamp booking confirmed |
C (any case, any trailing) |
Cancel | Run cancellation policy |
R, RESCHEDULE (any case, any trailing) |
Reschedule | Send magic link |
Examples that all confirm:
YYesYESy!Yes please.YES PLEASE TOMORROW
Trailing text is logged but ignored. The first word is what matters.
Caution
CANCEL (the full word) opts the customer out of SMS — it doesn't cancel the booking. The STOP keyword list runs before the reply-actions handler and includes CANCEL as an opt-out keyword. The booking-cancel action only fires on single-letter C. Reminders explicitly prompt "Reply Y to confirm, C to cancel, R to reschedule" — coach customers to use the single letters, not the full words. See SMS Allocation and Limits → STOP/START compliance for the full opt-out keyword list.
When it's recognised
Reply actions only fire when:
- The customer has a booking with a reminder sent within the last 24 hours to their normalized phone number
- No more recent waitlist gap-offer or reconnect campaign was sent to them (those flows take priority — see priority order below)
Outside the 24-hour reminder window, the same keywords fall through to AI auto-respond or your standard inbox handling.
Priority order
The SMS webhook checks these handlers in order, taking the first match:
- STOP / opt-out (regardless of context) — opts the customer out of all marketing SMS
- Waitlist gap-offer reply — if you sent them a gap offer more recently than the reminder
- Reconnect campaign reply — if you sent them a reconnect SMS more recently
- Active conversation routing — ongoing thread takes precedence
- Reminder reply (Y/C/R) — this handler
- AI auto-respond — for anything else
So if you sent a reminder yesterday and a gap-offer 10 minutes ago, the customer's "Y" routes to the gap-offer (which uses Y for "yes, take the gap"), not to the reminder confirmation.
What each action does
Y — Confirm
- Stamps
booking.reconfirmedAtandreconfirmationSource = "sms" - Reply: "Confirmed — see you {tomorrow at 2pm} with {Marcus}. — {Venue}"
- Day phrase is localised to venue timezone and country
- Staff first name included when available
The booking remains in its current status; reconfirmedAt is a separate field marking the customer's affirmation.
C — Cancel
- Routes through your venue's cancellation policy via
cancelBookingCore - Applies deposit handling: forfeit / full refund / partial refund / credit / none (whichever your rule says)
- Charges cancellation fee if your policy says so
- Writes audit history (system-attributed since the cancel came via SMS)
- Reply: policy-aware — for example:
- "Cancelled. Per our cancellation policy, your $25 deposit cannot be refunded."
- "Cancelled — your $25 deposit will be refunded within 5-10 working days."
- "Cancelled. Hope to see you next time. — {Venue}" (no deposit case)
R — Reschedule
- Generates an HMAC-signed
rescheduleUrlcontaining the booking's manage token - Reply: "To reschedule, tap here: {link} — {Venue}"
- Customer lands on the reschedule flow already authenticated for that booking — no login, no friction
- They pick a new slot and the booking moves; standard rescheduling rules apply
CANCEL and STOP
Important interaction: CANCEL is no longer in the STOP keyword list. Inside the 24-hour reminder window, CANCEL means "cancel this booking", not "opt me out of SMS". Out of window, CANCEL falls through to AI auto-respond.
If the customer wants to opt out of SMS entirely, they need to reply STOP (or STOPALL / UNSUBSCRIBE / CANCEL after the reminder window — context matters).
Auto-reply tone
The auto-replies follow your venue's brand voice persona. They're plain, brief, factual — no AI verbosity, no upsells. Customers expect a confirmation that their action worked; the reply confirms exactly that.
Logging
Every reply-action interaction writes two conversation_log rows:
- The inbound message, classified as Y/C/R
- The outbound auto-reply with
automationKey: "appointment_reminder_reply"
Both rows have handlingMode: "automated" and conversationStatus: "completed". Visible in the inbox conversation thread for full audit.
If the handler fails (rare — usually a database issue), the error is logged and reported but the webhook returns 200 to Twilio anyway, preventing retry-induced double-cancellation.
Configuring
| Setting | Where | Default |
|---|---|---|
| Include reply actions | Settings → Communications → Reminder template editor | On |
Turn off if you don't want the footer in your reminder SMS. The customer can still reply to the reminder; the reply just won't auto-match Y/C/R — it'll fall through to your inbox or AI auto-respond.
Requirements
- A dedicated SMS number provisioned for your venue (AU or GB only; NZ doesn't have SMS)
- The customer must be at the phone number that received the reminder (normalised phone matching)
Tier
All plans. No PRO requirement. Requires a dedicated SMS number — which is also free across plans but requires AU or GB venue.
Common mistakes
| Problem | What to check |
|---|---|
| Customer's "Y" didn't confirm | Check that the reminder went out within the last 24 hours. Outside the window, the reply falls through. |
| Customer cancelled but my cancellation policy didn't apply | Confirm your active deposit rule has the right refundAction and cancellationWindowHours. The auto-cancel uses whatever your rule says. |
| Customer wanted to opt out of SMS, replied CANCEL, got a booking cancellation instead | CANCEL inside the reminder window cancels the booking. Customers wanting to opt out should reply STOP. |
| Reply-actions footer not appearing on reminders | Confirm Settings → Communications → Reminder template → Include reply actions is on. |
| Reminder SMS now 2 segments instead of 1 | The footer adds 49 characters. If your template is close to 160 chars (one segment), the footer pushes it over. Trim the template body to fit. |
| Customer replied "YEs" with weird casing | Matched as Y regardless of casing. Trailing punctuation and case don't matter. |
FAQ
What do Y, C, and R do?
Y confirms the booking (stamps reconfirmed). C cancels it via your cancellation policy (deposit handling and any cancellation fee follow your rules). R sends the customer a magic link to reschedule themselves.
Which SMSes accept these replies?
Standard appointment reminder SMSes. When the 'Include reply actions' setting is on (default), the reminder body appends 'Reply Y to confirm, C to cancel, R to reschedule.' Customers reply with one of those letters to act.
What if a customer replies 'YES PLEASE TOMORROW'?
Just the first word is matched. 'YES please tomorrow' = confirm. The trailing text is logged but ignored. Punctuation and case don't matter — 'y', 'Y.', 'yes', 'Yes,' all confirm.
Can a customer cancel after the reminder window has passed?
If their reminder went out within the last 24 hours, yes. After that, the keyword falls through to AI auto-respond or your normal inbox — they'd need to reply with a clearer message or call you.
Will the reply auto-charge a cancellation fee?
If your active deposit rule says so — for instance, if the rule is "deposit forfeit on late cancellation" and the customer's reply is inside the cancellation window, yes. The auto-cancel honours whatever your policy is configured to do.
Does it work in NZ?
No — NZ doesn't have SMS in OpenChair (email-only there). Reply actions require SMS, so AU and GB only.