Automate everything. Code nothing.

Trigger → conditions → actions. Build operational workflows through the CRM. No developers required.

11Triggers
14Actions
16Operators
Nesting

How it works

A Kafka event fires. The workflow engine evaluates every active workflow: does the trigger match? Do the conditions pass? If yes, execute the action chain in order. Priority controls execution order. "stop_after" skips lower-priority workflows.

  • Trigger: a platform event (deposit, trade, registration, status change, etc.)
  • Conditions: expression tree with AND/OR/NOT grouping and 16 operators
  • Actions: 14 built-in actions executed in sequence
  • Priority: lower number = higher priority, all matching workflows execute

Workflow definition

{
  "name": "Auto-assign high-value deposits",
  "trigger_event": "customer.deposited",
  "conditions": {
    "match": "all",
    "rules": [
      {"field": "event.amount", "operator": "gte", "value": 1000},
      {"field": "customer.retention_status", "operator": "eq", "value": "churning"}
    ]
  },
  "actions": [
    {"type": "handover_to_retention", "params": {}},
    {"type": "send_email", "params": {"subject": "Welcome back!"}},
    {"type": "add_note", "params": {"body": "Auto-assigned"}}
  ],
  "priority": 10,
  "stop_after": false
}

Triggers

11 event types that can fire a workflow. Adding a new trigger = publish a new Kafka event type. No code change in the workflow engine.

customer.registeredNew customer signed up
customer.depositedDeposit approved
customer.ftdFirst-time deposit confirmed
customer.withdrewWithdrawal processed
customer.tradedTrade opened
customer.status_changedSales/KYC status updated
customer.retention_changedRetention classification changed
call.no_answerVoIP call not answered
call.completedVoIP call completed
task.overdueTask past due date
customer.inactive_daysNo activity for N days

Conditions

Expression tree with unlimited nesting. AND/OR/NOT grouping. 16 operators from simple equality to regex. Field schema auto-discovers custom status types from the statuses table — broker-created statuses appear in the workflow builder without code changes.

16 operators

eqnegtltgtelteinnot_inis_nullis_not_nullcontainsnot_containsstarts_withends_withbetweenregex

Fields: customer.country, customer.sales_status_id, event.amount, order.symbol, transaction.type, and more.

Actions

14 built-in actions executed in sequence. Delay actions persist to the database and are picked up by a scheduler every 30 seconds. No lost actions on restart.

assign_to_teamRound-robin within team hierarchy
assign_to_agentDirect agent assignment
reassign_round_robinRe-distribute across team
handover_to_retentionMove to retention desk
set_statusUpdate sales/KYC status
send_emailSend via integration service
send_smsSend SMS via active provider
create_taskCreate follow-up task
add_noteAppend note to activity feed
increment_manager_counterBump manager counter
set_customer_activeToggle customer active flag
freeze_accountTrigger compliance freeze
delayWait N minutes/hours/days
webhookHTTP POST to external URL

Use cases

Three real workflows that brokers run in production.

  • New depositor onboarding: customer.deposited → country = BR AND amount > 500 → assign_to_agent(retention) → send_email(welcome_br) → create_task(follow_up, 2 days)
  • Churning customer rescue: customer.retention_changed → status = churning → send_sms(win_back) → create_task(call, 1 day) → add_note("Auto: churning rescue initiated")
  • High-value deposit alert: customer.deposited → amount >= 10000 → webhook(slack_notification) → handover_to_retention → set_status(vip)

Ready to see it in action?