Skip to main content

Abandoned Booking Trigger

The Abandoned Booking trigger starts a workflow when an identified customer abandons an unpaid widget checkout

Jerome Bajou avatar
Written by Jerome Bajou
Updated this week

Overview

The Abandoned Booking trigger starts a workflow when an identified customer abandons an unpaid widget checkout (e.g. closed the widget, left the page, or the booking countdown expired).

When It Triggers

  • A customer with at least a valid email or phone abandons an unpaid widget reservation

  • Abandonment is detected from the client (e.g. tab closed, widget closed) or server (e.g. expiry)

  • The trigger fires at most once per booking (idempotent)

Use Cases

  • Send abandoned-cart recovery emails

  • Send SMS reminders with a direct booking link

  • Notify sales to follow up with high-value abandonments

  • Offer a limited-time discount to complete the booking

  • Sync abandoned carts to a CRM or marketing tool

  • A/B test recovery message timing and copy


Configuration

This trigger requires no additional configuration. It automatically triggers when an eligible abandoned booking is recorded.

Optional Filters

You can add filter conditions to only process specific abandonments:

  • Filter by abandon reason (closed, expired, etc.)

  • Filter by source (client vs server)

  • Filter by product or widget

  • Filter by time since abandonment


Available Data

When this trigger fires, it provides an abandoned_booking object with the following fields.

Abandoned Booking Object Structure

Field

Description

booking_id

UUID of the abandoned booking

customer_id

UUID of the customer

availability_id

ID of the main availability slot

quantity

Booking quantity

widget_id

UUID of the widget (embed)

email

Customer email (if identified; may be null)

phone

Customer phone (if identified; may be null)

customer_name

Customer name (if set; may be null)

reason

Abandon reason (e.g. closed, expired)

occurred_at

ISO 8601 timestamp when the abandon was recorded

source

client (e.g. sendBeacon) or server (e.g. expiry)

Accessing Data in Workflows

{abandoned_booking.booking_id} 
{abandoned_booking.customer_id}
{abandoned_booking.email}
{abandoned_booking.phone}
{abandoned_booking.customer_name}
{abandoned_booking.reason}
{abandoned_booking.occurred_at}
{abandoned_booking.source}

Identification

The trigger only runs when the customer is identified (valid email or valid international phone). Placeholder or missing contact details are not emitted, so you can rely on email and/or phone being present for sending messages.


Example Workflows

1. Abandoned Cart Email

Workflow Steps:

  1. Trigger: Abandoned Booking

  2. Action: Send Notification

    • To: {abandoned_booking.email}

    • Subject: "You left something in your cart"

    • Body: Use {abandoned_booking.customer_name} to personalise (e.g. "Hi {abandoned_booking.customer_name}"), include product summary and a direct link back to the widget/checkout

2. Delayed Recovery with Discount

Workflow Steps:

  1. Trigger: Abandoned Booking

  2. Action: Delay (e.g. 1 hour)

  3. Action: Send Notification (recovery email with 10% off or similar)

  4. Optional: Condition on {abandoned_booking.source} or {abandoned_booking.reason}

3. SMS Reminder

Workflow Steps:

  1. Trigger: Abandoned Booking

  2. Condition: If {abandoned_booking.phone} is not empty

  3. Action (True): Send SMS with short link to complete booking

4. High-Value Follow-Up

Workflow Steps:

  1. Trigger: Abandoned Booking

  2. Action: Get Booking (by {abandoned_booking.booking_id})

  3. Condition: If booking value above threshold

  4. Action (True): Notify sales team or create CRM task


Testing

When testing this trigger:

  1. Select an unpaid widget reservation from the booking selector (last 20 shown).

  2. The workflow will run with that booking’s data as a simulated abandoned booking.

  3. Review execution logs to verify context (email, phone, reason, source).

Test Data

The trigger provides a booking selector limited to unpaid widget reservations in the current business unit (last 20 by creation date). The selected booking must have a customer and at least one availability.


Best Practices

  1. Respect timing – Use delays (e.g. 30 min–1 h) before the first recovery message to avoid feeling intrusive.

  2. Prefer email when available – Use {abandoned_booking.email} for primary recovery; use phone for SMS only when appropriate.

  3. Include a direct link – Recovery messages should link back to the same widget/checkout when possible.

  4. Limit frequency – Avoid multiple aggressive follow-ups for the same abandonment.

  5. Use reason/source – Filter or branch on reason and source to tailor messaging (e.g. “expired” vs “closed”).


Related Documentation

Did this answer your question?