Automation and templates

The platform keeps working when nobody is logged in

A built-in scheduler expires points, sends due campaigns, rebuilds segments, runs scenarios, backs up the database and watches its own health. Every job is a console command your team can also run by hand.

scheduled jobs
25
console commands
50
notification events
33

Scheduler

Jobs that run on their own

The scheduler runs as its own service. Daily jobs use fixed clock times so a restart never runs them twice. Each job has a lock, so two copies of the scheduler cannot collide.

Scenario flow with trigger, delay, condition and action steps
RunsWhat it does
hourlyExpires points that reached their expiry date
hourlyRuns scheduled percentage burns of bonus balances
every 5 minutesCredits bonus grants whose activation date has come
every minuteReleases bonus reserves held past their time limit
every minuteExpires unconfirmed write-off holds
hourlySwitches off rules whose validity period ended
hourlyRuns event rules imported from the till system
every 5 minutesSends campaigns whose time has come
hourlyRecomputes dynamic segment membership
every minuteResumes scenarios whose pause is over
hourlyStarts birthday and inactivity scenarios
hourlySaves month-end RFM snapshots and e-mails them to administrators
daily 02:50Deletes logos no form uses any more
every 15 minutesPulls catalogues from ERP and web shops
every 15 minutesExpires unused shop codes and old webhook deliveries
every 5 minutesDeletes expired marketplace order codes
daily 02:30Deletes webhook logs older than 30 days
every 5 minutesStarts a backup when its slot is due
every minuteProbes platform health, records history and raises alerts
daily 02:40Deletes resolved alerts past retention
every 15 minutesRe-registers the alert bot webhook when it fails
daily 01:00Creates next months' partitions for orders, ledger and logs
daily 02:15Refreshes planner statistics on hot tables
every minuteWrites buffered key usage from Redis to the database
every 6 hoursDeletes expired password reset tokens

Notification templates

Ready-made messages for every event

Each new company starts with a full set of default templates in every channel. The company edits text and design, switches events on or off, and campaigns reuse the same channels.

EventChannels
Sign-in and security
Registration codeE-mail Push SMS Telegram WhatsApp
Portal sign-in codeE-mail Push SMS Telegram WhatsApp
Confirmation codeE-mail Push SMS Telegram WhatsApp
E-mail verificationE-mail
Password resetE-mail SMS WhatsApp
Password changedE-mail
Phone change codeSMS WhatsApp
Phone changedSMS WhatsApp
Points and tiers
Points earnedE-mail Push SMS Telegram WhatsApp
Points spentE-mail Push SMS Telegram WhatsApp
Write-off codeE-mail Push SMS Telegram WhatsApp
Points about to expireE-mail Push SMS Telegram WhatsApp
Points expiredE-mail Push SMS Telegram WhatsApp
Tier upgradeE-mail Push SMS Telegram WhatsApp
Tier downgradeE-mail Push SMS Telegram WhatsApp
Bonus package grantedE-mail
Personal bonus receivedE-mail
Reward unlockedE-mail Push Telegram
Reward claimedE-mail SMS WhatsApp
Engagement and marketing
WelcomeE-mail SMS Telegram WhatsApp
BirthdayE-mail Push SMS Telegram WhatsApp
Membership anniversaryE-mail Push Telegram
We miss youE-mail SMS Telegram WhatsApp
Campaign messageE-mail Push SMS Telegram WhatsApp
Special offerE-mail Push SMS Telegram WhatsApp
Purchases and staff
Purchase receiptE-mail
RefundE-mail SMS WhatsApp
Order cancelledE-mail SMS Telegram WhatsApp
Monthly RFM report for administratorsE-mail
Welcome to a new companyE-mail
Staff password resetE-mail
Staff password changedE-mail
Profile changed by staffE-mail

Telegram

Two bots: one for members, one for operators

The member bot of each company links a Telegram chat to a member in one tap: the bot asks the member to share the phone number, matches it to the program and from then on delivers codes, balances and campaign messages.

The platform alert bot sends incidents to the operators' chat and answers commands.

  • /status — current health of every component
  • /problems — open alerts only
  • /help — the list of commands

