volanea_create_workflow
Create an event-triggered automation workflow from a node/edge graph. Created as a DRAFT — verify it with volanea_test_workflow, then activate explicitly via volanea_update_workflow { status: 'active' }. Idempotent by name. Triggers: "event:" (a product event sent to POST /v1/events or the volanea_track_event tool), "contact.created", "segment:enter:", "segment:exit:".
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Workflow name. Acts as the idempotency key. | |
| graph | Yes | Automation graph. Exactly one `trigger` node is the entry point; edges connect node ids. Node types and their `config`: - trigger: entry node, no config. - send_email: { templateId? } and/or { subject?, body? (HTML), fromEmail?, fromName? } — template fields fill anything omitted. - delay: { minutes?, hours?, days? } (defaults to 1 minute if all omitted). - wait_event: { event: "<eventName>", timeoutHours? (default 72) }. The unlabeled outgoing edge fires when the event arrives; an edge labeled "timeout" is taken on timeout. - condition: { conditions: <same condition tree as segments> }. Outgoing edges must be labeled "yes" and "no". - update_contact: { set: { <customField>: value, ... }, subscribed? }. - webhook: { url, payload? } — POSTs workflow/contact context to your URL (5s timeout). - exit: ends the walk. `x`/`y` are canvas coordinates for the dashboard editor — space nodes out (e.g. x = index * 260, y = 80). | |
| reentry | No | Whether a contact can re-enter: never, after finishing a previous walk (default), or always. | |
| trigger | Yes | e.g. "event:user.signed_up" or "contact.created". |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Machine-readable failure code to branch on. Present only when success is false. | |
| data | No | Present when success is true. | |
| error | No | Human-readable failure reason. Present only when success is false. | |
| success | Yes | False when the call failed; read `error` and `code` in that case. |