Workflows
Workflows automate repetitive ticket operations. Define triggers, conditions, and actions — Reechdesk executes them automatically when events occur. Start from a template or build from scratch.
How Workflows Work
Each workflow has three parts:
- Trigger — The event that fires the workflow (e.g., ticket created, status changed).
- Conditions — Optional filters that must match for the actions to execute (e.g., priority equals HIGH).
- Actions — Operations to perform when the trigger fires and conditions pass.
Execution order: Workflows run in the order specified. If multiple workflows match an event, they all execute sequentially. Each workflow has its own conditions and actions.
Template Library
Reechdesk ships with 32 pre-built workflow templates organized by industry. Access them from the Templates tab on the Workflows page. Each template is designed for specific use cases and can be customized before saving.
| Category | Templates | Required Plan |
|---|---|---|
| General | 8 templates | All plans |
| Fintech & Payments | 7 templates | Professional+ |
| Banking | 5 templates | Enterprise |
| E-commerce | 5 templates | Professional+ |
| SaaS & Technology | 4 templates | Professional+ |
| Agent Banking | 3 templates | Enterprise |
Click Preview on any template to see its trigger, conditions, and actions before applying it. Click Use Template to load it into the workflow builder, where you can customize it before saving.
Trigger Events
| Event | Description | Available Context |
|---|---|---|
| ticket_created | A new ticket is created | Full ticket + entity data |
| ticket_status_changed | Ticket status changes | oldStatus, newStatus, ticket, entity |
| ticket_assigned | Ticket is assigned/reassigned | oldAssignee, newAssignee, ticket, entity |
| ticket_escalated | Ticket is escalated | reason, escalateToId, ticket, entity |
| comment_added | A comment is added to a ticket | comment (id, body, isInternal), ticket, entity |
Condition Operators
| Operator | Description |
|---|---|
| equals | Field value exactly matches the condition value |
| not_equals | Field value does not match the condition value |
| contains | Field value contains the condition value (case-insensitive) |
| starts_with | Field value starts with the condition value (case-insensitive) |
| in | Field value is one of the comma-separated values |
| not_in | Field value is not one of the comma-separated values |
| contains_word | Smart token match — expands synonyms automatically (e.g., "failed" matches "declined") |
| contains_any | OR match — matches if any of the comma-separated tokens appear |
| contains_all | AND match — matches only if all comma-separated tokens appear |
| matches_concept | Concept match — uses domain-specific intent patterns (e.g., payment-failure, fraud-report) |
| similar_to | Fuzzy match — catches typos and similar words (e.g., "transcation" → "transaction") |
Intelligent Matching Engine
The matching engine processes conditions through 4 layers, each progressively more lenient:
- 1. Exact Match — Direct string comparison (fastest)
- 2. Synonym Expansion — Expands tokens to domain-specific synonyms (e.g., "failed" → "declined", "error")
- 3. Concept Matching — Matches against multi-word intent patterns with configurable keyword thresholds
- 4. Fuzzy Matching — Levenshtein distance for typo tolerance (configurable threshold)
All matching runs in under 1ms — pure string operations, no AI/API calls. The engine uses in-memory cache with 5-minute TTL for performance.
Enterprise Feature
Custom synonym groups, concepts, and matching configuration are available on the Enterprise plan. Configure these at Settings → Synonyms, Settings → Concepts, and Settings → Matching.
Condition Fields
Conditions use dot notation to access ticket properties:
ticket.priority— CRITICAL, HIGH, MEDIUM, LOWticket.source— EMAIL, CHAT, WHATSAPP, FACEBOOK, PHONE, MANUALticket.type— COMPLAINT, INCIDENT, CHANGE_REQUEST, SERVICE_REQUEST, QUESTIONticket.status— OPEN, IN_PROGRESS, PENDING, ESCALATED, RESOLVED, CLOSEDticket.subject— Subject line text (use with contains_word, matches_concept, similar_to)ticket.tags— Tags array (use with contains_word to check if a tag exists)ticket.customerEmail— Customer email address
Action Types
| Action | Description | Value |
|---|---|---|
| assign_to_agent | Assign ticket to an agent | Agent user ID |
| set_status | Change ticket status | OPEN, IN_PROGRESS, RESOLVED, etc. |
| set_priority | Change ticket priority | CRITICAL, HIGH, MEDIUM, LOW |
| add_tag | Add a tag to the ticket | Tag name |
| escalate_to | Escalate and assign to agent | Agent user ID |
| set_due_date | Set due date from now | Hours from now (e.g., 24) |
| send_email_agent | Send email notification to agent | Agent user ID |
| send_email_customer | Email the ticket's customer | Subject line (empty = default) |
| internal_note | Add internal note to ticket | Note body text |
| create_child_ticket | Create a sub-ticket | Child ticket subject |
| webhook | POST to external URL | URL string |
| notify_team | Push notification to all agents | Notification message |
Example Workflows
Auto-assign critical tickets
{
"name": "Auto-assign critical tickets",
"trigger": {
"event": "ticket_created",
"conditions": [
{ "field": "ticket.priority", "operator": "equals", "value": "CRITICAL" }
],
"conditionLogic": "AND"
},
"actions": [
{ "type": "set_priority", "value": "CRITICAL" },
{ "type": "set_status", "value": "IN_PROGRESS" },
{ "type": "add_tag", "value": "urgent" },
{ "type": "set_due_date", "value": "4" }
]
}Failed transaction auto-response (Fintech)
{
"name": "Failed Transaction Response",
"trigger": {
"event": "ticket_created",
"conditions": [
{ "field": "ticket.subject", "operator": "contains_word", "value": "failed transaction" }
],
"conditionLogic": "AND"
},
"actions": [
{ "type": "set_priority", "value": "HIGH" },
{ "type": "set_status", "value": "IN_PROGRESS" },
{ "type": "add_tag", "value": "failed-transaction" },
{ "type": "set_due_date", "value": "4" },
{ "type": "internal_note", "value": "Verify transaction status with payment processor" }
]
}The contains_word operator will also match "transaction declined", "payment error", "unsuccessful transfer" — all thanks to synonym expansion.
Fraud report concept matching (Fintech)
{
"name": "Fraud Report Handling",
"trigger": {
"event": "ticket_created",
"conditions": [
{ "field": "ticket.subject", "operator": "matches_concept", "value": "fraud-report" }
],
"conditionLogic": "AND"
},
"actions": [
{ "type": "set_priority", "value": "CRITICAL" },
{ "type": "set_status", "value": "IN_PROGRESS" },
{ "type": "add_tag", "value": "fraud" },
{ "type": "assign_team", "value": "fraud-investigations" },
{ "type": "set_due_date", "value": "2" },
{ "type": "internal_note", "value": "IMMEDIATE: Freeze account pending investigation" }
]
}The matches_concept operator matches against the "fraud-report" concept which includes keywords: fraud, scam, stolen, unauthorized, suspicious. Tickets with 1+ of these keywords in the subject will match.
Typo-tolerant matching
{
"name": "POS Terminal Issues",
"trigger": {
"event": "ticket_created",
"conditions": [
{ "field": "ticket.subject", "operator": "similar_to", "value": "pos terminal" }
],
"conditionLogic": "AND"
},
"actions": [
{ "type": "add_tag", "value": "pos-issue" },
{ "type": "assign_team", "value": "hardware-support" }
]
}The similar_to operator catches typos like "pos termanal", "POS terminl", "poz terminal" using Levenshtein distance.
CBN complaint SLA (Banking)
{
"name": "CBN Complaint SLA",
"trigger": {
"event": "ticket_created",
"conditions": [
{ "field": "ticket.type", "operator": "equals", "value": "COMPLAINT" }
],
"conditionLogic": "AND"
},
"actions": [
{ "type": "add_tag", "value": "cbn-compliance" },
{ "type": "set_due_date", "value": "336" },
{ "type": "set_priority", "value": "HIGH" },
{ "type": "internal_note", "value": "CBN requires 14-day resolution" }
]
}Notify on escalation
{
"name": "Tag escalated tickets",
"trigger": {
"event": "ticket_escalated",
"conditions": [],
"conditionLogic": "AND"
},
"actions": [
{ "type": "add_tag", "value": "escalated" },
{ "type": "set_priority", "value": "HIGH" },
{ "type": "internal_note", "value": "This ticket has been escalated" }
]
}Execution Logging
Every workflow execution is logged with the event, status (success/partial/error), executed actions, and any errors. This helps you debug workflow behavior and monitor automation health.
