> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ravenna.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Triggers & actions

> Reference for all Ravenna workflow triggers and actions, including ticket events, Slack reactions, integration actions, and configuration details.

Every workflow needs exactly one trigger that starts the automation and one or more actions that perform tasks. This page documents all available triggers and actions.

## Trigger selection guide

### Ticket lifecycle triggers

| Trigger                    | When it fires                                               | Best for                                                      |
| -------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------- |
| Ticket Created             | New ticket appears                                          | Initial routing, notifications, external system sync          |
| Form Submitted             | Form data submitted or updated on a ticket                  | Structured request processing, approval flows                 |
| Category Assigned          | Category set or changed                                     | Category-based routing, team assignment                       |
| Ticket Status Changed      | Status transitions                                          | Status-based notifications, follow-up actions                 |
| Ticket Assigned            | Assignee added                                              | Assignment notifications, workload tracking                   |
| Ticket Archived            | Ticket archived                                             | Cleanup, final notifications, external sync                   |
| Ticket Tags Changed        | Tags added or removed                                       | Tag-based routing, escalation triggers                        |
| Ticket Approval            | Approval decision made                                      | Post-approval provisioning, decline handling                  |
| SLA Status                 | SLA attached, alerting, breached, or met                    | SLA escalations, early-warning notifications, breach handling |
| Reminder Expired           | A scheduled reminder on a ticket fires                      | Approval nudges, escalation of stale approvals                |
| Entitlement Status Changed | An entitlement's provisioning status changes                | Access request provisioning notifications, failure handling   |
| Message Sent               | New message on ticket (filterable by author and visibility) | Response monitoring, sentiment analysis, private-note routing |
| Task Completed             | Task item completed                                         | Task handoffs, sequential workflow progression                |
| Task Template Applied      | Task template applied to a ticket                           | Onboarding workflows, checklist-driven processes              |

### Other triggers

| Trigger                | When it fires                                 | Best for                                                 |
| ---------------------- | --------------------------------------------- | -------------------------------------------------------- |
| Slack Reaction Added   | Emoji reaction added in Slack                 | Ticket creation from reactions, acknowledgment tracking  |
| Slack Reaction Removed | Emoji reaction removed                        | Undo or cleanup workflows                                |
| Cron                   | Recurring schedule                            | Periodic reports, stale ticket cleanup, batch operations |
| Webhook                | Inbound HTTP POST to the trigger's Direct URL | Bridging external systems without a native integration   |

<Note>
  Microsoft Teams reaction triggers are not yet exposed as workflow triggers. Teams uses a fixed 5-reaction set ([emoji actions](/integrations/microsoft-teams/emoji-actions)) that drive built-in ticket actions but are not available as custom workflow triggers in the current beta.
</Note>

### Trigger selection tips

* **Ticket Created vs Form Submitted:** Use Ticket Created for broad routing. Use Form Submitted when you need to react to specific form types or when form field values drive the workflow logic.
* **Form Submitted fires on updates too.** If form field values are changed on an existing ticket, Form Submitted fires again. Design workflows to handle re-triggers gracefully.
* **Category Assigned fires on creation too.** If a ticket is created with a category already set, this trigger fires. You do not need both Ticket Created and Category Assigned for the same workflow.
* **Tags Changed provides add/remove context.** The trigger output includes which tags were added and which were removed, so you can branch on whether a specific tag was added vs. removed.
* **Task Completed includes next-task info.** The output includes the next task in the sequence and its assignees, making it ideal for handoff notifications without additional lookups.
* **Cron triggers have no ticket context.** Cron-triggered workflows cannot reference ticket fields. Use them for batch operations, reports, or system maintenance tasks.

### Trigger filters

All triggers support filters that narrow when the workflow activates. Filters use AND logic: all conditions must be true for the trigger to fire. If you need OR logic, create separate workflows for each condition.

***

## Action selection guide

### Ticket management

