Actions perform side effects. Each one is registered in ActionRegistry and exposes a getType() string that maps to step.config.actionType. The runner calls execute(context) and merges the returned data back into context.variables for later steps.
This page lists every action that ships with AppEngine. Specialized lead, ticket, reservation, and IVR actions live in their respective sub-modules.
Data actions
| Field | Type | Description |
|---|---|---|
| create_data | repository write | Insert a record into any collection. Config: |
| update_data | repository write | Update by |
| delete_data | repository write | Delete by |
{
"id": "log-touch",
"type": "action",
"config": {
"actionType": "create_data",
"datatype": "activity",
"data": {
"type": "email_open",
"contactId": "{{contact.id}}",
"campaignId": "{{emailEvent.campaignId}}",
"occurredAt": "{{currentTime}}"
}
}
}
Communication actions
| Field | Type | Description |
|---|---|---|
| send_notification | multi-channel send | Email, SMS, WhatsApp, push, or in-app — delegates to |
| make_call | phone action | Place an outbound call via the Phone module. Config: |
| schedule_call | phone action | Queue a call for a future time. Config: |
| send_webhook | HTTP | POST/GET/PUT/etc to an external URL. Config: |
{
"id": "notify-slack",
"type": "action",
"config": {
"actionType": "send_webhook",
"url": "https://hooks.slack.com/services/...",
"method": "POST",
"headers": { "Content-Type": "application/json" },
"body": { "text": "New high-value lead: {{contact.email}}" },
"retries": 3
}
}
CRM record actions
| Field | Type | Description |
|---|---|---|
| add_tag | CRM mutation | Add tags to a contact. Config: |
| remove_tag | CRM mutation | Remove tags. Same shape as |
| create_task | CRM record | Create a task on a contact, lead, or opportunity. Config: |
| create_note | CRM record | Attach a note to a record. Config: |
| create_lead | CRM lead | Create a lead. Specialized lead action: maps |
| update_lead | CRM lead | Update lead data and trigger score recalculation. |
| qualify_lead | CRM lead | Mark lead qualified. Optional |
| disqualify_lead | CRM lead | Mark lead disqualified. Optional |
| convert_lead | CRM lead | Convert to customer. Config: |
| create_opportunity | CRM record | Create an opportunity tied to a contact and pipeline. Config: |
| move_pipeline_stage | CRM mutation | Move an opportunity between stages. Config: |
Ticket and reservation actions
| Field | Type | Description |
|---|---|---|
| create_ticket | support | Create a support ticket. Config: |
| update_ticket | support | Update status, assignee, or priority. |
| create_reservation | event/booking | Create a reservation against a calendar resource. |
| update_reservation | event/booking | Reschedule or change attendees. |
| cancel_reservation | event/booking | Cancel and optionally refund. |
Wait actions
Wait actions pause the workflow. The runner returns pauseExecution: true, schedules a resume job in the automation queue, and the workflow continues from the next step when the job runs.
| Field | Type | Description |
|---|---|---|
| delay | time pause | Pause for |
| wait_until_date | time pause | Pause until an absolute timestamp. Config: |
| wait_until_condition | condition pause | Re-evaluate a condition on a schedule until it passes or |
| wait_for_reply | event pause | Wait for an inbound message from the contact (email, SMS, chat). Config: |
| wait_for_behavior | event pause | Wait for a behavior signal (page visit, link click). Config: |
{
"id": "wait-day",
"type": "action",
"config": {
"actionType": "delay",
"duration": 1,
"unit": "days",
"skipWeekends": true,
"timezone": "America/New_York"
}
}
Flow control
| Field | Type | Description |
|---|---|---|
| end_flow | terminator | Stop the workflow. Config: |
IVR actions
When the workflow drives a Twilio voice call, IVR-specific actions emit TwiML. Used inside flows triggered by call_incoming. See overview for the IVR architecture.
| Field | Type | Description |
|---|---|---|
| ivr_speak | IVR | Read text via Twilio TTS. Config: |
| ivr_collect_input | IVR | Gather DTMF or speech. Config: |
| ivr_menu | IVR | Multi-option menu. Config: |
| ivr_transfer | IVR | Connect to another number or SIP endpoint. |
| ivr_record | IVR | Record the caller. Config: |
| ivr_voicemail | IVR | Play voicemail prompt and record. |
| ivr_play_audio | IVR | Play a pre-recorded audio URL. |
| ivr_send_sms | IVR | Send an SMS during the call (e.g. confirmation link). |
| ivr_send_email | IVR | Send an email during the call. |
| ivr_twilio_pay | IVR | Run Twilio <Pay> for PCI-DSS-compliant card capture. |
| ivr_ai_assistant | IVR | Hand the call to the AI voice assistant. |
| ivr_hangup | IVR | End the call. |
| ivr_forward | IVR | Forward to a queue. |
Every action result returns {success, error, executionTime, data, nextStepId}. Inspect logs via GET /automation/execution/history?automationId=... to see exactly what each step returned.