Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/endpoint": "https://api.viber.com/v1/send",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/method": "POST",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/requestTimestamp": "2026-05-20T14:35:22.264Z",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/responseTime": 187,
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/statusCode": 200,
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/throttleApplicable": false
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/endpoint": "https://api.viber.com/v1/send",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/method": "POST",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/requestTimestamp": "2026-05-20T14:36:06.450Z",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/responseTime": 2462,
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/statusCode": 503,
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/throttleApplicable": false,
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/errorCode": "HTTP_5XX",
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/errorReason": "503 Service Unavailable after 3 retries"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{
"meta:license": [
"Copyright 2026 Adobe Systems Incorporated. All rights reserved.",
"This work is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license",
"you may not use this file except in compliance with the License. You may obtain a copy",
"of the License at https://creativecommons.org/licenses/by/4.0/"
],
"$id": "https://ns.adobe.com/experience/customerJourneyManagement/custom-channel-execution-metrics",
"$schema": "http://json-schema.org/draft-06/schema#",
"title": "Adobe CJM ExperienceEvent - Custom Channel Execution Metrics",
"description": "Per-call execution metrics for custom-channel deliveries. Populated only by MSW for custom-channel sends. Email/SMS/Push/Line paths leave this block absent. Validity-expired events also leave this block absent (handled via messageDeliveryfeedback.messageExclusion). See wiki 3886615741 for design rationale.",
"type": "object",
"meta:extensible": true,
"meta:abstract": true,
"meta:intendedToExtend": ["https://ns.adobe.com/xdm/context/experienceevent"],

"definitions": {
"customChannelExecutionMetrics": {
"properties": {
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/endpoint": {
"title": "Endpoint",
"type": "string",
"description": "URL template of the custom-channel customer endpoint, with placeholders un-substituted (e.g. `https://api.viber.com/v1/{{profile.id}}/send`). Stored as the template form — NOT the runtime-interpolated URL — to prevent per-user / per-record cardinality explosion in live reporting (confirmed with reporting team 2026-05-22; precedent is AJO's existing email `domain` derived field that truncates the link URL). Query parameters are stripped before storage. Live reporting derives a coarser `endpointHost` tag from this for Cortex tagging; all-time CJA can use the full template for endpoint-level drilldown. Null when the call was skipped before HTTP was attempted (errorCode set to AUTH_* / REQUEST_GENERATION_ERROR)."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/method": {
"title": "HTTP Method",
"type": "string",
"description": "HTTP method used for the call (POST, GET, PUT, etc.). Null when the call was skipped."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/requestTimestamp": {
"title": "Request Timestamp",
"type": "string",
"format": "date-time",
"description": "Wall-clock timestamp (UTC) captured immediately before the customer-endpoint HTTP request is sent on the wire. Null when the call was skipped."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/responseTime": {
"title": "Response Time",
"type": "integer",
"description": "Server HTTP response time in milliseconds. Measured around the customer-endpoint HTTP exchange only - excludes auth latency, connection acquisition, throttle wait (see waitTime), and pool wait. Matches Custom Action XDM actionExecutionOriginTime semantics. For HTTP_TIMEOUT: equals the configured timeout duration. Null when the call was skipped."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/waitTime": {
"title": "Wait Time",
"type": "integer",
"description": "Time in milliseconds the call waited in the throttle queue before the HTTP exchange started. Phase 2: populated when per-call throttle wait instrumentation lands. Phase 1: null/absent (not yet populated by MSW). When populated, total wall-clock latency = waitTime + responseTime + auth/cache overhead."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/statusCode": {
"title": "Status Code",
"type": "integer",
"description": "HTTP response status code from the customer endpoint, preserved as the raw integer (e.g. 401, 503) for finer-grained drilldown and manual debugging. The HTTP_4XX / HTTP_5XX classification in errorCode is a producer-side convenience for bucket gating; consumers SHOULD use statusCode for exact-code analysis. Null when the call was skipped (no HTTP attempt) or timed out without a response."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/throttleApplicable": {
"title": "Throttle Applicable",
"type": "boolean",
"description": "Config-level flag: whether throttling configuration is applied to this endpoint/channel at the time of dispatch. Mirrors the cacheApplicable pattern (config-level vs runtime-level). Does NOT indicate this specific call actually waited in a queue - that signal would require per-call instrumentation (Phase 2; reserved for a separate runtime field). Matches Custom Action XDM actionIsThrottled literal meaning."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/errorCode": {
"title": "Error Code",
"type": "string",
"description": "Unified error envelope covering both skip-stage (auth/cache) and HTTP-stage (4xx/5xx/timeout) failures. Null on success. Producers SHOULD use the controlled vocabulary documented in wiki 3886615741 section 7 - example values: AUTH_CACHE_IO, AUTH_HTTP_ERROR, AUTH_TOKEN_PARSE, AUTH_TOKEN_EXPIRED, REQUEST_GENERATION_ERROR, HTTP_4XX, HTTP_5XX, HTTP_TIMEOUT, HTTP_PARSE_ERROR. Schema does NOT enum-constrain the value so producer code can evolve the vocabulary without an XDM schema update."
},
"https://ns.adobe.com/experience/customerJourneyManagement/customChannelExecutionMetrics/errorReason": {
"title": "Error Reason",
"type": "string",
"description": "Human-readable detail of the failure (exception message, parsed error body, etc.). Used for drilldown tooltips and debugging. Not intended for aggregation - use errorCode for grouping. Null on success."
}
}
}
},
"allOf": [
{ "$ref": "https://ns.adobe.com/xdm/common/extensible#/definitions/@context" },
{ "$ref": "#/definitions/customChannelExecutionMetrics" }
],
"meta:status": "experimental"
}