| Action              | What it does                                                                        | When to use                                                                                    |
| ------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Create Ticket       | Creates a new ticket in any workspace you have access to                            | Follow-up tickets, splitting requests, ticket generation from events, cross-workspace handoffs |
| Update Ticket       | Modifies ticket properties including requester and parent ticket                    | Adding context, changing fields, setting parent-child relationships                            |
| Set Status          | Changes ticket status                                                               | Auto-resolution, stage progression                                                             |
| Set Priority        | Changes ticket priority                                                             | Auto-escalation, SLA-based priority adjustment                                                 |
| Add Assignee        | Assigns users or groups                                                             | Routing, load balancing with Round Robin                                                       |
| Add Followers       | Adds followers to ticket                                                            | Stakeholder notification, cross-team visibility                                                |
| Add Approvers       | Creates an [approval round](/documentation/tickets/approvals/rounds) with approvers | Approval flow setup                                                                            |
| Add Tags            | Adds tags to ticket                                                                 | Categorization, processing markers                                                             |
| Move Ticket         | Moves ticket between workspaces or channels                                         | Cross-team transfers, department escalation                                                    |
| Share Ticket        | Shares ticket to a queue in another workspace                                       | Cross-team visibility, collaborative resolution                                                |
| Send Message        | Sends a message on ticket                                                           | Status updates, requesting information                                                         |
| Link Ticket         | Attaches external URL to ticket                                                     | Linking Jira/Linear issues, audit trails                                                       |
| Publish Ticket      | Publishes a newly created ticket                                                    | Controlling notification timing, multi-step ticket setup                                       |
| Apply Task Template | Applies a task template to a ticket                                                 | Onboarding checklists, standard operating procedures                                           |
| Search Tickets      | Finds tickets matching criteria                                                     | Duplicate detection, related ticket lookup, bulk operations                                    |
| Search Users        | Finds users matching filter criteria                                                | Dynamic recipient lists, group member lookup, attribute-based routing                          |
| Send CSAT           | Sends satisfaction survey                                                           | Post-resolution feedback collection                                                            |

### Wait and monitoring

| Action                 | What it does                                  | When to use                                               |
| ---------------------- | --------------------------------------------- | --------------------------------------------------------- |
| Wait                   | Pauses for a duration                         | Delays between actions, timed follow-ups                  |
| Wait Until             | Pauses until a specific date and time         | Calendar-based deadlines, date-driven actions             |
| Wait for Approval      | Pauses until approved, declined, or timed out | Approval gates with timeout fallback for stalled requests |
| Wait for Message       | Pauses until a message is received            | Waiting for user input or confirmation                    |
| Wait for Inactivity    | Pauses until ticket is inactive               | Auto-resolution after no activity                         |
| Monitor Ticket         | Watches for conditions                        | Waiting for specific ticket state changes                 |
| Check for New Messages | Checks for recent messages                    | Detecting responses in polling-style workflows            |

### Control flow

| Action      | What it does                  | When to use                                                     |
| ----------- | ----------------------------- | --------------------------------------------------------------- |
| Conditional | Evaluates expressions         | Branching based on data values                                  |
| If / Else   | Binary branching              | Simple true/false path selection                                |
| Goto        | Jumps to another step         | Retry patterns, skipping steps                                  |
| Loop        | Iterates through a collection | Processing search results, bulk notifications, batch operations |

### AI actions

| Action            | What it does                     | When to use                                               |
| ----------------- | -------------------------------- | --------------------------------------------------------- |
| Summarize Ticket  | Generates a conversation summary | Handoff summaries, executive briefings                    |
| AI Decision Maker | AI-powered branching             | Content analysis, sentiment-based routing, complex triage |
| Custom Prompt     | Runs custom AI reasoning         | Data extraction, response drafting, dynamic analysis      |

### Messaging

| Action     | What it does                   | When to use                                               |
| ---------- | ------------------------------ | --------------------------------------------------------- |
| Send Email | Sends email to specified users | External stakeholder notifications, formal communications |

### Tools

| Action       | What it does                                                                                                                                                                                                                                | When to use                                                                      |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| HTTP Request | Calls external APIs with configurable URL, method, headers, query params, JSON body, timeout, and auth (None, API Key, Bearer, Basic). Auth fields support vault-stored credentials. Returns isSuccess, Response.Body, Response.StatusCode. | Custom integrations without native actions, external API calls, webhook triggers |

***

## Action selection tips

