You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,10 +4,11 @@ All notable changes to this project will be documented in this file.
4
4
5
5
## [36.0] - 2026-07-08
6
6
7
+
-**Feature**: Segments and automation conditions can now target link clicks by broadcast and by URL. A "clicked email" timeline condition can be scoped to a specific broadcast and/or to a clicked link, where the link is matched as a case-insensitive substring of the destination URL (e.g. `/pricing` matches `https://acme.com/pricing?utm_campaign=summer`). This makes segments and automation filters like "clicked the pricing link in the Summer Sale broadcast" possible; it builds on the per-link click data already recorded in `message_history.clicked_links`, so no migration is needed (#339, #311).
7
8
-**Fix**: Viewing the contacts of a segment no longer returns a server error. The `segments.contacts` endpoint ordered by a `created_at` column that `contact_segments` does not have, so every request failed; it now orders by `matched_at` (when the contact joined the segment).
8
9
-**Fix**: Removed the "Photo URL" option from the automation *contact updated* trigger's field list — contacts have no photo-URL field, so an automation filtered on it could never fire.
9
10
-**Fix**: Segment/automation conditions that filter contact-timeline events by a field value now work. The query builder referenced a non-existent `metadata` column on `contact_timeline` (event fields live in the `changes` JSONB as `{field: {old, new}}`), so any such condition failed at SQL execution; it now reads the field's new value from `changes`.
10
-
-**Fix**: Automations triggered by an email engagement event (opened, clicked, bounced, complained, unsubscribed) now actually fire. The trigger listened for the dotted event kind (e.g. `email.clicked`), but the contact timeline records these events under a different name (e.g. `click_email`), so the trigger condition never matched and the automation silently never ran. The trigger generator now translates these event kinds to the names the timeline uses, and workspace migration v36 regenerates the triggers of already-live automations so the fix applies without needing to re-save them. (The `email.sent` and `email.delivered` triggers remain inert for now — enabling them for an "every time" automation with a send node could loop.) (#339)
11
+
- **Fix / Change**: The contact timeline now records email engagement events in the same dot notation as the rest of the timeline and the webhooks — `email.opened`, `email.clicked`, `email.bounced`, `email.complained`, `email.unsubscribed`, plus `email.sent` and `email.updated` — replacing the old `open_email` / `click_email` / `insert_message_history` / `update_message_history` names. This fixes automations triggered by an email engagement event, which previously never fired because the trigger listened for `email.clicked` while the timeline stored `click_email`. Workspace migration v36 renames existing timeline rows, rewrites stored segment definitions (both the tree and the compiled query) and regenerates the triggers of already-live automations, so segments and automations keep working without needing to be re-saved. The `email.sent` and `email.delivered` options were removed from the automation trigger list — they could never fire, and an `email.sent` trigger would loop an "every time" automation that sends email. (#339)
0 commit comments