Automations
Updated August 24, 2026
An automation is a flow that runs by itself. A contact does something — responds to a survey, redeems a coupon, gets created. Pluspoint then waits, checks conditions, and sends messages, coupons or surveys on your behalf. You build the flow on a canvas of connected steps, save it, and switch it on when it is ready.
Before you start
- Your plan must include campaigns. Without it, the Campaigns area shows an upgrade screen instead of the automations list.
- Creating, editing, enabling and deleting automations need the
campaigns:fullpermission tier (or account ownership). Withcampaigns:restrictedthe editor opens read-only.- Every send step needs a connected outbound channel — SMS, Email, WhatsApp Business or WhatsApp (Beta). See Channels.
- A Send coupon step requires access to the Coupons module and a coupon whose status is Active. A Send survey step requires access to the Surveys module and a survey template with sending enabled.
- Email steps require an email design and WhatsApp Business steps require an approved WhatsApp template — both from the Template library.
Where to find it
Campaigns → Automated, or go to https://app.pluspoint.io/campaigns/automated.
Build an automation
- Select Create automation.
- Name it in the header.
- Click the Trigger node and configure it — see Set the trigger.
- On the edge where you want the new step, select the + button, then pick a step from the Send or Flow group.
- Click each node to open its settings panel and complete it.
- Select Save.
- Back in the automations list, switch Enabled on.
Trigger and Exit cannot be deleted, and an If / then node can only be deleted once both of its paths lead straight to Exit. The back arrow closes the editor without saving.
Warning A saved automation is a draft and sends nothing until you switch Enabled on.
Step types
| Step | Group | What it does | What it needs |
|---|---|---|---|
| Send message | Send | Sends an SMS, WhatsApp or email | A channel, plus a message body or a library template |
| Send coupon | Send | Sends a coupon to the contact | A channel and an Active coupon; on Email and WhatsApp Business, a template with a coupon-link button |
| Send survey | Send | Sends a survey to the contact | A channel and a survey; on Email and WhatsApp Business, a template with a survey-link button |
| Wait | Flow | Pauses before the next step | A duration and a unit |
| If / then | Flow | Splits the path into a Yes branch and a No branch | At least one complete condition |
| Exit | — | Contacts leave the automation here | Nothing — it is always present |
Send coupon is hidden if you do not have Coupons access, and Send survey is hidden without Surveys access.
Set the trigger
Trigger event(s)
The automation fires whenever any of the selected events occurs. When several qualifying events happen close together, the delay is counted from the latest one.
| Event | Fires when |
|---|---|
| Contact created | A contact record is created — by import, manually, from a widget, from a survey, or through the API |
| Survey responded | A contact submits a survey |
| Survey sent | A survey invitation goes out |
| Conversation resolved | An Inbox conversation is closed |
| Review left | A review attributable to the contact arrives |
| Custom event | A custom event is posted to POST api/public/v2/custom-events |
| Coupon redeemed | The contact redeems a coupon |
| CoverManager reservation | A reservation arrives from CoverManager. Only listed when the CoverManager integration is connected |
| VTEX order | An order arrives from VTEX. Only listed when the VTEX integration is connected |
Custom event type (optional)
Appears only when Custom event is one of the selected events. Leave it empty to react to every custom event, or type an event type to match exactly one. See the API documentation for how to post events.
Once per contact
Off — the default — lets a contact re-enter every time the event fires. On means a contact who has already finished, exited or failed this automation is never enrolled again.
A contact who still has an active enrollment is never enrolled a second time, whichever way this switch is set. It is the only frequency control on the automation itself — there are no quiet hours — so turn it on whenever repeat sends would be unwelcome. A Send survey step carries one more limit of its own. It honours the survey template’s Over-survey protection setting: a contact already invited inside that window has the step skipped.
Who can enter
The condition builder here decides which of the contacts who triggered the automation actually enter it. Leave it empty and every contact who triggers the automation enters. See Build a condition.
Configure a send step
Send message and Send coupon panels ask for, in order:
- Channel — required. Only outgoing, connected SMS, Email, WhatsApp Business and WhatsApp (Beta) channels are offered. Users with the
settings:fulltier also get a Create new channel row. - Coupon — on Send coupon only. Lists coupon templates whose status is Active.
- The content, which depends on the channel:
| Channel | Content field |
|---|---|
| SMS | A Message body. No length limit |
| WhatsApp (Beta) | A Message body, up to 1024 characters, plus an optional image (JPG or PNG, up to 5 MB) |
| An Email design picked from the Template library | |
| WhatsApp Business | A Template picked from the Template library |
A Send survey step asks for the Channel, then the Survey — the list holds survey templates with sending enabled. On Email and WhatsApp Business it also asks for a template, restricted to survey-link designs. On SMS and WhatsApp (Beta) the survey’s own invitation message is used, so there is no message field.
Set a wait
The Wait panel takes a number and a unit: minutes, hours or days.
Where you place a Wait changes how it is measured:
- A Wait placed directly after the Trigger is measured from the trigger event’s own timestamp. That is what makes “send seven days after the visit” land exactly seven days after the visit, regardless of when the engine gets to it.
- Every other Wait is measured from the moment the engine reaches that step.
Switching on an automation whose first step is a Wait also back-fills. The enrollment scan widens to that Wait’s length, so contacts whose trigger event happened inside that window are still enrolled. Each one is scheduled at event time plus the delay.
Build a condition
The same builder powers Who can enter on the trigger and the If / then step.
A condition is a list of scenarios. Rows inside one scenario are joined with and; scenarios are joined with or. Add filter adds a row to the current scenario; Add “OR” alternative starts a new scenario.
Each row is a What, an operator, and usually a value.
| What | Operators | Value |
|---|---|---|
| Segment | is any of, is none of | A Segments multi-select. A segment that no longer exists shows as (deleted segment) |
| Email, Phone number, First name, Last name | is, is not, is one of, contains, does not contain, is known, is unknown, is greater than, is less than | A Value field. is one of takes values, comma-separated. is known and is unknown take no value |
| Event field | Same as contact fields | A JSON path such as order.total, plus a value. Only offered when Custom event is one of the trigger events |
How conditions are evaluated:
- Text comparisons are case-insensitive.
- is greater than and is less than parse both sides as numbers, and the condition fails if either side is not numeric.
- Event fields are read from a snapshot of the triggering event’s payload, taken at enrollment. Later changes in the source system do not affect a contact who is already enrolled.
An incomplete row blocks saving.
Save and enable
Saving validates the whole graph. Steps with problems are highlighted with the reason, and the save is refused until you fix them. Non-obvious rules:
| Issue message | What to do |
|---|---|
| ”Add a message or survey step the trigger leads to” | The trigger must reach at least one Send message or Send survey step |
| ”The selected channel is disconnected or unavailable” | Reconnect the channel, or pick another one |
| ”A filter uses a segment that no longer exists” | Replace the (deleted segment) entry with a live segment |
Turning the switch on revalidates the whole graph strictly — every template must be usable at that moment — and re-checks that your plan includes campaigns. Anything that fails keeps the switch off and shows the reason.
Turning the switch off pauses the automation. In-flight enrollments freeze where they are rather than being dropped, and they resume from the same step when you switch it back on.
Editing and re-saving an automation that is already on keeps it on, clears any failure, and exits any enrollment sitting on a step you deleted.
Structural limits
| Rule | Limit |
|---|---|
| Steps per automation | 100 |
| Triggers per automation | Exactly 1 |
| Trigger events | At least 1 |
| Loops | Not allowed — the flow must run one way |
| Disconnected steps | Not allowed — every step must be reachable from the trigger |
| Actions | The trigger must reach at least one message or survey step |
| Paths out of a step | 1, except an If / then, which has one Yes and one No |
Read the automations list
Enrolled contacts counts entries, not completions, and it never goes down.
An automation that has failed shows the switch off and disabled. Open it, correct the problem and save — saving clears the failure — then switch it on again.
How the engine runs
Enrollment happens within a few minutes of the trigger event. It:
- skips the whole account when the plan does not include campaigns;
- excludes unsubscribed contacts outright — the opt-out flag is account-wide and is described in One-time campaigns;
- requires the contact to have an address usable by at least one of the automation’s send channels — a phone number for SMS, WhatsApp (Beta) and WhatsApp Business, an email address for Email. If the automation has no resolvable send channel at all, nothing is enrolled;
- applies the Who can enter conditions;
- honours Once per contact;
- uses the latest qualifying event in the window as the trigger timestamp.
When an account’s campaigns entitlement is blocked, due sends wait and resume once billing is healthy — nothing is lost.
Per-step outcomes:
| Situation | What happens |
|---|---|
| The contact has unsubscribed | The enrollment exits — no further steps run |
| The contact has no address for that step’s channel | The step is skipped and the flow continues |
| A Send survey step’s contact is still inside the survey template’s Over-survey protection window | The step is skipped and the flow continues |
| The channel is not ready | Retry in 30 minutes |
| The WhatsApp daily limit is reached | Retry in 24 hours |
| The WhatsApp number is unreachable or invalid | The step is skipped and the flow continues |
| The coupon is no longer Active, or the channel is misconfigured | The automation is marked failed and its switch goes off |
| The WhatsApp template becomes unusable | Retry in 1 hour, and the automation is marked failed |
| An unknown error occurs | Retry in 30 minutes, and the automation is marked failed |
Two more engine behaviours worth knowing:
- Channel-level failure. When a channel leaves its ready state, every automation with a step on that channel is marked failed. Reconnecting a WhatsApp (Beta) channel un-fails them automatically. On SMS, Email and WhatsApp Business you clear the failure yourself: open each automation and save it.
- Stale enrollments are dropped. An enrollment still running later than the sum of the flow’s waits plus 90 days exits without sending. A long pause never turns into a months-late message.
If the account loses its campaigns entitlement, every enabled automation is set to paused within the hour. They are not switched back on automatically when the plan returns — turn them on yourself.
When Meta pauses, disables or rejects a WhatsApp template, the automations that use it are paused automatically.
Where results live
Automations report through the Enrolled contacts column, and each individual send appears on the contact’s Activity timeline as Message sent via {{channel}}.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Create automation is missing and the editor is read-only | You have campaigns:restricted | Ask an admin to raise your Campaigns tier to full. See Users and permissions |
| The Enabled switch will not turn on | The strict re-validation found an unusable template or channel, or the plan check failed | Open the automation, fix the highlighted step, save, then switch it on |
| The switch is off and greyed out | The automation failed | Open it, fix the cause named in the step’s error, and save. Saving clears the failure |
| Send coupon or Send survey is missing from the palette | You do not have Coupons or Surveys module access | Ask an admin to grant the module. See Users and permissions |
| Nobody is being enrolled | The contacts are unsubscribed, fail Who can enter, have no address for any send channel, or already entered once with Once per contact on | Widen the entry conditions, complete the contact records, or turn Once per contact off |
| Enrolled contacts rises but no messages arrive | The step’s channel is not ready, so sends are retried rather than delivered | Reconnect the channel in Settings → Channels |
| A message arrived much later than the wait suggested | The step’s channel was unavailable and the step was retried, or the automation was paused in the middle | Check the automation’s failure state and the channel status |
| Every automation on the account went to paused at once | The account lost its campaigns entitlement | Restore the plan, then switch each automation on again |
| ”This segment is used by an automation. Remove it from the automation before deleting.” | A condition still references that segment | Remove it from the automation’s conditions, then delete the segment |
| Deleting a channel is refused with “Cannot proceed: {{amount}} active campaign(s) in progress” | An automation step still points at that channel. Draft, paused and enabled automations all count, and waiting does not clear it | Repoint or remove every step that uses the channel, or delete those automations, then try again |