Saltar al contenido principal

Instant-Win Moments

Instant-win moments let you pre-seed the exact times during a campaign when a prize is available. The first participant who submits an eligible entry at or after a moment claims the slot. Useful when you want to spread winners across the whole campaign window rather than letting the first few hours absorb the entire stock.

This is one of the two instant-win strategies — the other is window-based (recurring time windows with stock that resets). Pick moments when you want individually-timestamped slots; pick windows when you want "every Friday 18:00–20:00 the wheel spins". Both live under Campaigns → Instant Win in the admin.

When to use it

  • High-traffic campaigns where you want a long tail of winners (e.g. 200 prizes spread over 30 days, not 200 winners in 2 hours).
  • Compliance-driven raffles where each winning moment must be auditable and pre-published.
  • Demos where the operator wants to control "the next winner happens at 11:32:15".

How it works

You create a list of CampaignWinningMoment rows, each with a UTC timestamp and a prize. When a member submits an entry (typically through a conversation flow or landing-page form), the engine looks for the first unclaimed moment with WinAtUtc ≤ now. If one exists, that member wins it. Otherwise they receive a neutral "no win" response — they cannot tell from the response whether stock exists.

Moment rollover policy

Each campaign picks one rollover policy that controls what happens to a moment that nobody claims by the time the next moment fires:

PolicyBehaviour
Roll over to next claimerThe unclaimed moment stays open until somebody arrives. Maximises total winners but you may get bunching at the end of the campaign.
Expire on end of dayA moment unclaimed by midnight (tenant timezone) becomes void. Use when you want to limit "stale" claims.
Expire immediatelyA moment is claimable only for ~60 seconds after WinAtUtc. If nobody is online in that window, the slot is burned. The most aggressive policy — produces fewer winners but evens out timing.

The default is Roll over to next claimer.

Step-by-step

Create a campaign with moments

  1. Go to Campaigns → Create campaign and pick a type that supports instant win (e.g. Receipt upload with instant win).
  2. In Winning strategy, pick Moment-based.
  3. Set Moment rollover policy for the campaign.
  4. Save the campaign.

Add moments

You can add moments one at a time or upload a CSV.

One at a time

  1. Open the campaign and go to the Winning moments tab.
  2. Click Add moment.
  3. Pick the prize from the campaign's prize pool, set the win timestamp (UTC) and save.

CSV upload

  1. On the Winning moments tab, click Upload CSV.
  2. The file must have the columns WinAtUtc,PrizeId (UTC ISO-8601 timestamps).
  3. The upload validates rows before inserting — bad rows are reported and nothing is inserted unless every row passes.
tip

Generate the CSV with a spreadsheet formula that spaces moments evenly across the campaign window. For 200 prizes over 30 days, that's one moment every 3.6 hours.

Watch claims happen

The Winning moments tab shows each row's state: Pending, Claimed (with member and timestamp), Expired. The funnel observability worker also emits a [UNCLAIMED-WINNING-MOMENT] notification when a moment ages without being claimed, so you can react in real time if traffic is lower than expected.

Limits and gotchas

  • Times are UTC in the database. Display in admin is local, but always double-check timezone when uploading bulk CSVs.
  • One claim per member per evidence. The same receipt image can never win twice — the hash is checked before the moment lottery runs.
  • Per-game play cap. If the game attached to the campaign has Max plays per member, members hit that cap before they hit the moment lottery.
  • Consolation prizes. A prize marked Consolation is awarded when the main stock is exhausted, never as a moment win. Use it to prevent a wave of "no win" responses at the end of the campaign.
  • Reservation expiry. A claimed moment creates a 24-hour reservation (or 24 h after the campaign ends, whichever is later). The participant must complete their data within that window or the slot is released.
  • Deserted campaigns. A campaign whose main stock isn't fully claimed by EndDate + grace is automatically marked as ExpiredDeserted. The unclaimed moments are recorded for audit but not redistributed.