Action Engine
The Action Engine provides configurable business processes — actions with form fields, pipelines with stages, task lists, and engagement tracking. Think of it as a workflow builder for structured operations that agents can execute step by step.
How It Works
| Component | Purpose |
|---|---|
| Action | Reusable process definition with configurable form fields |
| CompanyAction | Company-specific customization of an action |
| Engagement | An execution of an action against a lead or person |
| TaskList | Checklist of items to complete |
| Pipeline | Stages for tracking action progress |
Company Actions
| Field | Type | Description |
|---|---|---|
| id | ID! | Unique identifier |
| name | String! | Action name |
| description | String | What this action does |
| is_active | Boolean | Whether it's enabled |
| is_published | Boolean | Whether it's visible |
| weight | Int | Sort order |
| action | Action | Parent action definition with form_fields and form_config |
| pipeline | ActionPipeline | Associated pipeline |
| files | [Filesystem!] | Attached files |
| custom_fields | [CustomField!] | Custom data |
# List company actions
query {
companyActions(first: 20) {
data {
id name description is_active weight
action { name slug form_fields form_config }
pipeline { name stages { name weight } }
}
}
}Engagements
An engagement tracks the execution of an action against a lead.
# Start an engagement
mutation {
startLeadEngagement(input: {
lead_id: 1
company_action_id: 1
message: "Starting onboarding process"
}) {
id uuid slug
lead { title }
company_action { name }
user { displayname }
}
}
# Continue an engagement
mutation {
continueLeadEngagement(input: {
engagement_id: 1
message: "Step 2 completed"
}) {
id message
}
}Task Lists
# List tasks
query {
taskLists(first: 20) {
data {
id name
tasks { id name status due_date completed_date weight }
}
}
}
# Update task status
mutation {
changeTaskEngagementItemStatus(id: 1, status: "completed") {
id status completed_date
}
}Action Pipelines
query {
actionPipelines(first: 20) {
data {
id name slug is_default
stages { id name weight has_rotting_days rotting_days }
}
}
}