Escalation Policy Updates
Syncing escalation policy levels from external systems into ilert via MQTT or Kafka.
ilagent can listen for messages on a dedicated topic and automatically update escalation policy levels in ilert. This is useful for syncing on-call schedules from external systems (e.g. workforce management tools) into ilert.
How it works
A policy update message contains an email address, a shift (escalation level), and one or more routing key fields that identify which escalation policy to update. ilagent:
Resolves the user by email
Resolves the escalation policy by routing key
Updates the corresponding escalation level with the resolved user
The target escalation level must already exist on the policy — ilagent updates the level in place but does not create new levels. The existing escalationTimeout of the level is preserved; only the assigned user is replaced.
Payload format
Policy payloads can have any JSON structure — ilagent extracts the relevant fields based on your configuration flags (--policy_routing_keys, --map_key_email, --map_key_shift, --filter_key). Here is an example of a typical payload:
{
"location": "powerplant",
"eventType": "active",
"data": {
"email": "[email protected]",
"shift": "1"
}
}In this example, location is used as a routing key, data.email and data.shift are the default paths for email and shift, and eventType is used for filtering. All of these paths are configurable.
The shift field can be a string ("1") or a number (1) — both are supported.
Configuration
--policy_topic
Consumer topic to listen on for policy update messages
(disabled)
--policy_routing_keys
Comma-separated JSON field names to extract routing key values from
(required)
--map_key_email
JSON path for the email field (dot-notation for nested)
data.email
--map_key_shift
JSON path for the shift field (dot-notation for nested)
data.shift
--shift_offset
Offset applied to the shift value (e.g. --shift_offset=-1 to convert 1-indexed to 0-indexed)
0
The --filter_key and --filter_val flags also apply to policy messages, allowing you to selectively process messages based on a field value.
Shift offset
If your external system uses 1-indexed shift values but the ilert API expects 0-indexed levels, use --shift_offset=-1 (the = is required to avoid -1 being parsed as a separate CLI flag). The result is clamped to 0, so it will never go negative.
MQTT example
When using --mqtt_buffer, all MQTT messages (including policy updates and events) are queued in SQLite and retried with exponential backoff (up to 60 seconds). Combined with --mqtt_qos 1, this provides at-least-once delivery guarantees.
See MQTT Consumer for details on QoS and buffering options.
Kafka example
In Kafka mode, the consumer offset is only committed after successful processing — failed policy updates will be redelivered automatically. The --mqtt_buffer and --mqtt_qos flags have no effect in Kafka mode.
Last updated
Was this helpful?