Delivery Notification Type
Also known as: Shipping Notification Type, Shipment Notification Type, Delivery Message Type, Shipping Update Type
Stage of the shipping message sent to a customer: shipped, out_for_delivery, delivered, delayed or delivery_exception. Sent as notification_type on notification_open; channel is a separate field.
Business Use Case
1️⃣ Customer Service: when WISMO contacts rise after shipped messages, adds the tracking link and ETA to that template. 2️⃣ Marketing: when delayed messages show a low open rate, moves them from email to SMS or push. 3️⃣ Customer Service: when delivery_exception sends spike for one carrier, escalates to that carrier's account manager. 4️⃣ Merchandising: when delivered messages hold a high open rate, tests a review request or cross-sell block in them.
Business Criticality
Medium
Journey / Navigation Area
Engagement
Owning Function
Customer Service
Scope
Event
Calculation Notes
1️⃣ Source: the notification_type parameter on the notification_open event. One value per opened message. 2️⃣ Values: shipped, out_for_delivery, delivered, delayed, delivery_exception. A missing or unmapped value reports as (not set). 3️⃣ Map each ESP flow or template ID to the fixed list at send time; never infer the type from subject line text. 4️⃣ Out of scope: order confirmation, pickup-ready, return and marketing templates (no listed type, no shipment_id) are excluded, not (not set). 5️⃣ Event scope: the value describes one message. Resend and machine-open counting rules belong to Delivery Notifications Opened.
Technical Details
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | notification_open |
| Adobe | notificationOpen |
Data Mappings
W3 Data Layer
{
"event": [
{
"eventInfo": {
"eventName": "notification_open"
},
"attributes": {
"notification_type": "delivered",
"message_channel": "email",
"message_id": "msg-1",
"shipment_id": "SHP-1",
"machine_open": false
}
}
]
}GA4 Data Layer
{
"event": "notification_open",
"notification_type": "delivered",
"message_channel": "email",
"message_id": "msg-1",
"shipment_id": "SHP-1",
"machine_open": false
}Adobe Client Data Layer
{
"event": "notificationOpen",
"eventInfo": {
"notification_type": "delivered",
"message_channel": "email",
"message_id": "msg-1",
"shipment_id": "SHP-1",
"machine_open": false
}
}XDM Mapping
{
"eventType": "notificationOpen",
"_tenantId": {
"notificationType": "delivered",
"messageChannel": "email",
"messageId": "msg-1",
"shipmentId": "SHP-1",
"machineOpen": false
}
}SQL Queries
Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
-- Relative reporting window: last 90 complete days
DECLARE start_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);
DECLARE end_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);
-- One row per notification_open with its parameters pivoted out of event_params
WITH opens AS (
SELECT
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'message_id') AS message_id,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'shipment_id') AS shipment_id,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'notification_type') AS notification_type
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', start_date) AND FORMAT_DATE('%Y%m%d', end_date)
AND event_name = 'notification_open'
)
-- Map to the fixed list (missing or unmapped = (not set)); exclude out-of-scope messages with no listed type and no shipment_id
SELECT
message_id,
shipment_id,
CASE WHEN notification_type IN ('shipped', 'out_for_delivery', 'delivered', 'delayed', 'delivery_exception')
THEN notification_type ELSE '(not set)' END AS notification_type
FROM opens
WHERE notification_type IN ('shipped', 'out_for_delivery', 'delivered', 'delayed', 'delivery_exception')
OR shipment_id IS NOT NULL;Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Relative reporting window: last 90 complete days
WITH params AS (
SELECT date_sub(current_date(), 90) AS start_date,
date_sub(current_date(), 1) AS end_date
),
-- One row per notificationOpen with its tenant fields
opens AS (
SELECT
_tenantId.messageId AS message_id,
_tenantId.shipmentId AS shipment_id,
_tenantId.notificationType AS notification_type
FROM aep_web_events, params
WHERE eventType = 'notificationOpen'
AND to_date(timestamp) BETWEEN params.start_date AND params.end_date
)
-- Map to the fixed list (missing or unmapped = (not set)); exclude out-of-scope messages with no listed type and no shipment_id
SELECT
message_id,
shipment_id,
CASE WHEN notification_type IN ('shipped', 'out_for_delivery', 'delivered', 'delayed', 'delivery_exception')
THEN notification_type ELSE '(not set)' END AS notification_type
FROM opens
WHERE notification_type IN ('shipped', 'out_for_delivery', 'delivered', 'delayed', 'delivery_exception')
OR shipment_id IS NOT NULL;Source Data
Digital Analytics (GA4)
Dependencies
Prerequisite: List the dependencies required for this Dimension
Events:
Report Attributes
Carrier Shipment Status Delivery Exception Type Device Category Delivery Region
Segment Eligibility
true
Governance
Governance
GitHub
catalog/dimensions/delivery-notification-type.yml