Console

Every command, with what it does

Commands without a schedule are tools for operators: imports, re-keys, restores and clean-ups.

CommandWhat it doesRuns
Points and rewards
app:points:expireExpires points that reached their expiry datehourly
app:bonus:burnRuns scheduled percentage burns of bonus balanceshourly
app:bonus:activate-grantsCredits bonus grants whose activation date has comeevery 5 minutes
app:bonus-reserves:expireReleases bonus reserves held past their time limitevery minute
app:redemption:expire-holdsExpires unconfirmed write-off holdsevery minute
app:rules:deactivate-expiredSwitches off rules whose validity period endedhourly
app:till:process-triggersRuns event rules imported from the till systemhourly
app:orders:backfill-applied-rulesFreezes the paying rules onto older orders, verifying each replayon demand
Marketing and analytics
app:campaigns:execute-scheduledSends campaigns whose time has comeevery 5 minutes
app:segments:rebuildRecomputes dynamic segment membershiphourly
app:segments:reassign-tiersReassigns tiers linked to a segmenton demand
app:scenarios:process-delaysResumes scenarios whose pause is overevery minute
app:scenarios:process-scheduled-triggersStarts birthday and inactivity scenarioshourly
app:analytics:rfm:monthlySaves month-end RFM snapshots and e-mails them to administratorshourly
app:analytics:backfill-tier-historySeeds tier history for members who already have a tieron demand
Members, tenants and imports
app:members:regenerate-cardsReissues card numbers from the tenant's card templateon demand
app:members:backfill-registration-sourceRelabels members with the channel of their integration keyon demand
app:tenant:purge-membersDeletes a tenant's members and history, keeping settingson demand
app:tenant:purge-catalogDeletes a tenant's catalogue for a clean re-importon demand
app:tenant:deleteDeletes a tenant with all of its dataon demand
app:super-admin:createCreates a platform administrator with a one-time passwordon demand
app:registration-forms:import-logosMoves sign-up form logos into the databaseon demand
app:registration-forms:prune-logosDeletes logos no form uses any moredaily 02:50
Catalogue, shops and webhooks
app:catalog:syncPulls catalogues from ERP and web shopsevery 15 minutes
app:ecommerce:cleanupExpires unused shop codes and old webhook deliveriesevery 15 minutes
app:mp-order-codes:expireDeletes expired marketplace order codesevery 5 minutes
app:webhooks:emit-samplesSends one sample of every webhook eventon demand
app:webhooks:cleanup-logsDeletes webhook logs older than 30 daysdaily 02:30
Backups
app:backup:dispatchStarts a backup when its slot is dueevery 5 minutes
app:backup:databaseDumps the database, rotates copies and uploads to S3on demand
app:backup:restoreRestores the platform from a backupon demand
app:backup:tenantBacks up the data of one tenanton demand
app:backup:restore-tenantRestores one tenant from its backupon demand
Platform operations
app:health:tickProbes platform health, records history and raises alertsevery minute
app:health:cleanup-alertsDeletes resolved alerts past retentiondaily 02:40
app:health:telegram-webhook-ensureRe-registers the alert bot webhook when it failsevery 15 minutes
app:health:telegram-webhookRegisters the alert bot webhookon demand
app:health:telegram-pollRuns the alert bot without a webhookon demand
app:telegram:pollRuns member bots without a webhookon demand
app:outbox:relayPublishes transactional outbox messages to the brokeron demand
app:partitions:createCreates next months' partitions for orders, ledger and logsdaily 01:00
app:db:analyzeRefreshes planner statistics on hot tablesdaily 02:15
app:pos-keys:flush-last-usedWrites buffered key usage from Redis to the databaseevery minute
app:tokens:cleanupDeletes expired password reset tokensevery 6 hours
app:secrets:rekeyRe-encrypts stored secrets with a new keyon demand
app:notifications:sandboxManages the outbound allow-list for test standson demand
app:translations:importImports interface translationson demand
app:geo:importImports the world city directoryon demand
app:seedFills a development stand with demo dataon demand
app:load-test:seedGenerates a high-volume data set for load testson demand