Event and Notification Filtering
Bitcaster provides a powerful filtering engine that allows you to control exactly when a notification should be sent based on the data received during an event trigger.
Filtering is defined using JMESPath syntax, which can be applied directly as a string or wrapped in structured YAML blocks for complex logic.
Simple Filtering (JMESPath)
The most common way to filter is by providing a JMESPath expression in the Payload Filter field of a Notification.
Basic Examples
| Goal | Filter Expression |
|---|---|
| Match a string | country == 'italy' |
| Match a number | office == 22 |
| Check nested data | server.status == 'down' |
| Check if field exists | attribute_not_null(urgent) |
Note on Numbers: In JMESPath, literal numbers must be enclosed in backticks (e.g.,
`22`) to be treated as integers rather than strings.
Complex Logic (Structured YAML)
When you need to combine multiple conditions, you can use a structured YAML syntax. Bitcaster supports AND, OR, and NOT operators.
AND Operator
All conditions must be true.
AND:
- country == 'italy'
- area == 'europe'
OR Operator
At least one condition must be true.
OR:
- country == 'italy'
- office == 22
Nested Logic
You can nest these operators to create highly specific rules.
Goal: Notify if (Country is Italy AND Region is Lazio) OR if the Office ID is 22.
OR:
- AND:
- area == 'europe'
- country == 'italy'
- office == 22
How it works with the API
When you trigger an event via the API, the filtering engine evaluates your rules against the context object provided in the request.
Example Request
{
"context": {
"area": "europe",
"country": "italy",
"office": 10,
"message": "High temperature alert"
}
}
If a notification has the filter country == 'italy' && area == 'europe', it will be processed because both conditions match the context.
Testing your Filters
It is recommended to test your JMESPath expressions using the JMESPath Tutorial ⧉ or online testers before deploying them to production.
Common pitfalls to watch out for:
* Case Sensitivity: 'italy' is different from 'Italy'.
* Quotes: Use single quotes ' for strings.
* Backticks: Use backticks ` for numbers, booleans (true/false), and nulls.