Endpoint Trigger

The Endpoint Trigger fires a workflow when the selected Experience Endpoint receives an HTTP request - or when any endpoint request is received at a domain tied to the selected Experience Version.

Endpoint Trigger

Node Properties

The configuration for the Endpoint Trigger varies slightly depending on the type of workflow in which the trigger is used.

Experience Workflows

In Experience Workflows, first choose the circumstances under which this trigger should fire. Two options are available …

Requests to a specific endpoint

For most uses of the trigger, this is the preferred option as it allows for processing data in expected formats and issuing replies to the requests. When selected, you must provide an Endpoint Method / Route, which is the Experience Endpoint whose received requests should fire the trigger.

The trigger will only fire on a request to an endpoint in the same Experience Version as the workflow. This means that a request to your ‘develop’ domain’s POST /login endpoint will only fire the develop version of the workflow, not an experience version that also contains a POST /login endpoint and a workflow version containing this trigger.

In the above example, the workflow will be triggered whenever the “POST /login” endpoint receives a request.

Requests to any endpoint in this version

This option is most useful for logging user activity in a third-party system such as Loggly or Google BigQuery. While it is possible to reply to requests when selecting this option, doing so is strongly discouraged as it likely introduces race conditions and undesired behavior for end users (as other Endpoint Triggers targeting the specific endpoint requested will still fire and may reply first).

Application Workflows

The configuration for the Endpoint Trigger for Application Workflows is slightly more complicated.

Requests to a specific endpoint

This option is similar to the “specific endpoint” option in Experience Workflows; however, you must also choose a specific Experience Version to go along with choosing one of the selected version’s Experience Endpoints. The default version is develop.

Requests to any endpoint in a specific version

This option is similar to the “any endpoint in this version” option in Experience Workflows, except you must choose an Experience Version whose endpoint requests the trigger should target. The default is develop.

Requests to any endpoint in any version

As the name implies, this option fires the trigger on requests to any endpoint in any version.

Payload

The payload for a workflow triggered by an endpoint will include all of the information about the triggering request in the data field. This includes the request path, the request method, any request headers, any request query parameters, any parsed path parameters (based off the route definition for the endpoint), any cookies, and the request body. If there is no body present, the value for the body field will be null. Otherwise, if the content type is multipart/form-data, application/x-www-form-urlencoded, or application/json and the request body is valid for that content type, it will automatically be parsed into an object. For other content types, such as text/plain, the body will be left as a string.

The payload also contains an experience field, which contains four properties:

  • endpoint: Always the Experience Endpoint that received the request.
  • user: Either the Experience User making the request or null if it was a public unauthenticated request.
  • version: Contains the name of the Experience Version for the request.
  • authInfo: Contains data about the token. If the endpoint did not receive a token this field will be null. The authInfo field contains three fields:

In the general case, an Endpoint Trigger workflow payload will look like the following:

{
  "applicationId": "555555555555eeeeeeeeeeee",
  "applicationName": "My Great Application",
  "data": {
    "body": {
      "age": "42",
      "name": "Jane"
    },
    "cookies": {},
    "headers": {
      "accept": "*/*",
      "content-length": "237",
      "content-type": "multipart/form-data",
      "user-agent": "curl/7.77.0",
      "x-forwarded-for": "<source IP address>",
      "x-forwarded-proto": "https",
      "x-real-ip": "<source IP address>"
    },
    "method": "get",
    "path": "/transition/up",
    "params": {
      "deviceId": "624335dd83a187df4e03c95e"
    },
    "query": {
      "location": "52"
    },
    "replyId": "<ID of Endpoint>.<Unique request ID>"
  },
  "experience": {
    "authInfo": {
      "issuedAt": "<if a token was given this is the generation date>",
      "expiresAt": "<if a token was given this is the expiration date>",
      "extraData": "<if a token was given this is the extra data on the token>"
    },
    "endpoint": {
      "access": "public",
      "applicationId": "<application ID>",
      "createdById": "<ID of resource that created the endpoint>",
      "createdByType": "user",
      "creationDate": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "enabled": true,
      "endpointTags": "<object of endpoint tags>",
      "experienceEndpointId": "<ID of the endpoint>",
      "experienceGroups": "<array of groups who have access to this endpoint>",
      "id": "<ID of the endpoint trigger>",
      "lastUpdated": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "lastUpdatedById": "<ID of resource that last updated this endpoint>",
      "lastUpdatedByType": "user",
      "method": "get",
      "route": "/transition/up",
      "version": "develop"
    },
    "user": {
      "applicationId": "<ID of the application>",
      "avatarUrl": null,
      "creationDate": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "email": "kanarra@example.com",
      "experienceGroups": [
        {
          "id": "<ID of the Experience Group>",
          "name": "<Name of the Experience Group>",
          "parentId": "<ID of the parent group, null if there is no parent>"
        }
      ],
      "experienceUserId": "<ID of the Experience User>",
      "id": "<ID of the Experience User>",
      "lastLogin": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "lastUpdated": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "passwordLastUpdated": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
      "userTags": {
        "adminRights": true
      }
    },
    "version": "<the experience version for the request>"
  },
  "flowId": "333333333333cccccccccccc",
  "flowName": "My Great Workflow",
  "flowVersion": "myFlowVersion",
  "globals": {
    "aJsonGlobal": {
      "key": "value"
    },
    "aNumberGlobal": 42,
    "aStringGlobal": "My value"
  },
  "relayId": "000000000000000000000000",
  "relayType": "public",
  "time": Fri Feb 19 2016 17:26:00 GMT-0500 (EST),
  "triggerId": "<ID of endpoint>",
  "triggerType": "endpoint"
}

Notes on “Any Endpoint” Triggers

In addition to firing on endpoint requests that successfully resolve, triggers configured to fire on any endpoint request will also fire for the following scenarios:

  • Requests that do not resolve against any configured endpoint (i.e. automatic 404 Not Found responses).
  • Unauthorized requests (i.e. automatic 401 Unauthorized and 403 Forbidden responses).

The trigger will not fire for the following scenarios:

  • Automatic 429 Too Many Requests responses.
  • 400 Bad Request responses - i.e. from requests over invalid protocols.
  • 413 Payload Too Large responses.
  • Replies to OPTIONS requests when the experience version is configured to automatically handle CORS requests.

Was this page helpful?


Still looking for help? You can also search the Losant Forums or submit your question there.