Build a trigger rule
Post automatically when a tier hits a threshold, cascades or sells out — exactly once.
Owned by Venue Manager · 12 steps · about 16 minutes
Why this exists
Trigger rules exist because the moments worth posting about are the moments nobody is watching for. A tier crossing ninety per cent, a cascade unlocking the next release, a night selling out — these happen at odd hours and they are exactly when urgency is real. A rule turns a sales event into a post without anyone refreshing a dashboard.
The mechanism is worth knowing because it explains the timing. Events publish state changes into an outbox; the marketing tick consumes that outbox, evaluates percentage and countdown rules, and publishes anything due. So rules fire on the tick, not the instant — a rule is prompt, not instantaneous, and that is a design choice in favour of one consistent transaction over five racing ones.
Dedupe is the part that saves you from embarrassment. Every firing is recorded against a trigger reference and the pair is unique, so redelivery of the same underlying event cannot post twice. On top of that, fire once means at most once ever, while leaving it off means once per distinct trigger — so a percentage rule can fire again if the tier reopens after refunds. Choose deliberately: a sell-out announcement should be once ever, a last-release nudge probably should not.
One operational rule to learn now: if a rule fires and its post fails, retry the POST, not the rule. The firing record stays, so re-firing is blocked by the dedupe — which is correct. The post is the thing that failed and the post is the thing to fix.
You do not have to be looking at the page to find out. Since plan 608 a post that ends failed or partial sends one message to the staff channel naming the event, the rule and the reason — once per failure, and again if a retry fails, never on a clean publish. Retry from the event's marketing tab, which is the page the notice is about; the sentence on that tab is the same one a host reads (“failed — not published — discord: the channel was switched off”), and only the Retry control differs by role.
Before you start
- A venue manager or admin session.
- An event with tiers. The seed ships three rules on demo-event-0001 already.
- At least one enabled channel for the rule's post to go to.
Practise with
| Persona | Password | Note | |
|---|---|---|---|
| venue_manager | manager@club.test | manager123 | shift lead: implies door_staff, plus intake, sales, guest list, marketing |
| admin | admin@club.test | admin123 | the only account that can touch money, identity and contracts |
| member | member@club.test | member123 | holds a seeded pass and membership card to practise scans against |
Steps 1–8 — Venue Manager
their manual →-
1Open the event's marketing tab. This is a standalone page, reached from the event, not a panel inside the event admin screen.Expected result The event's posts and rules, each rule with a live preview of its current condition.Watch out for The seeded event already has three rules — percentage sold at ninety, event sold out, and a cascade on the VIP Lounge tier. Read those before writing a fourth that duplicates one.
-
2Create a rule. Name it, then pick the trigger: percent sold, minutes before sale, tier cascade, tier sold out or event sold out.Expected result The form revealing only the fields that trigger needs.Watch out for The trigger dictates the configuration. A percentage rule without a threshold is refused with threshold_required; a countdown rule without minutes with minutes_required; and supplying a threshold to a trigger that has no use for one is refused with config_not_allowed.
-
3Decide the scope: leave the tier blank for an event-level rule, or pick a tier to watch just that release.Expected result A rule bound to the whole event or to one tier.Watch out for A tier from a different event is refused with tier_event_mismatch, and some triggers do not accept a tier at all — tier_not_allowed. The form is telling you the trigger's shape, not being awkward.
-
4Write the template body with placeholders — the same tokens as a manual post — pick the platforms, and set the link target.Expected result A template that will render with live values at firing time.Watch out for Placeholder and channel validation happen here, not at firing time. An unknown placeholder or a disabled channel is refused at save, which is exactly when you want to hear about it.
-
5Set fire once deliberately, then save. Fire once means at most once ever; leaving it off means once per distinct trigger occurrence.Expected result The rule listed as active with a condition preview.Watch out for A sell-out announcement firing twice because the tier reopened after a refund is a genuinely bad look. When in doubt on a milestone, fire once.
-
6After the rule has had a chance to fire, read its firing history.Expected result Firings with their trigger reference and the post each produced.Watch out for A firing with no post attached is a skip — usually a missed drop window on a countdown rule. That is recorded rather than silently dropped, so you can see the rule did evaluate.
-
7Edit, deactivate or delete a rule that is no longer right. Deactivating leaves its history intact.Expected result The rule updated, inactive, or gone from the list.Watch out for Deactivating does not delete the firings, and re-activating does not re-fire anything already recorded. If you genuinely need it to fire again, that is an admin reset. Added 2026-08-30, because the red Delete sits beside these two and this step never mentioned it: Delete is ALSO soft. It hides the rule from the list and leaves every firing and every post it ever produced exactly where they are, readable through the rule's firings endpoint. So the choice between Deactivate and Delete is about whether you expect to switch it back on, not about whether you keep the history — neither loses it.
-
8When a rule's post comes back failed, open the post and retry it. Do not go back to the rule.Expected result The failed targets re-sent from the post.Watch out for This is the single most common mistake with rules. The firing succeeded; the delivery did not. Re-firing is blocked by dedupe, and correctly so.
Steps 9 — Member
their manual →Is the person whose purchase crosses the threshold that fires the rule.
-
9From the customer side, buy into the tier until it crosses the threshold — this is what actually trips a percentage rule.Expected result The tier's sold percentage rising past your threshold.Watch out for Reserved is not sold. A tier full of open checkout holds has not crossed anything yet — the rule watches committed sales.
Steps 10–12 — Admin
their manual →Owns the tools that fire a rule on demand and reset its firing history for a re-test.
-
10As an admin, fire a rule immediately through the real pipeline to test it — this works even on an inactive rule.Expected result A firing marked as forced, and a real post.Watch out for It publishes for real to the mock channels and writes real outbound traffic. Use a demo event.
-
11Reset a rule's firings when re-testing a fire-once rule. This is the sanctioned way to make it fire again.Expected result Firing history cleared and the last-fired stamp removed.Watch out for Do not reach into the tables to do this by hand. The reset clears the firings AND the stamp — clearing one without the other leaves a rule that behaves inexplicably.
-
12Run the marketing tick manually when you do not want to wait for the scheduler.Expected result A report of outbox rows consumed, rules fired and skipped, and posts published.Watch out for The tick is idempotent for the same clock time. Running it twice in a row is safe and is the fastest way to prove a rule did not fire because its condition is false, not because the tick is stuck.