Processing flow
- Receive the webhook at the extension’s system webhook endpoint and validate it.
- Queue the work on the inbound Cloud Tasks queue so processing happens in the background.
- Find the Omneo profile using the stored Klaviyo identity, or email as a fallback. If no profile is found, the event is skipped.
- Filter circular events: Any event where Klaviyo’s
custom_method_detailisomneowas originally caused by Omneo itself and is silently ignored to prevent loops. - Combine events for the same profile and merge their consent changes into a single payload.
- Stamp consent timestamps:
email_consent_updated_atandsms_consent_updated_atare added whenever the corresponding consent fields change. Timestamps are written inY-m-d H:i:sformat. - Update Omneo with the combined comms payload.
- Master list check: If a master list is configured, the profile is added to it if they are now subscribed.
- Create interactions: One interaction is created per event, with a positive, neutral, or negative signal.
Subscription status is never pushed back to Klaviyo from a system webhook. Klaviyo already made the change on its side and is the source of truth for that event, so pushing back would create a sync loop.