arrow_back Back to Overview

Replies that write themselves

Not mail merge. Not templates with a name substituted in. Replies that assemble differently depending on what the enquiry actually contained.

Every enquiry that arrives in Sprevi is already structured — budget extracted, service type identified, location known, enquiry type classified. Custom variables use that structured data to decide what content to include in the reply. If the budget is above your threshold, one paragraph appears. If they mentioned a specific service, a relevant section is added. If nothing matches, the variable simply doesn't appear — the reply stays clean.

You define the conditions and the content. The system evaluates them at send time, against the real data from that specific enquiry.

Custom variables

A custom variable is a {{TagName}} placeholder in any template. When the reply is sent, each variable is evaluated against the extracted data from the enquiry and replaced with the matching content — or nothing, if no conditions are met.

Example: {{BudgetResponse}}
IF
budget ≥ £15,000
With a {budget} budget you have real options — I'd suggest we look at a full specification rather than trying to value-engineer everything. Here's what that typically covers…
IF
budget ≥ £5,000
A {budget} budget is workable — we'd need to prioritise, but it's very achievable. Let me explain what I'd focus on first…
ELSE
nothing matched
— variable removed, reply stays clean —
Tiers are evaluated top to bottom. First match wins. Any extracted field can be a condition — budget, location, enquiry type, service mentioned, anything.
≥ / ≤

Numeric thresholds — budget ranges, guest counts, durations

equals

Exact match — enquiry type, specific location, known value

contains

Substring or regex — any phrase, pattern, or keyword in a field

not empty

Field was extracted at all — presence, not value

AND / OR

Combine multiple conditions per tier

interpolation

Use {fieldname} inside the replacement text itself

Built-in tokens

These tokens come pre-built and resolve automatically — no configuration needed beyond connecting the relevant service. They follow the same pattern as custom variables: context-aware, fallback to nothing if conditions aren't met.

{{DelayedReplyApology}}

Only appears if the reply is being sent more than N hours after the original enquiry arrived. Threshold is configurable per mailbox. Empty string otherwise — no awkward apology when you replied in 10 minutes.

{{AvailabilitySummary}}

Upcoming available slots from your booking entities, evaluated against the requested dates extracted from the enquiry. Reflects configured availability rules per entity — not just a calendar read.

{{CalendlyLink}}

Your Calendly self-booking link, resolved at send time. Pair with a custom variable condition so it only appears for leads that meet your quality bar.

{{EnquiryStatusLink}}

A set of configurable status-update reply links — lets the recipient confirm they're still interested, ask to discuss further, or say it's no longer needed. Responses update the client record directly.

What conditions can reference

At send time, the full context of the enquiry is available to every condition — not just the client record. This includes everything extracted from the message plus the message itself.

check Any extraction rule field — budget, location, job type, or any custom field you've defined
check enquiryType — the classification assigned by your extraction rules
check The original enquiry body — condition on any phrase or keyword in the message
check name, email — client identity fields
check ChatBubble form fields — any answer from your website widget flow
check Client history — booking status, whether they've contacted you before
check subject — the original email subject line