Trigger filters
Filter-tree syntax for the Tellzm Trigger node.
The Tellzm Trigger node accepts an optional filter tree so a workflow only fires for events that match. Leave blank to receive every event of the chosen type.
Shape
A filter tree is either a single condition or a group:
jsonc
// Single condition (leaf)
{ "field": "status", "op": "eq", "value": "done" }
// AND group
{
"combinator": "AND",
"conditions": [
{ "field": "priority", "op": "in", "value": ["urgent", "high"] },
{ "field": "assignee.id", "op": "eq", "value": "{{ $json.userId }}" }
]
}
// Nested
{
"combinator": "OR",
"conditions": [
{ "field": "status", "op": "eq", "value": "blocked" },
{
"combinator": "AND",
"conditions": [
{ "field": "dueDate", "op": "lt", "value": "{{ $now.toISODate() }}" },
{ "field": "completedAt", "op": "exists", "value": false }
]
}
]
}
Operators
| Op | Means | Value type |
|---|---|---|
eq | equal to | scalar |
neq | not equal | scalar |
in | value is one of the array | array |
nin | value is NOT one of the array | array |
lt / lte | less than (or equal) | number or ISO date |
gt / gte | greater than (or equal) | number or ISO date |
contains | substring match on string | string |
exists | field is present and non-null | boolean — pass true to require, false to forbid |
Combinators
AND— every nested condition must matchOR— at least one nested condition must match
Maximum depth is 8 levels and a group can hold up to 50 conditions.
Available fields
Field names follow the event's payload structure. Common ones:
| Event | Useful fields |
|---|---|
task.* | id, title, status, priority, projectId, assigneeId, tags, dueDate, parentId, createdAt |
project.created | id, name, slug, workspaceId, creatorId, processTemplateId |
form.submitted | formId, submissionId, respondentId, values.<fieldId> |
page.published | pageId, title, workspaceId, publishedBy |
record.upserted | tableId, recordId, values.<fieldId> |
calendar.event.created | eventId, subCalendarId, startsAt, endsAt |
comment.added | commentId, entityType, entityId, authorId |
Use dotted paths for nested fields — assignee.id, values.fld_abc.
Tips
- The filter runs server-side before n8n is hit, so filtering aggressively reduces both bandwidth and credit-counted invocations.
- n8n expressions inside values (
{{ $json.x }}) are resolved by n8n at workflow run time, not by Tellzm. Keep values literal in the filter unless you really need workflow-local data. - If a workflow never fires when you expect it to, switch your filter off temporarily and add it back one condition at a time.
[!TIP] Start broad, then narrow. It's easier to start with an empty filter (fires for every event), watch one or two runs to see the actual payload shape, then add conditions — than to guess the field names from the docs.