Session AI
Session AI (formerly ZineOne) is an in-session marketing platform that models each visitor’s real-time context and intent to deliver personalised experiences and messaging within the live session. Datafly Signal forwards your first-party events server-to-server into a Session AI REST channel, so the behavioural signal Session AI needs is delivered from your own infrastructure without an additional browser SDK.
Why route Session AI through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Session AI even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- Delivery is batched, rate-limited, and retried. Signal buffers to Kafka, respects the Session AI rate limit, and retries on 429 or transient failure rather than dropping the event.
- One consent decision governs every destination. Session AI is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
- A Session AI account with access to the server-side / console tools.
- A REST (webhook) channel created in the Session AI console. Note its channel name — events are routed by channel and events sent to an unknown channel are dropped.
- An API key generated for that channel. It is sent on every request in the
apikeyheader. - Your Session AI cloud host. Most tenants are on
cloud.zineone.com; some regional tenants are on a different host. Confirm yours in the console. - A Datafly Signal pipeline with the Datafly.js collector installed and emitting events.
Configuration
| Field | Required | Description |
|---|---|---|
| API Key | Yes | Sent in the apikey header. Generate it from the Session AI server-side tools for your channel. |
| Channel Name | Yes | The REST/webhook channel that receives these events (passed as the channel query parameter). |
| API Host | Yes | Your tenant’s cloud host, usually cloud.zineone.com; a regional tenant has its own. There is no fallback: without it no event is delivered. |
Configure in Signal
- In the management UI, open your pipeline and add a destination.
- Choose Session AI from the Personalisation category.
- Enter your API Key, Channel Name and API Host (
cloud.zineone.comunless your tenant is regional). - Select the Default preset, review the event mappings, and save.
- Enable the destination. Signal begins delivering mapped events immediately.
API Endpoint
Signal delivers each event with an HTTP POST to:
POST https://{api_host}/c3/public/api/v1/event?channel={channel}Authentication is the apikey request header. Session AI returns 202 Accepted when an event is queued for processing. A successful event then appears in the customer activity stream for the supplied customer id.
Identity Signals
Session AI stitches behaviour to a profile using the identifiers at the root of the request body. Only events is required, so anonymous visitors are sent too.
| Signal source | Session AI field | Notes |
|---|---|---|
app device ID, else anonymous_id | device_id | Sent on every event. |
user_id | cid | The known-customer identifier, sent once the visitor is identified. |
| device OS | os | The app’s OS for app events, web otherwise. |
No email or name is sent. Session AI predicts intent and personalises within the session; it does not message the visitor, so under Signal’s rule for personal data it receives none, and its API documents no hashed email to send instead (see Personal data by integration).
Event Mapping
Signal’s GA4-style event names are mapped to Session AI event names. Event attributes are sent as flat key/value pairs inside each object in the events array. Session AI stamps the receive time server-side, so no timestamp is sent.
| Signal event | Session AI event |
|---|---|
page | PageView |
search | Search |
view_item | ProductPageView |
add_to_cart | AddToCart |
remove_from_cart | RemoveFromCart |
view_cart | CartView |
begin_checkout | CheckoutStart |
purchase | Purchase |
sign_up | SignUp |
login | Login |
Example
A product view captured by Datafly.js from an anonymous visitor:
datafly.track("view_item", {
currency: "gbp",
value: 129.99,
items: [{ item_id: "SKU-1", item_name: "Parka Jacket", item_category: "Jackets", price: 129.99 }]
});is delivered to Session AI as:
{
"device_id": "df_anon_p2_0001",
"os": "web",
"events": [
{
"event": "ProductPageView",
"productId": "SKU-1",
"productName": "Parka Jacket",
"category": "Jackets",
"price": "129.99",
"currency": "GBP"
}
]
}Once the visitor is identified, cid (the user ID) is added at the root. Session AI treats attribute values as strings.
Testing
- Trigger a mapped event on your site (e.g. view a product).
- In Signal’s Event Debugger, confirm the event was delivered to Session AI and the response was
202 Accepted. - In the Session AI console, use Retrieve Customer Activity for the test customer id (
cid) to confirm the event landed and carries the expected attributes.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 / 403 response | Invalid or unscoped API key | Regenerate the API key for the channel and confirm it is authorised for inbound events. |
404 response | Unknown channel | Check the Channel Name matches a REST/webhook channel that exists in the console. |
400 response | Missing event name or malformed body | Confirm the Signal event is mapped to a Session AI event name in the preset. |
202 but nothing in the activity stream | Wrong customer id or wrong tenant host | Verify cid is being sent and that API Host matches your tenant’s region. |
| Events for the wrong region | Default host used for a regional tenant | Set API Host to your tenant’s cloud host. |