Skip to main content

Missed Check-in

The Missed Check-in trigger fires when a device doesn't enter a checkpoint geofence during a scheduled window on a given day. Use it for a daily arrival that should always happen: a driver clocking in at a depot, a guard reaching a checkpoint, a courier picking up from a fixed location.

Internal type string

The API and SDK use trigger_type: "expected_visit" as the internal identifier. Customers see "Missed Check-in" in the Workflow Builder UI and in this documentation; both refer to the same trigger.

What It Does​

The trigger watches one device and one geofence. For each day the window applies, SpatialFlow checks whether the device entered the geofence between the window's start and end, plus a grace period. If no entry was recorded by the deadline, the workflow fires once for that day's window.

This is evidence of absence, not proof: a device that entered but had its location upload delayed past the deadline, or a device that was never tracking, both look identical to a device that genuinely never arrived. The trigger payload says so explicitly in its message field.

When to Use​

  • A route that should start from the same depot every morning
  • A guard patrol with a fixed checkpoint and shift start time
  • A courier or driver who should clock in at a hub before their shift

Configuration​

FieldTypeDefaultDescription
device_idUUID(required)The one device this trigger watches
geofence_idUUID(required)The checkpoint geofence the device must enter
startstring(required)Window start, HH:MM
endstring(required)Window end, HH:MM. A start after the end wraps overnight
daysarray of integersevery dayWeekdays the window applies to, 0 (Monday) through 6 (Sunday)
timezonestringinherits the workspace timezoneAn IANA timezone name. Falls back to UTC if neither is set
grace_minutesinteger15How long past the window's end a late-uploaded location still counts as on time, 0 to 1440

In the builder, this is Window start, Window end, Days the window starts, Timezone, and Late-upload grace (minutes).

Trigger Payload​

{
"event_type": "expected_visit",
"timestamp": "2026-05-20T14:15:00+00:00",
"workspace_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"device_id": "truck-42",
"device_uuid": "d1e2f3a4-5678-90ab-cdef-1234567890ab",
"device_name": "Truck 42",
"geofence_id": "b2c3d4e5-6789-01ab-cdef-1234567890ab",
"geofence_name": "Main Depot",
"window_start": "2026-05-20T13:00:00+00:00",
"window_end": "2026-05-20T14:00:00+00:00",
"deadline": "2026-05-20T14:15:00+00:00",
"timezone": "America/New_York",
"grace_minutes": 15,
"outcome": "no_recorded_check_in",
"message": "No entry event was recorded during the check-in window. This does not prove absence."
}

Template Variables​

VariableResolved Value
{{trigger.event_type}}"expected_visit" (internal type string)
{{trigger.device_id}}External device identifier (customer-assigned)
{{trigger.device_name}}Human-readable device name
{{trigger.geofence_id}}UUID of the checkpoint geofence
{{trigger.geofence_name}}Human-readable geofence name
{{trigger.workspace_id}}UUID of the workspace that owns the device
{{trigger.window_start}}ISO 8601 timestamp of the window's start, in UTC
{{trigger.window_end}}ISO 8601 timestamp of the window's end, in UTC
{{trigger.deadline}}ISO 8601 timestamp of window_end plus grace_minutes
{{trigger.timezone}}The IANA timezone the window was evaluated in
{{trigger.grace_minutes}}The grace period the trigger was configured with (echoed back)
{{trigger.outcome}}Always "no_recorded_check_in" today; the field exists for future outcomes
{{trigger.message}}A human-readable caveat about the evidence

Example Use Case​

Scenario. A courier company wants to know if a driver never picked up from the central hub before 09:00 on a weekday.

Workflow.

  1. Trigger: Missed Check-in on the driver's device and the hub geofence, start: "07:00", end: "09:00", days: [0, 1, 2, 3, 4], grace_minutes: 15.
  2. Action - Slack: Notify #dispatch with the driver name and the window that closed.
  3. Action - Webhook: POST to the routing system so the day's manifest can be reassigned.

Because the window only re-arms the next day it applies to, a driver who genuinely skips one morning doesn't generate repeat alerts until the next scheduled window.

End-to-end runnable guides for routing this trigger to external systems:

See Also​