Message Payload Content - Triggers and Actions

You can configure Triggers and Actions on your Object Types to pass a Record (an instance of the data) along to an Agent for processing.

  • Triggers - These are configured on Object Types and pass a new (post insert), updated (post-update) or deleted (post-delete) record along to the designated Agent for processing.

  • Actions - These can be manually run or triggered via API. To run an Action manually you configure the Action on the Object Type and then execute it in the overflow menu for the record itself.

Note that the format of a Trigger payload for a Record is slightly different than that for an Action.

On a Trigger the record is passed and directly available on msg.payload.

On an Action it will be under an instance property, so msg.event.instance.

For all of the examples below, we will use the following sample weather-report record:

{
    "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
    "datetime": "2024-09-19T12:13:11.435Z",
    "temperature": 25,
    "stationId": "JEFF"
}

Post-Insert Trigger Payload

A post-insert trigger payload delivered to an Event processing agent (flow) sets both msg.payload and msg.event to the same initial value

Shown below is the msg object with the properties received as a result of a Post-Insert trigger. Note that payload shows "circular" because it is the same as msg.event.

{
    "event": {
        "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
        "datetime": "2024-09-19T12:13:11.435Z",
        "temperature": 25,
        "stationId": "JEFF",
        "_metaData": {
            "createdAt": "2024-09-19T12:13:11.452Z",
            "hash":"a403d153ed381c1d05c191a8f0e8d1376e59037f5f73ae87d2e1b3214a9cf1be",
            "schema":"native-object:weather-report",
            "type":"custom",
            "updatedAt":"2024-09-19T12:13:11.452Z",
            "secrets":[]
        },
    },
    "payload": (circular),
    "topic": "persistent://project1/default/weather-monitor",
    "headers":{7 items
        "x-kind": ["trigger"]
        "x-log-correlation-id":["mhwRK4sMendQZtykKeEbJu"]
        "x-name":["Send New Weather Report"],
        "x-request-id":["pjqBvhPBMus1ttNJUiwEWK"],
        "x-subkind":["post-insert"],
        "x-type-id":["weather-report"],
        "x-uri":["native-object:weather-report/1LsZi8fwSWZsnx8LZ5Hsx5"]
    }
    "scriptUri":string"native-object:flow/weather-monitor#2"
}

In addition, note the various metaData, topic, and headers that provide additional context about the event being received, including the name of the object-type in the "x-type-id" header and the "x-kind" header which indicates that it was a "trigger" that sent the event. Finally the "x-subkind" header documents that it was a "post-insert" trigger.

Post-Update Trigger Payload

The msg object received by a post-update trigger has a different structure because it carries with it both the "old" and the "new" version of the record, as shown below:

{
    "event": {
        "new": {
            "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
            "datetime": "2024-09-19T15:15:15.350Z",
            "temperature": 27,
            "stationId": "JEFF",
            "_metaData": {
                "createdAt": "2024-09-19T12:13:11.452Z",
                "hash":"a403d153ed381c1d05c191a8f0e8d1376e59037f5f73ae87d2e1b3214a9cf1be",
                "schema":"native-object:weather-report",
                "type":"custom",
                "updatedAt":"2024-09-19T15:15:15.350Z",
                "secrets":[]
            },
        }
        "old": {
            "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
            "datetime": "2024-09-19T12:13:11.435Z",
            "temperature": 25,
            "stationId": "JEFF",
            "_metaData": {
                "createdAt": "2024-09-19T12:13:11.452Z",
                "hash":"a403d153ed381c1d05c191a8f0e8d1376e59037f5f73ae87d2e1b3214a9cf1be",
                "schema":"native-object:weather-report",
                "type":"custom",
                "updatedAt":"2024-09-19T12:13:11.452Z",
                "secrets":[]
            },
        }
    },
    "payload": (circular),
    "topic": "persistent://project1/default/weather-monitor",
    "headers":{7 items
        "x-kind": ["trigger"]
        "x-log-correlation-id":["mhwRK4sMendQZtykKeEbJu"]
        "x-name":["Send Updated Weather Report"],
        "x-request-id":["pjqBvhPBMus1ttNJUiwEWK"],
        "x-subkind":["post-update"],
        "x-type-id":["weather-report"],
        "x-uri":["native-object:weather-report/1LsZi8fwSWZsnx8LZ5Hsx5"]
    }
    "scriptUri":string"native-object:flow/weather-monitor#2"
}

