Conditional logic pollutes your services
If plan is Free send this template, else send that one — repeated across every email-sending function.
The else.events differentiator
Define conditions in the dashboard. else.events evaluates them against every incoming event and routes to the right template — no if/else in your codebase.
If plan is Free send this template, else send that one — repeated across every email-sending function.
Selecting the right language template from a user locale is custom code every team writes from scratch.
Sending different branded templates per tenant means per-tenant switch statements or dynamic template lookups.
Business logic like "send a Pro upgrade CTA only to Free users" is buried in application code, invisible to product managers.
Rules are a core concept in else.events, not an afterthought. Every event is evaluated against your rules before a template is selected.
Event type, plan tier, locale, tenant ID, user role — match on any JSON field in your event payload.
Combine AND conditions. "Event = trial.ending_soon AND plan = Free AND locale = de" selects the German free-plan template.
Rules are configured in the dashboard. Non-developers can see and understand routing logic without reading code.
Route to Postmark for transactional, to SMTP for a specific tenant, or fall back on delivery failure — all in rules.
// incoming event
{
"type": "trial.ending_soon",
"locale": "de",
"user": { "email": "user@example.com", "name": "Maria" },
"data": {
"plan": "Free",
"days_remaining": 3,
"upgrade_url": "https://app.example.com/upgrade"
}
} A rule matching type = trial.ending_soon AND plan = Free AND locale = de selects the German free-plan trial reminder template. No code change in your app.
Define your first rule in the dashboard. No code change in your app required.