Automate everything. Code nothing.
Trigger → conditions → actions. Build operational workflows through the CRM. No developers required.
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 upcustomer.depositedDeposit approvedcustomer.ftdFirst-time deposit confirmedcustomer.withdrewWithdrawal processedcustomer.tradedTrade openedcustomer.status_changedSales/KYC status updatedcustomer.retention_changedRetention classification changedcall.no_answerVoIP call not answeredcall.completedVoIP call completedtask.overdueTask past due datecustomer.inactive_daysNo activity for N daysConditions
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
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 hierarchyassign_to_agentDirect agent assignmentreassign_round_robinRe-distribute across teamhandover_to_retentionMove to retention deskset_statusUpdate sales/KYC statussend_emailSend via integration servicesend_smsSend SMS via active providercreate_taskCreate follow-up taskadd_noteAppend note to activity feedincrement_manager_counterBump manager counterset_customer_activeToggle customer active flagfreeze_accountTrigger compliance freezedelayWait N minutes/hours/dayswebhookHTTP POST to external URLUse 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)