Post-Delete Trigger Payload

The post-delete trigger payload looks basically the same as the post-insert with the exception of the headers:

{
    "event": {
        "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
        "datetime": "2024-09-19T12:13:11.435Z",
        "temperature": 25,
        "stationId": "JEFF",
        "_metaData": {
            "createdAt": "2024-09-19T12:13:11.452Z",
            "hash":"a403d153ed381c1d05c191a8f0e8d1376e59037f5f73ae87d2e1b3214a9cf1be",
            "schema":"native-object:weather-report",
            "type":"custom",
            "updatedAt":"2024-09-19T12:13:11.452Z",
            "secrets":[]
        },
    },
    "payload": (circular),
    "topic": "persistent://project1/default/weather-monitor",
    "headers":{7 items
        "x-kind": ["trigger"]
        "x-log-correlation-id":["mhwRK4sMendQZtykKeEbJu"]
        "x-name":["Send Deleted Weather Report"],
        "x-request-id":["pjqBvhPBMus1ttNJUiwEWK"],
        "x-subkind":["post-delete"],
        "x-type-id":["weather-report"],
        "x-uri":["native-object:weather-report/1LsZi8fwSWZsnx8LZ5Hsx5"]
    }
    "scriptUri":string"native-object:flow/weather-monitor#2"
}

Action Payload

An action is defined in object-type settings for a specific object-type and allows the user to invoke a specified action on an individual record. The action performs a SentToAgent to a specific agent, and the sample msg contents as shown below.

Note that the actual record contents in the case of action are in event.instance. This is because an action can also send “params” or parameters to the flow and these are passed in event.params.

Since the specific action-name is provided in the x-name header, a single flow/agent can be used to process multiple actions.

{
    "event": {
        "instance": {
            "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
            "datetime": "2024-09-19T12:13:11.435Z",
            "temperature": 25,
            "stationId": "JEFF",
            "_metaData": {
                "createdAt": "2024-09-19T12:13:11.452Z",
                "hash":"a403d153ed381c1d05c191a8f0e8d1376e59037f5f73ae87d2e1b3214a9cf1be",
                "schema":"native-object:weather-report",
                "type":"custom",
                "updatedAt":"2024-09-19T12:13:11.452Z",
                "secrets":[]
            },
        },
        "params: {}
    },
    "payload": (circular),
    "topic": "persistent://project1/default/weather-monitor",
    "headers":{7 items
        "x-kind": ["action"]
        "x-log-correlation-id":["mhwRK4sMendQZtykKeEbJu"]
        "x-name":["action-name"],
        "x-request-id":["pjqBvhPBMus1ttNJUiwEWK"],
        "x-subkind":["9bbc0dea-1a3c-4459-9320-2b55a1a0f142"],
        "x-type-id":["weather-report"],
        "x-uri":["native-object:weather-report/1LsZi8fwSWZsnx8LZ5Hsx5"]
    }
    "scriptUri":string"native-object:flow/weather-monitor#2"
}

SendToAgent Payload

The final use case is that of the event that is received when it is sent by a "SendToAgent" node in a flow.

Shown below is the msg object with the properties received as a result of a SendToAgent node. Note that payload shows "circular" because it is the same as msg.event.

{
    "event": {
        "id": "1LsZi8fwSWZsnx8LZ5Hsx5",
        "datetime": "2024-09-19T12:13:11.435Z",
        "temperature": 25,
        "stationId": "JEFF"
    },
    "payload": (circular),
    "topic": "persistent://project1/default/weather-monitor",
    "headers":{
    }
    "scriptUri":string"native-object:flow/weather-monitor#2"
}

Note that in this case the event/payload that is sent is literally whatever was sent by the sending agent using the SendToAgent node.

In this case there are no headers that are sent. This could change in the future.

Last updated