This is the same mechanism everywhere it appears. Interpreters are configured on the Email, IM Channels, Webhook Triggers, Feeds, and Connectors (Event Handlers) pages — the editor, fields, and matching behaviour are identical on all of them. The examples below use webhook/HTTP payloads, but the exact same rules apply to inbound email, chat messages, feed items, and connector events.
How an interpreter works
Each interpreter is a named rule with two parts:- Match condition — how to recognise this payload.
- Hint for agent — what to tell the agent when the match fires.
Leave interpreters empty when every event on this ingress is the same kind of thing — describe it once in the Context field instead. Reach for interpreters only when one ingress receives several different event types that need different framing.
JSON Field Presence
Choose JSON field presence when the body is always JSON and you want to match by which keys exist. Enter one dot-path per line; all of them must be present for the match to fire. Example — match a Shopify order event:order.id— the keyidinside the object atorderorder.line_items— the array (or any value) atorder.line_items- Paths only need the key to exist; the value can be
null,false,0, or an empty array
- You know the JSON schema in advance
- You want to distinguish between event types by which fields they contain (e.g.
ordervsrefundvscustomer)
Regex Matchers
Choose Regex when the body is not JSON, or when you need to match a specific value rather than just the presence of a key.What is a regex?
A regex (regular expression) is a pattern that describes something to look for in text. The matcher checks whether the pattern appears anywhere in the raw body — if it does, the interpreter fires. You do not need to match the entire body, just a distinctive fragment.When to use regex
Practical examples
Match a Stripe payment event (JSON value)
Stripe sends"type": "payment_intent.succeeded" in its JSON body. To catch any payment-intent event regardless of outcome:
"type"— literal text\s*:\s*— colon with optional spaces around it"payment_intent\.— literalpayment_intent.(the\.escapes the dot so it doesn’t match any character)\w+"— one or more word characters (the outcome, e.g.succeeded)
Match a specific Stripe event type exactly
Match any payment event from any service
"type": "payment_intent.succeeded", "type": "payment.completed", etc.
Match a form-encoded event (e.g. Twilio, Slack)
When the body isevent_type=message_received&from=..., look for the event field:
Match an XML tag value
When the body is XML like<EventType>OrderCreated</EventType>:
i:
Pattern: <eventtype>ordercreated</eventtype> with flag i
Match a CSV with specific headers
When the first line isorder_id,customer_email,amount,status:
^ anchors to the start of the string, so it only matches if the body begins with those column names.
Match a webhook from GitHub push events
GitHub push event payloads always contain"ref"::
Regex flags
The optional flags field modifies how the pattern is applied:
You can combine flags:
im = case-insensitive + multiline.
Special characters that need escaping
In a regex, these characters have special meaning and must be escaped with\ if you want them literally:
- A literal dot:
example\.com(notexample.comwhich matches any character) - A literal question mark:
what\? - A literal parenthesis:
\(value\)
Keep patterns specific
A very broad pattern like.+ matches everything and defeats the purpose. Be as specific as your use-case allows — include the field name, a distinctive value prefix, or a structural element unique to the payload type.
Interpreters vs. Context
Both feed the agent framing, but at different granularities:- Use Context when every event on this ingress is the same kind of thing — one instruction that applies to every payload.
- Use Interpreters when one ingress receives different event types — each interpreter fires only for the payloads it matches, so the agent gets the right framing per item without splitting into separate ingresses.