Documentation

Actions reference

Every action a workflow step can run — data writes, notifications, calls, webhooks, waits.

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

FieldTypeDescription
create_datarepository write

Insert a record into any collection. Config: datatype, data (object — {{...}} placeholders resolved against context). Requires permission automation:create_data.

update_datarepository write

Update by recordId (or by query). Config: datatype, recordId, updates. Supports partial updates via dot-paths.

delete_datarepository write

Delete by recordId. Soft delete by default; pass hardDelete: true to purge.

{
  "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

FieldTypeDescription
send_notificationmulti-channel send

Email, SMS, WhatsApp, push, or in-app — delegates to CreateNotificationHandler in the Sync module. Config: deliveryType (email | sms | whatsapp | push | inapp), to, subject, templateId or body. Required permission: automation:send_notification.

make_callphone action

Place an outbound call via the Phone module. Config: callerId, script (TTS), voicemail, transferTo, recordCall, maxDuration (seconds). Reads contact phone from context.variables.contact.phone.

schedule_callphone action

Queue a call for a future time. Config: scheduledFor, plus the same fields as make_call.

send_webhookHTTP

POST/GET/PUT/etc to an external URL. Config: url, method, headers, body, authentication (none | basic | bearer | apikey), authCredentials, retries. Body supports {{...}} placeholders.

{
  "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

FieldTypeDescription
add_tagCRM mutation

Add tags to a contact. Config: tags (array), contactId (defaults to context.variables.contact.id).

remove_tagCRM mutation

Remove tags. Same shape as add_tag.

create_taskCRM record

Create a task on a contact, lead, or opportunity. Config: subject, dueDate, assignedTo, relatedTo ({type, id}).

create_noteCRM record

Attach a note to a record. Config: body, relatedTo.

create_leadCRM lead

Create a lead. Specialized lead action: maps contact data, sets score if provided.

update_leadCRM lead

Update lead data and trigger score recalculation.

qualify_leadCRM lead

Mark lead qualified. Optional notes.

disqualify_leadCRM lead

Mark lead disqualified. Optional reason.

convert_leadCRM lead

Convert to customer. Config: customerId, conversionValue.

create_opportunityCRM record

Create an opportunity tied to a contact and pipeline. Config: name, value, pipelineId, stageName, closeDate.

move_pipeline_stageCRM mutation

Move an opportunity between stages. Config: opportunityId, pipelineId, stageName, reason, updateValue, newValue. Requires opportunity:update.

Ticket and reservation actions

FieldTypeDescription
create_ticketsupport

Create a support ticket. Config: subject, description, priority, requesterId.

update_ticketsupport

Update status, assignee, or priority.

create_reservationevent/booking

Create a reservation against a calendar resource.

update_reservationevent/booking

Reschedule or change attendees.

cancel_reservationevent/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.

FieldTypeDescription
delaytime pause

Pause for duration unit (minutes | hours | days | weeks). Config: duration, unit, skipWeekends, timezone.

wait_until_datetime pause

Pause until an absolute timestamp. Config: until (ISO date), timezone.

wait_until_conditioncondition pause

Re-evaluate a condition on a schedule until it passes or maxWait elapses. Config: condition, checkInterval (minutes), maxWait (minutes).

wait_for_replyevent pause

Wait for an inbound message from the contact (email, SMS, chat). Config: channels, timeout.

wait_for_behaviorevent pause

Wait for a behavior signal (page visit, link click). Config: behaviorType, timeout.

{
  "id": "wait-day",
  "type": "action",
  "config": {
    "actionType": "delay",
    "duration": 1,
    "unit": "days",
    "skipWeekends": true,
    "timezone": "America/New_York"
  }
}

Flow control

FieldTypeDescription
end_flowterminator

Stop the workflow. Config: reason (recorded in execution logs).

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.

FieldTypeDescription
ivr_speakIVR

Read text via Twilio TTS. Config: text, voice, language.

ivr_collect_inputIVR

Gather DTMF or speech. Config: prompt, numDigits, timeout, finishOnKey.

ivr_menuIVR

Multi-option menu. Config: prompt, options: [{key, action}].

ivr_transferIVR

Connect to another number or SIP endpoint.

ivr_recordIVR

Record the caller. Config: maxLength, playBeep, transcribe.

ivr_voicemailIVR

Play voicemail prompt and record.

ivr_play_audioIVR

Play a pre-recorded audio URL.

ivr_send_smsIVR

Send an SMS during the call (e.g. confirmation link).

ivr_send_emailIVR

Send an email during the call.

ivr_twilio_payIVR

Run Twilio <Pay> for PCI-DSS-compliant card capture.

ivr_ai_assistantIVR

Hand the call to the AI voice assistant.

ivr_hangupIVR

End the call.

ivr_forwardIVR

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.