Workflow triggers
data.config.triggerType of the trigger node. The trigger decides when the workflow runs and what the payload contains.
inbound_message
Runs for every message received on your inboxes (SMS, WhatsApp, virtual numbers).
{ "id": "trigger", "type": "triggerNode",
"data": { "config": { "triggerType": "inbound_message", "inboxId": 0 } } }
| Key | Values | Description |
|---|---|---|
inboxId | integer, default 0 | 0 = every inbox of your account, otherwise the numeric ID of one inbox. |
delivery_report
Runs when a delivery report arrives for a message you sent.
{ "id": "trigger", "type": "triggerNode",
"data": { "config": { "triggerType": "delivery_report", "deliveryStatus": "failed" } } }
| Key | Values | Description |
|---|---|---|
deliveryStatus | all (default) / sent / delivered / failed / undelivered / rejected / buffered | Only run for this status. |
cron
Runs on a schedule. Pick a scheduleMode and fill in the fields that apply; for anything else use custom with a cron expression. The payload is empty until a get_contact action loads a contact.
{ "id": "trigger", "type": "triggerNode",
"data": { "config": { "triggerType": "cron", "scheduleMode": "days", "intervalValue": 1, "hour": 9, "minute": 0, "timezone": "Europe/Brussels" } } }
{ "id": "trigger", "type": "triggerNode",
"data": { "config": { "triggerType": "cron", "scheduleMode": "custom", "expression": "0 9 * * 1-5", "timezone": "Europe/Brussels" } } }
| Key | Values | Description |
|---|---|---|
scheduleMode | seconds / minutes (default) / hours / days / weeks / months / custom | How the schedule is expressed. |
intervalValue | integer, 1 or more | Every N seconds / minutes / hours / days / weeks / months. A seconds schedule needs at least 10 to be published. |
minute, hour | 0-59, 0-23 | Time of day for days, weeks and months. |
dayOfWeek | weekday name, or 0 (sunday) to 6 | For weeks. |
dayOfMonth | 1-31 | For months. |
expression | 5-field cron expression | Required for custom; derived from the fields above otherwise. |
timezone | IANA name, default Europe/Brussels | Time zone of the schedule. |
birthday
Runs once a day for every contact whose birthday it is. The payload contains the contact, including contact.birthday and contact.age.
{ "id": "trigger", "type": "triggerNode",
"data": { "config": { "triggerType": "birthday", "groupId": "gid_3520a1ec234dbabe1232def67e858855", "time": "09:00", "timezone": "Europe/Brussels", "oncePerContact": true } } }
| Key | Values | Description |
|---|---|---|
groupId | gid_..., optional | Only contacts of this group; none = all groups. |
time | HH:MM, default 09:00 | When to run. |
timezone | IANA name, default Europe/Brussels | Time zone of time. |
oncePerContact | boolean, default true | Do not run twice for the same contact on the same day. |
Placeholders and the payload
{{ path }} inside a text field of an action (marked tpl on the Actions page) is replaced by the value at that path in the payload, e.g. {{ contact.firstname }}, {{ message.body }} or {{ contact.extra3 }}; an unknown placeholder is left as it is. What the payload contains depends on the trigger:
| Trigger | Payload |
|---|---|
inbound_message | message.body, message.channel, message.inbox_id, message.length; contact.phone = the sender. The other contact fields stay empty until a contact or get_contact action loads the contact. |
delivery_report | delivery_report.status; message.body, message.channel, message.length; contact.phone. |
birthday | contact.* including birthday (DD/MM) and age. |
cron | Empty until a get_contact action loads a contact. |
| all triggers | execution.run_count. |
Get sample payload returns this structure for the trigger of the workflow, filled with a real contact when you pass contact_id; use it as the body of Test workflow.