* **Add Assignee supports Round Robin.** When assigning from a group, Round Robin distributes evenly across members. Use "All" when every member of the group should be assigned.
* **Round Robin rotates per step, not per workflow.** Each Add Assignee step has its own rotation counter. A workflow with two Round Robin Add Assignee steps maintains two independent rotations, even when both reference the same group.
* **Add Approvers + Wait for Approval work together.** Add Approvers creates an [approval round](/documentation/tickets/approvals/rounds) with the selected approvers. Wait for Approval pauses execution until the round completes. The wait step honors the assignment strategy: All means any one approver can respond, Round Robin means the specific assigned approver must respond.
* **Wait for Approval with Auto strategy** approves immediately (system bot). Use this for workflows where approval is conditional and only required in some branches.
* **Wait for Approval has a configurable timeout.** Default is 3 days. The step branches into On Approved, On Declined, and On Timeout. Always design the On Timeout path (escalation, auto-close, or notify) so stalled approvals do not leave the workflow stuck.
* **Wait for Message filters by author and source.** You can specify which users' messages resume the workflow and which channels (Web, Email, Slack) count. Workflow-generated and AI-generated messages are automatically excluded.
* **Wait for Message has a configurable timeout.** Default is 3 days. Always plan for both success and timeout paths.
* **Prefer native integration actions over HTTP Request.** Native actions (Jira, Okta, Linear, etc.) handle auth, error handling, and output parsing. Use HTTP Request only when no native action exists.
* **AI Decision Maker is for judgment calls, not data checks.** Use Conditional or If/Else for checking field values. Use AI Decision Maker when the decision requires interpreting content, sentiment, or context.
* **Custom Prompt is versatile.** Use it to extract structured data from unstructured text, draft responses, analyze sentiment, or generate dynamic content. Its output can drive downstream conditional logic.
* **Link Ticket creates bidirectional traceability.** After creating an external issue (Jira, Linear), use Link Ticket to attach the URL back to the Ravenna ticket. This makes it easy to navigate between systems.
* **Goto enables retry patterns.** Use Goto with a conditional to create retry loops (e.g., check condition, then if not met: wait, then goto the check step again). Be cautious of infinite loops.
* **Loop + Search Tickets work together.** Use Search Tickets to find a set of matching tickets, then Loop to process each result (send notifications, update fields, etc.).
* **Search Users feeds downstream people steps.** Pipe the `userIds` output into Add Assignee, Add Followers, Add Approvers, or Send Email to build dynamic recipient lists. Combine with Loop to act on each user individually.
* **Wait vs Wait Until.** Wait pauses for a relative duration ("2 hours"). Wait Until pauses until an absolute date and time. Use Wait Until when the timing depends on a date from ticket data (e.g., a start date form field).
* **Apply Task Template attaches structured checklists.** Combine with the Task Completed trigger on a separate workflow to create handoff chains between task assignees.
* **Send Email for external stakeholders.** Use Send Email when recipients are outside Slack or need formal email communications. For internal team notifications, prefer Slack messages.

***

## Data flow between steps

Every trigger and action produces output data that downstream steps can reference.

* **Trigger data** includes the full event context: ticket properties, requester info, custom field values, timestamps, and event-specific data (e.g., which tags changed, which task completed).
* **Action output** varies by action type: created ticket IDs, API response data, success/failure indicators, AI-generated text.
* **Scope:** A step can reference data from any step that is a direct ancestor in the workflow graph. Steps in parallel branches cannot reference each other's data.
* **Converging steps** have access to data from all completed parent branches.

***

## Constraints

* **Trigger filters use AND logic.** All filter conditions must be true. For OR logic, create separate workflows.
* **One trigger per workflow.** You cannot have multiple triggers on a single workflow.
* **Assignment strategies are set per action.** Add Assignee and Add Approvers each independently support All or Round Robin. Round Robin rotation state is also tracked per Add Assignee step, so multiple Add Assignee steps in the same workflow do not share a rotation counter.
* **Wait for Approval inherits the strategy** from the preceding Add Approvers action.
* **Wait for Message excludes automated messages.** Workflow-generated and AI-generated messages do not count as matching messages.
