Error handling and debugging triggered actions and webhooks

How retries work and how to view webhook and triggered action logs.

Overview

Triggered actions and webhooks are retried if they fail to successfully execute their action. This could be the result of timing out or receiving an explicit error.

You can retrieve the logs of webhook and triggered action executions from the Skedulo API. Webhooks and triggered actions appear in the same log.

Retries

HTTP request timeouts

If no response is received within 25 seconds of sending an HTTP request, then it will be considered timed-out and retried according to the approximate values in the table below, up to a total of six tries.

Unsuccessful HTTP requests

Similarly, if the response does not have a success status code (2XX), then the request will be retried according to the approximate values in the table below.

HTTP requests are tried up to six times in total.

Unsuccessful triggered actions

Triggered actions that send an SMS (see the triggered actions section for information on action types) are tried up to five times in total.

Retry intervals

The intervals between retries increase in duration incrementally. The approximate values are as follows:

Retry number HTTP - time elapsed before retry send_sms - time elapsed before retry
1 5 seconds 5 seconds
2 30 seconds 30 seconds
3 5 minutes 5 minutes
4 30 minutes 15 minutes
5 3 hours N/A

Debug webhooks and triggered actions

Various filters can be used to find logs you are interested in, including sourceId to match on the ID of the configured webhook or triggered action, and isWebhook to show only webhooks or only triggered actions. For more information, see the Skedulo API reference documentation.

Note that the logs include intermediate stages within the execution lifecycle of the underlying triggered action. For example, a deferred webhook may produce three logs: one for creating a scheduled task, one for a fetch_object trigger, and another for the call_url action.

Example log

This is the log for a call_url triggered action, which shows the URL called, the data sent, the result of the call and the overall result of the operation.

{
  "id": 122886092,
  "tenantId": "00D1I000001WMhdUAG",
  "sourceId": "41dc51a3-3701-4883-927f-7fa9efba882b",
  "created": "2023-07-11T01:10:53.469833Z",
  "data": {
    "url": "https://a250-44-239-236-138.ngrok.io",
    "body": {
      "data": {
        "jobs": {
          "End": "2023-07-11T02:11:43.000Z",
          "UID": "a0E8W00000cbnK8UAI",
          "Name": "JOB-11824249",
          "Start": "2023-07-11T01:11:43.000Z",
          "Duration": 60,
          "CreatedDate": "2023-07-11T01:10:44.000Z",
          "Description": null,
          "JobAllocations": []
        }
      }
    },
    "headers": {},
    "action_type": "call_url"
  },
  "retry": 1,
  "referenceId": 122886087,
  "started": "2023-07-11T01:10:53.481882Z",
  "completed": "2023-07-11T01:10:54.006354Z",
  "result": {
    "type": "http_response",
    "status": 200,
    "headers": {
      "Date": "Tue, 11 Jul 2023 01:10:53 GMT",
      "Content-Type": "text/plain",
      "Content-Length": "23",
      "Ngrok-Trace-Id": "70fe364efacb8664ed79f78c88e9efe3",
      "Ngrok-Agent-Ips": "44.239.236.138"
    }
  },
"attempts": [
				{
					"attempted": "2023-07-11T01:10:48.381321Z",
					"error": {
						"type": "http_response",
						"status": 502,
						"headers": {
							"Date": "Tue, 11 Jul 2023 01:10:48 GMT",
							"Content-Type": "text/html",
							"Content-Length": "39041",
							"Ngrok-Trace-Id": "03cae0dd43e1423eaaac5c96b4e82de0"
						}
					}
				}
			],
  "status": "success"
}