Getting StartedAI in WebexSupport
Log inSign up
Home
Webex Contact Center
  • Overview
  • Guides
  • API REFERENCE
  • AI
  • Configuration
  • Data
  • Desktop
  • Flow Orchestration
  • Journey
  • Media And Routing
  • Native Campaign Manager
  • Changelog
  • SDK
  • Widgets
  • Customer Journey Data Service
  • AI Assistant for Developers
  • Webhooks
  • Contact Center Sandbox
  • Using Webhooks
  • Troubleshoot the API
  • Beta Program
  • Webex Status API
  • Contact Center Service Apps
  • FAQs

Webex Contact Center

Guide for Digital Transcripts

This guide explains how to retrieve and consume digital task transcripts downloaded using the Captures API. It covers both the legacy digital transcript format and the newer schema-versioned (vCon) digital transcript behavior introduced for omni-channel consistency.

anchorOverview

anchor

New
Beta

The newer schema-versioned digital transcript behavior is currently a beta feature. Please reach out to Cisco if you would like to enable or evaluate it for your integration.

To use schema-versioned digital transcripts reliably, organizations must use simplified flows on Webex Connect for their digital channels. If an organization is still using legacy flows, transcript generation for the newer schema-versioned path is not guaranteed to be reliable.

Digital task transcripts contain messages exchanged between the business—including AI agents and human agents—and the customer, or snapshots of Work Item data. Digital transcripts are available in two formats:

  • Legacy (v1): The existing channel-specific format used by current integrations. It presents messaging content primarily as human-readable text and represents Work Item data as key-value snapshots. Legacy artifacts do not include transcriptSchemaVersion.
  • Schema-versioned (v2/vCon): The newer format designed for omni-channel consistency. It uses the vCon model to organize participants, dialog entries, and attachments; provides richer task and attachment metadata; preserves supported structured message semantics; and explicitly links attachments to their related messages and participants.

Whisper messages exchanged between two agents during a conference are not included in digital transcripts, regardless of transcript format.

During the migration window from the legacy digital transcript format to the schema-versioned digital transcript format, existing integrations can continue using the legacy digital transcript behavior. Migration-ready integrations can explicitly request all available digital transcript versions for a task and update their parsing logic before the final cutover behavior is enabled.

This guide covers digital transcript retrieval behavior only. Voice transcript behavior and voice recording behavior in the Captures response remain unchanged by this migration.

anchorMigration from Legacy to Schema-Versioned Digital Transcripts

anchor

This guide uses two migration terms for digital transcripts:

  • Coexistence is the migration phase where the legacy digital transcript format and the newer schema-versioned digital transcript format can both exist for digital tasks.
  • Cutover is the later phase where the newer schema-versioned digital transcript path becomes the default digital transcript behavior for new archival flows, while historical tasks still contain older legacy artifacts where those artifacts already exist.

anchorQuick Recap - Captures API

anchor

Before we understand the details of the transcript we receive, let's go through a quick recap of Captures. For further details around this, you can refer to the Captures API Reference

Authorization

While Webex CC's Developer APIs support both User Tokens and Service App Tokens, we strongly recommend leveraging Service App based Authentication in case you are building machine to machine integrations (for e.g. to write data into external CRM systems, etc.). This ensures that your App integration tokens do not expire when a user leaves your org (or) their license is revoked

Request
curl --location --request POST 'https://{{api-base-domain}}/v1/captures/query' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <Token>' \
--header 'Content-Type: application/json' \
--data-raw '
{
     "query": {
          "orgId": "{{orgId}}",
          "urlExpiration": {{TimeInMinutes}}, // Minimum: 10, Maximum: 60
          "taskIds": [
               "{{taskId1}}",
               "{{taskId2}}",
               "..." // Maximum: 10 tasks
          ]
     }
}
'

Use this existing Captures request pattern to retrieve digital transcript metadata for one or more tasks.

For more details on how to fetch an access token, please refer to the Authorization section.

The includeSegments attribute in the Captures API request body does not apply to digital tasks. Do not use this attribute for digital transcript retrieval.

In addition to the legacy digital transcript format documented in this guide, a newer schema-versioned digital transcript format is now available as part of the beta migration rollout for digital transcripts.

Digital Transcript Selector During Migration

During the planned 6-month coexistence phase, the default Captures request continues to return the legacy digital transcript behavior for existing integrations.

If you are updating your integration to become migration-ready, include the following field in the Captures request body:

includeAllDigitalVersions=true

If your integration is not migration-ready yet, continue using the existing Captures request as-is during coexistence. The default digital behavior remains backward-compatible until cutover.

When this selector is passed during coexistence, the transcription array returns all digital transcript artifacts available for the same task. This is the recommended request mode for migration-ready clients during the coexistence window.

Example Captures request for a migration-ready client:

curl --location --request POST 'https://{{api-base-domain}}/v1/captures/query' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <Token>' \
--header 'Content-Type: application/json' \
--data-raw '
{
     "query": {
          "orgId": "a31d00ef-66a8-40c1-89d8-b7c09bee43e7",
          "taskIds": [
               "31292108-1022-39c3-90d5-841f703867c2"
          ],
          "includeAllDigitalVersions": true
     }
}
'
Response

This guide assumes that you've been able to get a success response from Captures API. For other error scenarios, please refer to the Captures API Reference.

Success HTTP Code: 200 OK

Success Response Body:

{
  "meta": {
    "orgId": "{{orgId}}",
    "urlExpiration": "{{TimeInMin}}"
  },
  "data": [
    {
      "taskId": "{{taskId1}}",
      "recording": [],
      "transcription": [
        {
          "source": "chat|sms|{{ <WorkItem> channel name }}|{{ <CustomMessaging> channel name }} etc.",
          "provider": "CISCO",
          "id": "cfg-id-101|CSRKT4K37D9OM2567",
          "fileName": "voiceTranscript.json|emailTranscript.json|facebookTranscript.json etc.",
          "filePath": "https://cjp-ccone-devus1-media-storage-recording.s3.amazonaws.com/9e4895c9-787b-4615-b15f-f1b3b12c3091/",
          "startTime": "1617373126000",
          "languageCode": "en-US",
          "createTime": "1617373126000"
        }
      ]
    },
    {
      "taskId": "{{taskId2}}",
      "recording": [],
      "transcription": [
        {
          "source": "chat|sms|{{ <WorkItem> channel name }}|{{ <CustomMessaging> channel name }} etc.",
          "provider": "CISCO",
          "id": "cfg-id-101|CSRKT4K37D9OM2567",
          "fileName": "voiceTranscript.json|emailTranscript.json|facebookTranscript.json etc.",
          "filePath": "https://cjp-ccone-devus1-media-storage-recording.s3.amazonaws.com/9e4895c9-787b-4615-b15f-f1b3b12c3091/",
          "startTime": "1617373126000",
          "languageCode": "en-US",
          "createTime": "1617373126000"
        }
      ]
    }
  ]
}

The response above is a valid legacy-style example. During coexistence, this remains the default digital transcript behavior when includeAllDigitalVersions is not passed.

If includeAllDigitalVersions=true is passed during coexistence, the transcription array returns all digital transcript artifacts available for the task. Depending on the stored artifacts, the response can contain a legacy artifact, a schema-versioned artifact, or both. Tasks archived before the coexistence rollout remain legacy-only. New digital tasks archived after cutover are schema-versioned-only, while historical tasks can still return legacy-only or mixed artifact sets depending on when they were archived.

In this guide, a schema-versioned digital transcript is the newer digital transcript artifact identified in the Captures response by the transcriptSchemaVersion field.

transcriptSchemaVersion identifies that the transcript metadata points to the newer schema-versioned artifact. For the field definition, refer to the Captures API Reference.

Example Captures API coexistence response when includeAllDigitalVersions=true is passed:

{
  "meta": {
    "orgId": "a31d00ef-66a8-40c1-89d8-b7c09bee43e7",
    "urlExpiration": 60
  },
  "data": [
    {
      "taskId": "31292108-1022-39c3-90d5-841f703867c2",
      "recording": [],
      "transcription": [
        {
          "source": "appleMessages",
          "provider": "CISCO",
          "id": "31292108-1022-39c3-90d5-841f703867c2",
          "fileName": "appleMessagesTranscript.json",
          "filePath": "https://cjp-ccone-example-media-storage-recording.s3.amazonaws.com//digital/dynamic/31292108-1022-39c3-90d5-841f703867c2/appleMessagesTranscript.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260625T103138Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=EXAMPLE/20260625/us-east-1/s3/aws4_request&X-Amz-Signature=legacyexample",
          "startTime": "1782382350385",
          "languageCode": "en",
          "configId": "CSRK9RI2QLMN5GTR",
          "createTime": "1782382715205"
        },
        {
          "source": "appleMessages",
          "provider": "CISCO",
          "id": "31292108-1022-39c3-90d5-841f703867c2",
          "fileName": "appleMessagesV2Transcript.json",
          "filePath": "https://cjp-ccone-example-media-storage-recording.s3.amazonaws.com//digital/transcripts/a31d00ef-66a8-40c1-89d8-b7c09bee43e7/appleMessages/31292108-1022-39c3-90d5-841f703867c2/appleMessagesV2Transcript.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260625T103138Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=EXAMPLE/20260625/us-east-1/s3/aws4_request&X-Amz-Signature=v2example",
          "startTime": "1782382350385",
          "languageCode": "en",
          "configId": "CSRK9RI2QLMN5GTR",
          "createTime": "1782382716240",
          "transcriptSchemaVersion": "vcon-04"
        }
      ]
    }
  ]
}

anchorDealing with Captures API Response

anchor

Use the following guidance to select and download the digital transcript artifact that your integration needs.

How Captures Returns Digital Transcript Artifacts

During the coexistence phase:

  1. If includeAllDigitalVersions is not passed, the default Captures response continues to return the legacy digital transcript behavior for digital tasks.
  2. If includeAllDigitalVersions=true is passed, the transcription array returns all digital transcript artifacts available for the task.
  3. Tasks archived before the coexistence rollout remain legacy-only. Tasks archived during coexistence can return a legacy artifact, a schema-versioned artifact, or both, depending on the artifacts available for that task.

After cutover:

  1. The default Captures behavior returns all digital transcript artifacts available for the task.
  2. Tasks archived before coexistence remain legacy-only, tasks archived during coexistence can return legacy-only, schema-versioned-only, or mixed artifact sets, and tasks archived after cutover are schema-versioned-only.
  3. After cutover, includeAllDigitalVersions remains supported, but it becomes a no-op-compatible selector because the default and all-versions responses return the same set of digital transcript artifacts.
Identifying Digital Transcript Artifacts

When inspecting data[].transcription[], identify the digital transcript artifact using the digital source together with transcriptSchemaVersion.

  • Legacy digital transcript entries use the existing digital source values such as chat, email, facebook, sms, whatsapp or appleMessages, as well as admin-configured source names for Work Items and Custom Messaging. These entries do not carry transcriptSchemaVersion.
  • New schema-versioned digital transcript entries keep the same digital source family and additionally include transcriptSchemaVersion.

Do not use transcriptSchemaVersion alone as the only discriminator. Evaluate the digital source family together with the presence of transcriptSchemaVersion.

Typical coexistence-era metadata examples include:

  • legacy digital artifact: source: "chat" with fileName: "chatTranscript.json" and no transcriptSchemaVersion
  • schema-versioned digital artifact: source: "chat" with fileName: "chatV2Transcript.json" and transcriptSchemaVersion
Selecting and Downloading the Transcript File

Follow the below steps to get to the digital transcript:

  1. Read the transcription array for the taskId in context.
  2. Select the digital transcript artifact that your integration is prepared to consume.
  3. Parse the selected artifact's filePath. The filePath points to a pre-signed URL containing a transcript file specific to the taskId in context. The validity of this URL honors the urlExpiration attribute specified in the API request.
  4. Make an HTTP GET request to the selected filePath URL. A successful request returns the JSON transcript payload for that artifact.
Migration Guidance

If your integration is still using the legacy format, the default Captures behavior during coexistence allows that integration to continue working without immediate change.

If your integration is preparing for migration:

  1. Start sending includeAllDigitalVersions=true during the planned 6-month coexistence phase.
  2. Update your logic to iterate through data[].transcription[] instead of assuming a single digital transcript artifact per task.
  3. Continue supporting the legacy digital transcript format for older interactions.
  4. Add support for the schema-versioned digital transcript format for new interactions.
  5. Prepare for post-cutover behavior where historical interactions can still return different artifact combinations depending on when they were archived.

Plan for these interaction eras:

  • tasks archived before the coexistence rollout can remain legacy-only
  • tasks archived during coexistence can return a legacy artifact, a schema-versioned artifact, or both when includeAllDigitalVersions=true is used
  • tasks archived after cutover return schema-versioned-only digital transcript artifacts
Digital Transcript JSON

Digital transcript payloads can now exist in more than one format during the migration window. The legacy examples below are preserved as-is because they remain relevant for existing integrations and for historical interactions during coexistence.

Legacy Messaging Channel Digital Transcript

Below is a sample transcript for messaging-based digital channels such as SMS, Email, and Chat, and for custom messaging channels (for example, Viber and Webex). This object will be referred to as the transcript.json from here on in this guide.

[
  {
    "id": "00ef01b1-ae08-4434-9874-98bc34766164",
    "aliasId": "00ef01b1-ae08-4434-9874-98bc34766164",
    "direction": "inbound",
    "message": "Form Response: Name - John Doe, Email - john@live.com",
    "attachments": null,
    "participant": {
      "name": "John Doe",
      "role": "customer",
      "userId": "",
      "aliasId": ""
    },
    "timestamp": "2023-11-07T13:24:09:024Z",
    "redacted": false
  },
  {
    "id": "72c2254351e543aa98ac5c40fe837009",
    "aliasId": "72c2254351e543aa98ac5c40fe837009",
    "direction": "outbound",
    "message": "We are currently out of office and services ",
    "attachments": [
      {
        "fileName": "Sample Image 1.png",
        "mimeType": "image/png",
        "url": "https://{{media-regional-sub-domain}}.s3.amazonaws.com//digital/transcripts/56a2cef6-a1b3-43cd-b97a-036f3edae8bf/chat/bd0b90d8-92d0-4550-85fe-48bb4d274e30/attachments/8e0ebdc5-169d-443d-8fa9-ae53b9a9ae69/BE0EB707-56F9-4A32-9C70-17FD4D706AFFSample Image 1(1).PNG?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250424T104747Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=AKIATRZUOXQOOEF7E2MR/20250424/us-east-1/s3/aws4_request&X-Amz-Signature=f44257d7869ef2f2300984ae84d0494205388d46e0f1e60ff57aca93c3012f78&JWE=eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..jj40-zAvLZBVzGie.QTtrp7RnZVkaBPy5ZVynNMJU_9yDkE55s-wZJMU7QPQHbXTPFEq8gxUexNmk9JIOknUeckwrzEaDCDKi-xh8jWZ_fYgrUdSej_GXU4L_FmDjQGOzIRRCAyj9_X8xmM4RBbI56Se6UNYpK0ULeCWpk6DkeWSYmykhw82Pal4NwhS-LY6aXpvZRBkY4Arc8V7R9z3P3HCOkuoN1c2SxeadiepsILwY5x7gSo7zan-HHNLGkOigB8qrb65E19QBJUb3mrdMHsKLYJi6cRBOwzjBeqyfpOq5tfAStIdJMW-yQduvV39Cufyo1rswBz1eBKWBBGThuw8CYaDBtlJ5I1sVtwqLsQDJSnb17hJJaKbSDTlJtxUhUiEoL9xhG0jtWwZCDJnk0cqWhkvyzPI7hAl5JMw9J5kWZkP4BcKvKdV9wbO-zHTSyWMV0i-g-eFWrTTTK4n25pUjkBXVXf8jKCde22-nmsdmaq52ILo.TxZRACWOaay6A-56EvHdPg&keyUri=kms://kms-us-int.wbx2.com/keys/d1991610-2184-4c84-8204-5d8a5a361e69",
        "dropped": true,
        "encrypted": false,
        "encryptionDetails": {
          "jwe": "",
          "keyUri": ""
        }
      },
      {
        "fileName": "Sample Text.txt",
        "mimeType": "image/jpeg",
        "url": "https://{{media-regional-sub-domain}}.s3.amazonaws.com//digital/transcripts/56a2cef6-a1b3-43cd-b97a-036f3edae8bf/chat/bd0b90d8-92d0-4550-85fe-48bb4d274e30/attachments/8e0ebdc5-169d-443d-8fa9-ae53b9a9ae69/BE0EB707-56F9-4A32-9C70-17FD4D706AFFSample Text(1).TXT?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20250424T104747Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=AKIATRZUOXQOOEF7E2MR/20250424/us-east-1/s3/aws4_request&X-Amz-Signature=f44257d7869ef2f2300984ae84d0494205388d46e0f1e60ff57aca93c3012f78&JWE=eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..jj40-zAvLZBVzGie.QTtrp7RnZVkaBPy5ZVynNMJU_9yDkE55s-wZJMU7QPQHbXTPFEq8gxUexNmk9JIOknUeckwrzEaDCDKi-xh8jWZ_fYgrUdSej_GXU4L_FmDjQGOzIRRCAyj9_X8xmM4RBbI56Se6UNYpK0ULeCWpk6DkeWSYmykhw82Pal4NwhS-LY6aXpvZRBkY4Arc8V7R9z3P3HCOkuoN1c2SxeadiepsILwY5x7gSo7zan-HHNLGkOigB8qrb65E19QBJUb3mrdMHsKLYJi6cRBOwzjBeqyfpOq5tfAStIdJMW-yQduvV39Cufyo1rswBz1eBKWBBGThuw8CYaDBtlJ5I1sVtwqLsQDJSnb17hJJaKbSDTlJtxUhUiEoL9xhG0jtWwZCDJnk0cqWhkvyzPI7hAl5JMw9J5kWZkP4BcKvKdV9wbO-zHTSyWMV0i-g-eFWrTTTK4n25pUjkBXVXf8jKCde22-nmsdmaq52ILo.TxZRACWOaay6A-56EvHdPg&keyUri=kms://kms-us-int.wbx2.com/keys/d1991610-2184-4c84-8204-5d8a5a361e69",
        "dropped": true,
        "encrypted": true,
        "encryptionDetails": {
          "jwe": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..ZkI-74v_XN9u_Tu3.ehNpfTXjlF3RuMmCILOp_H_cPj8FP7ggaryqPS5T0BUWC5PVETKZqIQDOjZJa5OC06y8SYkPfBZkimt52pC3NE-cowrv-VzRq1agmYmn6jiVlNsy3ktZcQfgY3w3nj6EmElo6fnAsdaGZVo79SXuU8GPegJMEIoNKNAEFmr_sVFNle-8XSDdfpirs3JKKZqe_9iN-4lR7xd4-vNBP1dqVIlP17_3mIFbL8WMT6L_z4WX7Bi76k8rQfVIidA1M_psLG9iwvM7o_2Nd-BcbRwlnUg4--cJnXwsk3PSi2wIchwLO-WCjfkxigM2H70YCNbFKGhGjmi_YLpi5hoe9_ryMC7UnOK_rKYOwZF1E7kMlEfc9S5k2GhQxxOYdL73qgnyk0UfoZ2aBoUlAgvnRlgbX78rO1t94lL9TUL9RPF71OhNre4JaXuPR6gOmyofMOpWWnMxj_hTFOd4lcIpocb6kmYJRwvcYERFdecqruFVEiydwmB8IQy4eFdsJWkDaSswRA.XqVlRCZUovATcaNPXqL2Pg",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/8fd281bd-47e0-4b3a-b438-6ea289e64ea2"
        }
      }
    ],
    "participant": {
      "name": null,
      "role": "agent",
      "userId": "New Conversation",
      "aliasId": ""
    },
    "timestamp": "2023-04-06T11:49:39:897Z",
    "redacted": false
  }
]
Legacy Work Item Digital Transcript

Below is the sample transcript for Custom Work Item channels. This object will be referred to as the transcript.json from here on in this guide.

[
  {
    "id": "35cc5718-84b5-40f2-bef3-7f5121b360fd",
    "aliasId": "35cc5718-84b5-40f2-bef3-7f5121b360fd",
    "direction": "announcement",
    "message": "17 Apr 2026 01:04:05 - The chat has been moved to queue by the system",
    "attachments": null,
    "participant": {
      "name": "System",
      "role": "system",
      "userId": "",
      "aliasId": ""
    },
    "timestamp": "2026-04-17T08:04:05.660Z",
    "redacted": false,
    "workItemData": null
  },
  {
    "id": "3e4d3d37-9cfe-4404-8a61-0ffd86da80f7",
    "aliasId": "3e4d3d37-9cfe-4404-8a61-0ffd86da80f7",
    "direction": "inbound",
    "message": "WorkItem",
    "attachments": null,
    "participant": {
      "name": "Customer 20260417075702823",
      "role": "customer",
      "userId": "",
      "aliasId": ""
    },
    "timestamp": "2026-04-17T08:04:12.889Z",
    "redacted": false,
    "workItemData": {
      "caseId": "CI784774",
      "firstName": "John",
      "lastName": "Doe",
      "severity": "Critical"
    }
  }
]
  1. The transcript.json contains an array of individual messages exchanged between the business and the end-customer or work item snapshots.

  2. Iterate through the items in this array to access message fields such as message, timestamp, and attachments, or the Work Item workItemData.

We have published a table below under the section: Transcript JSON Schema Details that explains these fields in further detail for your reference.

Legacy email transcripts contain the HTML body only. Details such as Email To recipients, Cc recipients, and Subject are not part of the legacy transcript format.

The reference to attachments in this file can point to encrypted files secured using Webex Suite's Encryption in case you are enrolled in the Early Access Beta Program. We strongly encourage you to understand the impact of encrypted attachments in your integrations as we soon plan to enforce this as a security measure for all customers

anchorLegacy Transcript JSON Schema Details

anchor
Data Field NameTypeDescriptionAllowed Values
idStringUnique system generated identifier of the message or Work Item snapshot (UUID).
aliasIdStringAuxiliary unique reference identifier of the message or Work Item snapshot.
directionStringThe direction of the message to indicate whether the message was received, sent, or system generated. For Work Items, data snapshots appear as inbound, and system-generated events appear as announcement.inbound, outbound, announcement
messageStringThe content of the message. For work item snapshots, the field value is set to WorkItem.
participantObjectDetails of the participant. For inbound messages, the name of the customer alone is populated if the channel supports it
nameStringSystem (or) Agent Name (or) Customer Name.
roleStringRole of participantsystem, customer, agent
userIdStringThe identifier of the participant
participant.aliasIdStringAn auxiliary identifier associated with the participant.
timestampStringThe timestamp indicating when the message or work item snapshot was created. It follows the ISO 8601 format.
redactedBooleanDetermines whether the message contained any sensitive PCI content and got redacted/masked or not. e.g., credit card number. This is not applicable for work item snapshots.
attachmentsObjectAn object containing details about any attachments to the message. This is not applicable for work item snapshots.
fileNameStringThe name of the attached file.Sample (e.g., Image.png)
mimeTypeStringThe MIME type of the attached file (e.g., image/png)
urlStringPublicly accessible URL to download the attachment.
droppedBooleanDetermines whether the attachment was dropped due to PCI reasons. This is not applicable for work item snapshots.
encryptedBooleanDetermines whether the attachment is encrypted or not. This is not applicable for work item snapshots.
encryptionDetailsObjectAttributes related to how the attachment was encrypted. You will need in order to decrypt this attachment subsequently using the Webex Decryption SDK
jweStringJWE object refers to an encrypted secure content resource of this file.
keyUriStringURI location of the Key on Webex's Key Management Service
workItemDataObjectKey value pairs containing work item data snapshot. This is not applicable for messaging channels

anchorNew Schema-Versioned Digital Transcript Format

anchor

In addition to the legacy format documented above, a newer schema-versioned digital transcript format is introduced during the migration and cutover rollout. This newer format is returned as a separate digital transcript artifact in the Captures transcription array.

Consume the newer digital transcript format as a separate transcript artifact rather than as an in-place modification of the legacy examples above.

The newer digital transcript format follows the vCon conversation model. For digital transcripts today, the schema-versioned payload uses vcon: "0.4.0". For the standard vCon object model and generic field definitions, refer to the vCon Conversation Data Container standard, including the Version 0.3.0 to 0.4.0 section. This guide focuses on the Webex Contact Center-specific retrieval flow, migration behavior, and digital-transcript-specific conventions layered on top of that model.

Common Schema-Versioned Rules

For all supported digital channels, dialog[].body contains a JSON object serialized as a string. After parsing the vCon document, deserialize each dialog[].body value as JSON before accessing fields such as direction, semanticType, or the channel-specific payload. The vCon encoding field remains "none"; the escaped characters shown in transcript examples result from JSON string serialization and do not indicate a separate content encoding.

Key consumer-visible differences for the schema-versioned digital transcript path are:

  • the Captures transcription metadata keeps the same digital source family and uses transcriptSchemaVersion to identify the newer format
  • the transcript file name uses the *V2Transcript.json pattern for static channel families, such as chatV2Transcript.json or emailV2Transcript.json
  • attachment URLs in the schema-versioned transcript use stable attachment download APIs rather than the legacy attachment URL behavior shown in the legacy examples above
  • to download an attachment referenced from the schema-versioned transcript, call the attachment URL with normal Captures-style authorization to obtain a short-lived presigned download URL, then use that returned URL to download the exact stored bytes
  • encrypted attachments remain downloadable through that same attachment-download flow; when encryption metadata is present in the transcript attachment entry, use it together with the downloaded bytes in your decryption workflow
  • dialog[].parties contains only the originator index for each dialog entry in the schema-versioned vCon shape
  • flow-generated outbound rows use role: agent in both legacy and schema-versioned transcripts; in the legacy transcript, the corresponding participant name value is SYSTEM, while schema-versioned vCon represents the same originator as an agent role party in parties[]
  • rich template families that are supported as agent templates preserve the semanticType, but omit the full outbound template object in this phase of the schema-versioned transcript rollout for both agent-authored and flow-generated outbound rows. Full outbound template payloads for those template families are planned for a later phase. Rich message families that are not supported as agent templates will still include full flow-generated payloads when the channel provides them. Customer replies to templates will still include structured response payloads when the channel provides them.

At a structural level, the newer digital transcript artifact uses the standard vCon-style separation of:

  • top-level parties to identify participants
  • top-level dialog to represent ordered transcript entries and structured message content
  • top-level attachments to represent attachment metadata and link those attachments back to transcript entries and parties

When consuming attachment-bearing transcripts, use the linkage fields in the transcript rather than inferring relationships from filenames or message text alone.

  • attachments[].dialog links an attachment back to the related dialog[] entry
  • attachments[].party links an attachment back to the related participant in parties[]

This guide intentionally avoids treating channel-specific sample value differences as normative behavior for all digital vCon transcripts. Prefer the structural relationships above as the stable integration contract.

Example Captures metadata for a schema-versioned digital transcript artifact:

{
  "source": "facebook",
  "provider": "CISCO",
  "id": "0f163559-7b8f-4107-949c-68e2d367e984",
  "fileName": "facebookV2Transcript.json",
  "filePath": "https://cjp-ccone-example-media-storage-recording.s3.amazonaws.com//digital/transcripts/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/facebook/0f163559-7b8f-4107-949c-68e2d367e984/facebookV2Transcript.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260713T124907Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=EXAMPLE/20260713/us-east-1/s3/aws4_request&X-Amz-Signature=transcriptexample",
  "startTime": "1783946780916",
  "languageCode": "en",
  "configId": "CSRKT4K37D9OM2567",
  "createTime": "1783946947311",
  "transcriptSchemaVersion": "vcon-04"
}

Representative compact schema-versioned digital transcript payload:

{
  "uuid": "4203dfa3-bab6-47c2-ab9d-1a9eb85d5cc4",
  "vcon": "0.4.0",
  "created_at": "2026-07-14T09:54:15.842+00:00",
  "extensions": [
    "task_metadata",
    "task_attachment"
  ],
  "critical": [
    "task_metadata",
    "task_attachment"
  ],
  "task_metadata": {
    "task_id": "4203dfa3-bab6-47c2-ab9d-1a9eb85d5cc4",
    "created_at": "2026-07-14T09:51:00.586+00:00",
    "closed_at": "2026-07-14T09:54:12.503+00:00",
    "customer_name": "Customer",
    "customer_address": "customer@example",
    "business_address": "support@example",
    "channel_type": "chat",
    "channel": "web"
  },
  "parties": [
    {
      "uuid": "customer@example",
      "name": "{\"first_name\":\"Customer\",\"last_name\":\"\",\"full_name\":\"Customer\"}",
      "role": "customer"
    },
    {
      "uuid": "agent",
      "name": "{\"first_name\":\"Agent\",\"last_name\":\"\",\"full_name\":\"Agent\"}",
      "role": "agent"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2026-07-14T09:51:00.586+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Hi\"}",
      "message_id": "c323332a-53fe-4459-8277-77792cf26938"
    },
    {
      "type": "text",
      "start": "2026-07-14T09:51:24.058+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"Please review the attached document.\"}",
      "message_id": "9507301e-a890-4548-91ed-51637eb934fe"
    }
  ],
  "attachments": [
    {
      "start": "2026-07-14T09:51:24.058+00:00",
      "dialog": 1,
      "party": 0,
      "filename": "SamplePdfForTest.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/b2e714a9-ee20-4916-b2ce-5ff9c6dda6c7/channel/chat/interaction/4203dfa3-bab6-47c2-ab9d-1a9eb85d5cc4/attachment/76028919-9537-4cce-8bbb-063dcb3bad9e",
      "content_hash": "sha-512:f3b3ab3e6351e25b5c1882bea8d37efaddc0ea72bf153bb067688f775a26810d32b54f014bf1cebc7fe93042d85b18b5b453e322d154bc55d5cc2754b0dfb4b2",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": false,
        "encryption_details": {
          "jwe": "",
          "keyUri": ""
        }
      }
    }
  ]
}

Field-level guidance for the schema-versioned digital transcript format:

Standard vCon Fields

For the standard vCon field definitions and semantics, refer to the IETF draft:

  • https://www.ietf.org/archive/id/draft-ietf-vcon-vcon-core-02.html
  • Version mapping notes for 0.4.0: https://www.ietf.org/archive/id/draft-ietf-vcon-vcon-core-02.html#name-version-030-to-040
FieldGuidance
uuid, vcon, created_atIdentify the archived vCon document itself.
extensions, criticalThese list the Webex Contact Center vCon extensions used in the transcript. In the current digital transcript format, task_metadata is present. task_attachment is present when the transcript includes attachment metadata.
parties[]Identifies the participants in the interaction. The role field identifies the participant type such as customer, agent, or system.
parties[].nameThis is emitted as a JSON-string payload, not as a nested JSON object. Parse it accordingly when accessing fields such as first_name, last_name, and full_name.
dialog[]Contains the ordered transcript entries. For digital transcripts today, each entry uses type: "text", mediatype: "application/json", encoding: "none", and a JSON-string body.
dialog[].typeIdentifies the vCon dialog entry type. For digital transcripts today, this is text. The more specific digital message semantics are carried inside the JSON-string body through semanticType.
dialog[].partiesFor digital transcripts today, this array identifies only the originator of that specific dialog entry. The values are indexes into the top-level parties[] array. Do not treat this field as the full participant list for that message.
dialog[].mediatypeFor digital transcripts today, this is application/json because the digital message payload is represented inside the JSON-string body.
dialog[].encodingFor digital transcripts today, this is none because the body already carries the serialized digital payload directly as a JSON string.
dialog[].bodyThe JSON-string body is where the digital message payload is carried. Depending on the message type and channel, it includes fields such as direction, semanticType, text, and textWithAttachments.
dialog[].message_idThe digital message identifier for that specific dialog entry.
Rich-message payloads inside dialog[].bodyRich-message payload keys inside body are channel-specific. Branch on semanticType first, then parse the corresponding payload object for that semantic family rather than assuming one common rich-message key set across all digital channels.
attachments[]Contains attachment metadata separately from the dialog body. Each attachment points back to its owning message through attachments[].dialog and to its owning participant through attachments[].party.
attachments[].filenameFile name of the attachment. Consumers can use this when storing or decrypting the downloaded file so the correct name and extension are preserved.
attachments[].mediatypeMIME type of the attachment.
attachments[].urlStable authenticated Contact Center attachment API URL carried in the transcript for downloadable attachments. This is not the final presigned download URL. Call this URL first with the same bearer token used for the Captures API to obtain the short-lived downloadUrl. When task_attachment.dropped is true, no downloadable attachment URL is available.
attachments[].dialogLinks the attachment back to the owning dialog[] entry.
attachments[].partyLinks the attachment back to the owning participant in parties[].
attachments[].content_hashIntegrity hash for the attachment when present.
WxCC task_metadata Extension

task_metadata is a Webex Contact Center-specific vCon extension carried at the transcript level.

task_metadata keyGuidance
task_idThe Webex Contact Center task identifier associated with the archived transcript.
created_atThe interaction creation timestamp carried in the Webex Contact Center metadata extension.
closed_atThe interaction closed timestamp carried in the Webex Contact Center metadata extension.
customer_nameThe customer display name when available in the archived interaction metadata.
customer_addressThe customer identity or address for the interaction, for example ANI, origin, or channel-specific identity.
business_addressThe business identity for the interaction, for example destination or business identity.
channel_typeThe Webex Contact Center media family for the interaction, such as social, chat, or email.
channelThe specific digital channel for the interaction, such as facebook, web, or email.
WxCC task_attachment Extension

task_attachment is a Webex Contact Center-specific vCon extension carried on each attachment object.

task_attachment keyGuidance
filesizeAttachment size when available in the archived metadata.
cidContent identifier when applicable for the attachment type.
droppedIndicates whether the attachment was dropped from transcript attachment handling. This behavior applies across digital channels. When true, the attachment entry can still remain in attachments[] and stay linked to its owning dialog[] and parties[] entries, but consumers must not attempt to download or decrypt that attachment.
encryptedIndicates whether the stored attachment bytes are encrypted.
encryption_detailsCarries the decryption metadata needed when encrypted is true. Use this together with the downloaded attachment bytes during decryption. When encrypted is false, the object remains present with empty jwe and keyUri values.

The following examples show common attachment states that can appear across schema-versioned digital transcripts. Attachment examples are shortened for readability.

Encrypted attachment:

{
  "start": "2024-11-28T09:40:00.000+00:00",
  "dialog": 0,
  "party": 0,
  "filename": "test.pdf",
  "mediatype": "application/octet-stream",
  "url": "https://api.example.ciscoccservice.com/v1/organization/cb5901fb-ab66-4377-a7bc-5f0b21896952/channel/cmChannelD/interaction/1ca7d89e-6a50-48e2-ab7c-8f3520cead79/attachment/0001acd1-a091-423c-9f80-57e6409e80c0",
  "content_hash": "sha-512:ee94f5b136e108a7b8ff470cb1e4cb19dd9cea403310f6670a845d9eb202e07b749e741b011175d24c8f82f1bffe2687b1ed4f71575d8eec48b24a6193094373",
  "task_attachment": {
    "filesize": 19505,
    "cid": null,
    "dropped": false,
    "encrypted": true,
    "encryption_details": {
      "jwe": "<JWE>",
      "keyUri": "kms://kms-us-int.wbx2.com/keys/35fb9b4f-1a5a-49b0-b1c6-cbc30000c40b"
    }
  }
}

Non-encrypted attachment:

{
  "start": "2026-07-15T08:47:01.955+00:00",
  "dialog": 9,
  "party": 0,
  "filename": "SamplePdfForTest.pdf",
  "mediatype": "application/pdf",
  "url": "https://api.example.ciscoccservice.com/v1/organization/a31d00ef-66a8-40c1-89d8-b7c09bee43e7/channel/appleMessages/interaction/72d3e37b-3306-fa0a-ef8f-8cd098482abd/attachment/948376a5-c7a2-4598-9436-51dea823c95e",
  "content_hash": "sha-512:38418076c0b55fac16161d1160ea4be25d1bcfcc557dc0f5257cf75d58f35c4735d1dc04d6b62efdaa0c180794ce0fc66095fa129cccca1865395b38e94e998b",
  "task_attachment": {
    "filesize": 17826,
    "cid": null,
    "dropped": false,
    "encrypted": false,
    "encryption_details": {
      "jwe": "",
      "keyUri": ""
    }
  }
}

Dropped attachment:

{
  "start": "2026-07-16T09:38:01.123+00:00",
  "dialog": 5,
  "party": 2,
  "filename": "Unknown file",
  "mediatype": "text/plain",
  "url": "",
  "content_hash": null,
  "task_attachment": {
    "filesize": null,
    "cid": null,
    "dropped": true,
    "encrypted": false,
    "encryption_details": {
      "jwe": "",
      "keyUri": ""
    }
  }
}
Channel-Specific Examples
Facebook Schema-Versioned Examples

Facebook uses task_metadata.channel_type: "social" and task_metadata.channel: "facebook".

Facebook schema-versioned transcript bodies use the following semanticType values:

  • text
  • text-with-attachments

Facebook-specific behavior:

  • Facebook transcript bodies use semanticType: "text" for plain text and announcement rows.
  • Facebook transcript bodies use semanticType: "text-with-attachments" for messages that carry attachments.
  • Facebook attachment-only messages use semanticType: "text-with-attachments" with textWithAttachments: ""; the attachment details are represented in top-level attachments[].
  • Multiple attachments sent in the same Facebook message reference the same owning dialog[] entry through attachments[].dialog.
  • task_metadata.customer_address and task_metadata.business_address carry the Facebook customer and business identities for the interaction.
  • Facebook does not support rich-message payload families in this feature, so this guide does not include Facebook rich-message examples.

The following representative sample shows the archived Facebook vCon structure.

{
  "uuid": "0f163559-7b8f-4107-949c-68e2d367e984",
  "vcon": "0.4.0",
  "created_at": "2026-07-13T12:49:07.311+00:00",
  "extensions": [
    "task_metadata",
    "task_attachment"
  ],
  "critical": [
    "task_metadata",
    "task_attachment"
  ],
  "task_metadata": {
    "task_id": "0f163559-7b8f-4107-949c-68e2d367e984",
    "created_at": "2026-07-13T12:46:20.916+00:00",
    "closed_at": "2026-07-13T12:49:02.811+00:00",
    "customer_name": "Customer",
    "customer_address": "27483629447932076",
    "business_address": "391273087404701",
    "channel_type": "social",
    "channel": "facebook"
  },
  "parties": [
    {
      "uuid": "27483629447932076",
      "name": "{\"first_name\":\"Customer\",\"last_name\":\"\",\"full_name\":\"Customer\"}",
      "role": "customer"
    },
    {
      "uuid": "system",
      "name": "{\"first_name\":\"System\",\"last_name\":\"\",\"full_name\":\"System\"}",
      "role": "system"
    },
    {
      "uuid": "agent",
      "name": "{\"first_name\":\"Agent\",\"last_name\":\"\",\"full_name\":\"Agent\"}",
      "role": "agent"
    },
    {
      "uuid": "bda4dcab-cb7f-4fce-82e8-494a587c8a36",
      "name": "{\"first_name\":\"Avery\",\"last_name\":\"Shaw\",\"full_name\":\"Avery Shaw\"}",
      "role": "agent"
    }
  ],
  "dialog": [
    {
      "type": "text",
      "start": "2026-07-13T12:46:20.916+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Hi, I need help with my booking.\"}",
      "message_id": "09374faf-9754-412b-a669-e60016933fff"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:46:24.269+00:00",
      "parties": [
        1
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"13 Jul 2026 05:46:24 - The chat has been moved to queue by the system\"}",
      "message_id": "9f514b31-ebb2-4dbb-9654-d08b685988e6"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:46:28.889+00:00",
      "parties": [
        2
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"Please review the attached policy document.\"}",
      "message_id": "f6ec7101-247a-4e15-ad7a-dddc6c9a6053"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:46:44.979+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"I attached my booking confirmation.\"}",
      "message_id": "85d28f94-9dcb-46d5-8cfb-fb75452d7b13"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:46:45.984+00:00",
      "parties": [
        1
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"13 Jul 2026 05:46:45 - This is an announcement test\"}",
      "message_id": "4902980a-88ff-45da-a178-1546bee068c9"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:46:52.785+00:00",
      "parties": [
        1
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"13 Jul 2026 05:46:52 - Participant: bda4dcab-cb7f-4fce-82e8-494a587c8a36 has joined the conversation\"}",
      "message_id": "7a70313f-d1ce-49f7-94cc-4253ba907413"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:47:24.236+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"I want to discuss my flight booking and shared the confirmation for reference.\"}",
      "message_id": "80fb3ad4-8786-45b1-95ee-e4ff90248ffe"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:47:25.468+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"\"}",
      "message_id": "2573d0de-f081-4008-b150-8777d444808e"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:47:26.963+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"\"}",
      "message_id": "977d402d-f427-44a3-97e3-a41e5812012c"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:47:56.904+00:00",
      "parties": [
        3
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"I am sharing the updated itinerary and invoice.\"}",
      "message_id": "a88bdfac-a456-4090-8fae-c542f76920cf"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:48:09.908+00:00",
      "parties": [
        0
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Thank you.\"}",
      "message_id": "4598e474-1071-414e-8812-3be199ad4519"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:48:20.490+00:00",
      "parties": [
        3
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"You are welcome. Have a good day.\"}",
      "message_id": "06563967-dfd1-4361-8783-f4e7937b841c"
    },
    {
      "type": "text",
      "start": "2026-07-13T12:49:03.843+00:00",
      "parties": [
        1
      ],
      "mediatype": "application/json",
      "encoding": "none",
      "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"13 Jul 2026 05:49:03 - Chat has been CLOSED by ChatAPI\"}",
      "message_id": "5c7a1966-6aa5-4d9b-9f09-76e8f8bc5def"
    }
  ],
  "attachments": [
    {
      "start": "2026-07-13T12:46:28.889+00:00",
      "dialog": 2,
      "party": 2,
      "filename": "policy-document.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/de362ad6-5e33-427b-af4b-47b7491ef656",
      "content_hash": "sha-512:5cc8f2cc7512b1cdafbcc98d22ce1eb59c25856e6c59247fb1e081a62a93e96c445ec2baec17761d5ea168e0c323b0313e51e3964e4c9360f63f11216ca14d18",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    },
    {
      "start": "2026-07-13T12:46:44.979+00:00",
      "dialog": 3,
      "party": 0,
      "filename": "booking-confirmation.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/e2c302c6-989e-4d5c-b333-bb9c8b961565",
      "content_hash": "sha-512:5cc8f2cc7512b1cdafbcc98d22ce1eb59c25856e6c59247fb1e081a62a93e96c445ec2baec17761d5ea168e0c323b0313e51e3964e4c9360f63f11216ca14d18",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    },
    {
      "start": "2026-07-13T12:47:25.468+00:00",
      "dialog": 7,
      "party": 0,
      "filename": "fare-rules.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/7827c2bf-e374-4626-8b52-8ddd1e29fbd9",
      "content_hash": "sha-512:75ebf4dc70c71fd3d445c500e3fca3bdee6bf98cc3273179f8f2189f3b12ae88edb6c1f8bc1eccce728c95d5230b57d5183d0d6226a22bc318f29c7bfbbbd643",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    },
    {
      "start": "2026-07-13T12:47:26.963+00:00",
      "dialog": 8,
      "party": 0,
      "filename": "additional-fare-rules.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/f50afbbb-6344-4a69-ba15-2a9fcca533bc",
      "content_hash": "sha-512:5ba76e29fef4bbc7aaeccb537844ed89323ac7c2831b158017d00e62de1988e639a1f66ea7f30f59e56128b607cd83f577eebe055611629591e2fe4230d153b5",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    },
    {
      "start": "2026-07-13T12:47:56.904+00:00",
      "dialog": 9,
      "party": 3,
      "filename": "updated-itinerary.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/a0979d83-010c-49b7-a438-e400adc23c8b",
      "content_hash": "sha-512:9205279dff1dbff687179c17a38c8015cdc89c1ebfaeaf220af54573e85aa9c506153def4103bd3fa9e38657559106a06a8eb835a99c042600dac772c46871a4",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    },
    {
      "start": "2026-07-13T12:47:56.904+00:00",
      "dialog": 9,
      "party": 3,
      "filename": "invoice-summary.pdf",
      "mediatype": "application/pdf",
      "url": "https://api.example.ciscoccservice.com/v1/organization/56bbfaf9-5767-4971-8e1e-b5b737dfc08c/channel/facebook/interaction/0f163559-7b8f-4107-949c-68e2d367e984/attachment/e1ca266c-7cb6-48b4-859a-cf127e8ed669",
      "content_hash": "sha-512:346d5a2dae703e17939a1ecca4b643bca38ebc486ebb6ddda422f0269db6fc1c127c5f6d6919617c54f5af97d856159802cd6ec98ff6de25adbd673b12298ad7",
      "task_attachment": {
        "filesize": 13264,
        "cid": null,
        "dropped": false,
        "encrypted": true,
        "encryption_details": {
          "jwe": "<JWE>",
          "keyUri": "kms://kms-us-int.wbx2.com/keys/562c3f9f-c236-460b-b1f0-5400fadac1df"
        }
      }
    }
  ]
}

The following examples show the parsed JSON value of dialog[].body for Facebook semantic types. Field names and nesting follow the archived Facebook vCon structure.

Plain text:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Hi, I need help with my booking."
}

Text with attachments:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-attachments",
  "textWithAttachments": "Please review the attached policy document."
}
Apple Messages Schema-Versioned Examples

Apple Messages uses task_metadata.channel_type: "social" and task_metadata.channel: "appleMessages".

Apple Messages schema-versioned transcript bodies use the following semanticType values:

  • text
  • text-with-attachments
  • amb-quick-replies
  • amb-quick-replies-response
  • amb-list-picker
  • amb-list-picker-response
  • amb-time-picker
  • amb-time-picker-response
  • amb-form
  • amb-form-response
  • amb-rich-link

Apple Messages-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • Plain text and announcement rows use semanticType: "text".
  • Apple Messages attachment rows use semanticType: "text-with-attachments" with message text in textWithAttachments; attachment metadata is represented in top-level attachments[].
  • Apple Messages attachment-only rows also use semanticType: "text-with-attachments" with attachment metadata in top-level attachments[].
  • Outbound Apple Messages rich templates that are supported as agent templates preserve the semantic type and use an empty payload object for both flow-generated and agent-authored rows. The full outbound template JSON is not included in the transcript body.
  • Customer replies to Apple Messages rich templates preserve response payloads in the corresponding response object.
  • amb-rich-link is an outbound rich template semantic type and uses an empty ambRichLink object.

The following excerpt shows archived Apple Messages vCon dialog entries, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2026-07-15T08:45:25.759+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Hello\"}",
    "message_id": "e72a1086-50d0-45a5-aa0a-14b9f272c5cf"
  },
  {
    "type": "text",
    "start": "2026-07-15T08:45:25.759+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"amb-quick-replies\",\"ambQuickReplies\":{}}",
    "message_id": "287074e5-282f-4783-845c-29443d231e95"
  },
  {
    "type": "text",
    "start": "2026-07-15T08:45:52.309+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"amb-quick-replies-response\",\"ambQuickRepliesResponse\":{\"quickReply\":{\"selectedIdentifier\":\"OptionB\",\"items\":[{\"identifier\":\"OptionA\",\"title\":\"OptionA\"},{\"identifier\":\"OptionB\",\"title\":\"OptionB\"}],\"selectedIndex\":1}}}",
    "message_id": "85f6d3f4-0caa-4bdb-80dc-b337b2d7d1a6"
  },
  {
    "type": "text",
    "start": "2026-07-15T08:50:45.582+00:00",
    "parties": [
      3
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"Sample Text with attachment\"}",
    "message_id": "057bec3e-c14d-49b9-9ad9-16cd5893ede2"
  }
]

The following examples show the parsed JSON value of dialog[].body for Apple Messages semantic types. Field names and nesting follow the archived Apple Messages vCon structure. Long text values and repeated array items are shortened for readability.

Plain text:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Hello"
}

Text with attachments:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-attachments",
  "textWithAttachments": "Sample Text with attachment"
}

Outbound quick replies template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-quick-replies",
  "ambQuickReplies": {}
}

Quick replies response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-quick-replies-response",
  "ambQuickRepliesResponse": {
    "quickReply": {
      "selectedIdentifier": "OptionB",
      "items": [
        {
          "identifier": "OptionA",
          "title": "OptionA"
        },
        {
          "identifier": "OptionB",
          "title": "OptionB"
        }
      ],
      "selectedIndex": 1
    }
  }
}

Outbound list picker template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-list-picker",
  "ambListPicker": {}
}

List picker response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-list-picker-response",
  "ambListPickerResponse": {
    "replyMessage": {
      "imageIdentifier": "be66344e-f5eb-1ba3-38cd-7250ff8744fc",
      "style": "icon",
      "alternateTitle": "Option C",
      "title": "Option C"
    },
    "listPicker": {
      "otherItemCount": 2,
      "selectedItemCount": 1,
      "otherItems": [
        {
          "identifier": "first option",
          "style": "default",
          "title": "Option A",
          "url": "https://s3.amazonaws.com/appleattachment/e014fbdb-647e-48a2-8b94-28a76a9eda9c.jpeg",
          "order": "0"
        }
      ],
      "selectedItems": [
        {
          "identifier": "third option",
          "style": "default",
          "title": "Option C",
          "url": "https://s3.amazonaws.com/appleattachment/c0c2fad7-8ca6-4b36-a345-bf29b944b303.jpeg",
          "order": "0"
        }
      ]
    }
  }
}

Outbound time picker template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-time-picker",
  "ambTimePicker": {}
}

Time picker response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-time-picker-response",
  "ambTimePickerResponse": {
    "replyMessage": {
      "style": "small",
      "alternateTitle": "26 Jul 2026 at 4:41 PM",
      "title": "26 Jul 2026 at 4:41 PM"
    },
    "datePicker": {
      "identifier": "1",
      "timezoneOffset": "330",
      "location": {},
      "title": "TimeSlot1",
      "timeslots": [
        {
          "duration": "3000",
          "identifier": "1",
          "startTime": "2026-07-26T11:11+0000"
        }
      ]
    }
  }
}

Outbound form template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-form",
  "ambForm": {}
}

Form response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-form-response",
  "ambFormResponse": {
    "replyMessage": {
      "imageIdentifier": "vimg3",
      "subtitle": "Thanks for your patience. You ll hear from us shortly",
      "style": "icon",
      "alternateTitle": "Youve successfully submitted the form",
      "title": "Youve successfully submitted the form"
    },
    "formMessage": {
      "template": "messageForms",
      "private": true,
      "selections": [
        {
          "pageIdentifier": "0",
          "subtitle": "Select one of the purchased products for which theres a complain?",
          "title": "Select the Defective Product",
          "items": [
            {
              "identifier": "102",
              "imageIdentifier": "vimg2",
              "title": "Tulips Air Fryer",
              "type": "select",
              "value": "airfryer"
            }
          ]
        }
      ],
      "version": "1.2"
    }
  }
}

Outbound rich link template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "amb-rich-link",
  "ambRichLink": {}
}
WhatsApp Schema-Versioned Examples

WhatsApp uses task_metadata.channel_type: "social" and task_metadata.channel: "whatsapp".

WhatsApp schema-versioned transcript bodies use the following semanticType values:

  • text
  • text-with-attachments
  • attachments
  • wab-list
  • wab-buttons
  • wab-interactive-response
  • whatsapp-registered-template

WhatsApp-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • Plain text and announcement rows use semanticType: "text".
  • WhatsApp text-with-attachment rows use semanticType: "text-with-attachments" with message text in textWithAttachments; attachment metadata is represented in top-level attachments[].
  • WhatsApp pure attachment rows use semanticType: "attachments" with attachments: ""; attachment metadata is represented in top-level attachments[].
  • Flow-generated WhatsApp list and button messages use semanticType: "wab-list" and semanticType: "wab-buttons" and include full payload objects under wabList and wabButtons.
  • Customer replies to WhatsApp interactive messages use semanticType: "wab-interactive-response" and include the selected title and identifier under wabInteractiveResponse.
  • WhatsApp registered template messages are supported as agent templates. In this rollout phase, outbound registered-template rows preserve semanticType: "whatsapp-registered-template" and use an empty whatsappRegisteredTemplate object.

The following excerpt shows archived WhatsApp vCon dialog entries, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2026-07-16T07:31:07.000+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Hi\"}",
    "message_id": "59c7c483-9cdb-4c2a-9514-6d2c2d261f34"
  },
  {
    "type": "text",
    "start": "2026-07-16T07:31:14.799+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"wab-list\",\"wabList\":{\"header\":{\"type\":\"text\",\"text\":\"your text\"},\"body\":{\"text\":\"your-text-body-content\"},\"footer\":{\"text\":\"your-text-footer-content\"},\"action\":{\"button\":\"cta-button-content\",\"sections\":[{\"title\":\"section-title-content\",\"rows\":[{\"id\":\"unique-row-identifier\",\"title\":\"row-title-content\",\"description\":\"row-description-content\"}]}]}}}",
    "message_id": "8e15bbce-b90a-4b3e-a6b7-97e656b7c77e"
  },
  {
    "type": "text",
    "start": "2026-07-16T07:31:16.807+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"wab-interactive-response\",\"wabInteractiveResponse\":{\"title\":\"Option 1\",\"identifier\":\"b0c75e59-3196-442d-9de5-bafaaa83b402\"}}",
    "message_id": "e83b9e7c-fc2c-4aed-bbec-8a513b778566"
  },
  {
    "type": "text",
    "start": "2026-07-16T07:34:35.831+00:00",
    "parties": [
      3
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"whatsapp-registered-template\",\"whatsappRegisteredTemplate\":{}}",
    "message_id": "7012a7e6-b451-4c2b-abf4-7f33e5378445"
  }
]

The following examples show the parsed JSON value of dialog[].body for WhatsApp semantic types. Field names and nesting follow the archived WhatsApp vCon structure. Long text values and repeated array items are shortened for readability.

Plain text:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Hi"
}

Text with attachments:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-attachments",
  "textWithAttachments": "Message is resolved"
}

Pure attachments:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "attachments",
  "attachments": ""
}

WhatsApp list:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "wab-list",
  "wabList": {
    "header": {
      "type": "text",
      "text": "your text"
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "button": "cta-button-content",
      "sections": [
        {
          "title": "section-title-content",
          "rows": [
            {
              "id": "unique-row-identifier",
              "title": "row-title-content",
              "description": "row-description-content"
            }
          ]
        }
      ]
    }
  }
}

WhatsApp buttons:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "wab-buttons",
  "wabButtons": {
    "header": {
      "type": "text",
      "text": "your text",
      "document": {
        "url": "your-media-url",
        "filename": "some-file-name"
      },
      "video": {
        "url": "your-media-url"
      },
      "image": {
        "url": "your-media-url"
      }
    },
    "body": {
      "text": "your-text-body-content"
    },
    "footer": {
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button's Title"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button's Title"
          }
        }
      ]
    }
  }
}

WhatsApp interactive response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "wab-interactive-response",
  "wabInteractiveResponse": {
    "title": "Option 1",
    "identifier": "b0c75e59-3196-442d-9de5-bafaaa83b402"
  }
}

WhatsApp registered template:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "whatsapp-registered-template",
  "whatsappRegisteredTemplate": {}
}
Custom Messaging Schema-Versioned Examples

Custom Messaging uses task_metadata.channel_type: "customMessaging" and task_metadata.channel contains the configured custom channel name, such as retailSupport.

Custom Messaging schema-versioned transcript bodies use the following semanticType values:

  • text
  • text-with-attachments

Custom Messaging-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • Plain text and announcement rows use semanticType: "text".
  • Custom Messaging text-with-attachment rows use semanticType: "text-with-attachments" with message text in textWithAttachments; attachment metadata is represented in top-level attachments[].
  • Custom Messaging transcripts do not emit a pure attachments semantic type.
  • Custom Messaging supports encrypted, non-encrypted, and dropped attachment entries using the common task_attachment extension shape documented above.
  • For most channels today, there is no customer-configurable way to emit bypassTranscript: true. Custom Messaging is the exception: when the Send Message or Receive Message activity in Flow Builder is configured to bypass transcript append, that message is not included in the transcript. Messages that are included in the transcript have bypassTranscript: false.

The following excerpt shows archived Custom Messaging vCon dialog entries, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2024-11-28T09:40:00.000+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":true,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"Customer sent a redacted card number: XXXXXXXXXXXXXXX\"}",
    "message_id": "5663dec2-4efa-4f69-8ef5-bb95c265f1e6"
  },
  {
    "type": "text",
    "start": "2026-07-16T09:37:55.674+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Sample Text from flow\"}",
    "message_id": "c2f67b13-f280-45cd-b9e9-95307444f7ab"
  },
  {
    "type": "text",
    "start": "2026-07-16T09:37:58.462+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"Sample text with non PCI attachment\"}",
    "message_id": "bdd3c95e-6828-4b70-a808-841231bdbc77"
  },
  {
    "type": "text",
    "start": "2026-07-16T09:47:25.480+00:00",
    "parties": [
      1
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"16 Jul 2026 02:47:25 - Chat has been CLOSED by ChatAPI\"}",
    "message_id": "40d482b2-6846-4eb5-aed1-5389a2fd6793"
  }
]

The following examples show the parsed JSON value of dialog[].body for Custom Messaging semantic types. Field names and nesting follow the archived Custom Messaging vCon structure.

Plain text:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Sample Text from flow"
}

Text with attachments:

{
  "direction": "inbound",
  "redacted": true,
  "bypassTranscript": false,
  "semanticType": "text-with-attachments",
  "textWithAttachments": "Customer sent a redacted card number: XXXXXXXXXXXXXXX"
}
Livechat Schema-Versioned Examples

Livechat uses task_metadata.channel_type: "chat" and task_metadata.channel: "web".

Livechat schema-versioned transcript bodies use the following semanticType values:

  • text
  • text-with-attachments
  • text-with-lc-quick-replies
  • lc-quick-replies-response
  • text-with-lc-carousel
  • lc-carousel-response
  • lc-form-response

Livechat-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • After parsing dialog[].body, rich-message payloads are represented as nested JSON objects such as lcQuickReplies, lcQuickRepliesResponse, lcCarousel, lcCarouselResponse, and lcFormResponse.
  • Rich-message text values are emitted exactly as stored for the interaction.
  • Livechat quick reply and carousel postback payload values are developer-defined and can be objects, such as { "val": "yes" } and {}. Consumers must not assume payload is always a string.
  • Livechat form responses use lcFormResponse.fields[] to carry field metadata such as label, name, type, value, and mandatory when present.
  • text-with-attachments uses textWithAttachments inside dialog[].body, while attachment metadata is represented in top-level attachments[].
  • Livechat attachment-only messages use semanticType: "text-with-attachments" with textWithAttachments: ""; the attachment details are represented in top-level attachments[].
  • When a Livechat transcript has attachments, extensions and critical include both task_metadata and task_attachment. When there are no attachments, they include only task_metadata.

The following excerpt shows archived Livechat vCon dialog entries for each Livechat semanticType, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2026-07-14T09:51:00.586+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"Hi\"}",
    "message_id": "c323332a-53fe-4459-8277-77792cf26938"
  },
  {
    "type": "text",
    "start": "2026-07-14T09:51:24.058+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-attachments\",\"textWithAttachments\":\"yes\"}",
    "message_id": "9507301e-a890-4548-91ed-51637eb934fe"
  },
  {
    "type": "text",
    "start": "2026-07-14T09:51:01.451+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-lc-quick-replies\",\"lcQuickReplies\":{\"text\":\"Hello John &#128075;, \\n\\nI&#39;m Wilbur - Acme Airlines&#39;s virtual assistant! I understand you are currently looking for other options to modify your Booking Ref:  0 ? &#129300;\\n\\nIf yes, please click on &#39;Yes&#39; \",\"reference\":\"Other options\",\"options\":[{\"type\":\"quickReplyPostback\",\"identifier\":\"1\",\"title\":\"Yes\",\"payload\":{\"val\":\"yes\"},\"imageUrl\":\"\"},{\"type\":\"quickReplyPostback\",\"identifier\":\"2\",\"title\":\"No\",\"payload\":{\"val\":\"no\"},\"imageUrl\":\"\"}]}}",
    "message_id": "a61ab200-2e07-414d-bcfa-648b7909b034"
  },
  {
    "type": "text",
    "start": "2026-07-14T09:51:03.418+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"lc-quick-replies-response\",\"lcQuickRepliesResponse\":{\"reference\":\"Other options\",\"identifier\":\"1\",\"title\":\"Yes\",\"payload\":{\"val\":\"yes\"},\"imageUrl\":\"\"}}",
    "message_id": "2257aff2-468e-49d1-be3c-075b12462733"
  },
  {
    "type": "text",
    "start": "2026-07-14T09:51:11.483+00:00",
    "parties": [
      2
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"outbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text-with-lc-carousel\",\"lcCarousel\":{\"reference\":\"Flight Options\",\"text\":\"Perfect! &#128526; You have selected the following flight below. Kindly validate your details with this option and click on &#39;Confirm Flight&#39; to proceed - only a few steps away now &#128521;\",\"elements\":[{\"title\":\"Option 2 - JFK ✈️ AMS\",\"subtitle\":\"**VB824 - JFK ✈️ LHR** \\n Departs: 23rd Feb &#39;24 10:20 A.M \\n Arrives: 23rd Feb &#39;24 15:22 A.M \\n \\n **--- Layover - 2 hours ---** \\n \\n **VB824 - LHR ✈️ AMS** \\n Departs: 23rd Feb &#39;24 05:20 P.M \\n Arrives: 23rd Feb &#39;24 08:00 P.M \\n \\n **--------------** \\n **Baggage:** \\n - Check-in: 2 * 23 kgs \\n - Cabin: 1* 7kg\",\"imageUrls\":[\"https://t3.ftcdn.net/jpg/00/01/47/28/360_F_1472821_kMjcU0El8NkcU0k7zNtlVTU0Fl8W2l.jpg\"],\"buttons\":[{\"identifier\":\"7c1ae711-0ea8-437b-a00a-7d3a9d29378f\",\"type\":\"templatePostback\",\"title\":\"Confirm Flight\",\"url\":null,\"payload\":{}}]}]}}",
    "message_id": "a78e644a-9267-4190-811c-f26b35d51823"
  },
  {
    "type": "text",
    "start": "2026-07-14T09:51:15.388+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"lc-carousel-response\",\"lcCarouselResponse\":{\"reference\":\"Flight Options\",\"identifier\":\"7c1ae711-0ea8-437b-a00a-7d3a9d29378f\",\"title\":\"Confirm Flight\",\"payload\":{}}}",
    "message_id": "83ad1747-7cf2-4efc-af53-2df359314cd7"
  },
  {
    "type": "text",
    "start": "2026-07-14T10:00:38.915+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"lc-form-response\",\"lcFormResponse\":{\"reference\":null,\"title\":\"Hi There\",\"fields\":[{\"label\":\"Name\",\"name\":\"Name\",\"type\":\"name\",\"value\":\"test user 1\",\"mandatory\":true},{\"label\":\"Email\",\"name\":\"Email\",\"type\":\"email\",\"value\":\"testuser@test.com\",\"mandatory\":true}]}}",
    "message_id": "7f8c2815-f3f9-4131-98c1-4f54d0c2245f"
  }
]

The following examples show the parsed JSON value of dialog[].body for each Livechat semantic type. Field names, nesting, semantic types, and payload-value shapes follow the archived Livechat vCon structure. Long text values and repeated array items are shortened for readability.

Plain text:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Hi"
}

Text with attachments:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-attachments",
  "textWithAttachments": "yes"
}

Quick replies:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-lc-quick-replies",
  "lcQuickReplies": {
    "text": "Hello John &#128075;, please click on &#39;Yes&#39;",
    "reference": "Other options",
    "options": [
      {
        "type": "quickReplyPostback",
        "identifier": "1",
        "title": "Yes",
        "payload": {
          "val": "yes"
        },
        "imageUrl": ""
      },
      {
        "type": "quickReplyPostback",
        "identifier": "2",
        "title": "No",
        "payload": {
          "val": "no"
        },
        "imageUrl": ""
      }
    ]
  }
}

Quick reply response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "lc-quick-replies-response",
  "lcQuickRepliesResponse": {
    "reference": "Other options",
    "identifier": "1",
    "title": "Yes",
    "payload": {
      "val": "yes"
    },
    "imageUrl": ""
  }
}

Carousel:

{
  "direction": "outbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text-with-lc-carousel",
  "lcCarousel": {
    "reference": "Flight Options",
    "text": "Great news! I&#39;ve been able to find a couple of options that match your travel dates!",
    "elements": [
      {
        "title": "Option 1 - JFK to AMS",
        "subtitle": "**VB824 - JFK to LHR**\nDeparts: 23rd Feb &#39;24 08:25 A.M\nArrives: 23rd Feb &#39;24 12:20 A.M",
        "imageUrls": [
          "https://www.libertytravel.com/sites/default/files/styles/full_size/public/flight-hero.jpg"
        ],
        "buttons": [
          {
            "identifier": "7c1ae711-0ea8-437b-a00a-7d3a9d29378f",
            "type": "templatePostback",
            "title": "Select Flight",
            "url": null,
            "payload": {}
          }
        ]
      }
    ]
  }
}

Carousel response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "lc-carousel-response",
  "lcCarouselResponse": {
    "reference": "Flight Options",
    "identifier": "7c1ae711-0ea8-437b-a00a-7d3a9d29378f",
    "title": "Select Flight",
    "payload": {}
  }
}

Form response:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "lc-form-response",
  "lcFormResponse": {
    "reference": null,
    "title": "Hi There",
    "fields": [
      {
        "label": "Name",
        "name": "Name",
        "type": "name",
        "value": "test user 1",
        "mandatory": true
      },
      {
        "label": "Email",
        "name": "Email",
        "type": "email",
        "value": "testuser@test.com",
        "mandatory": true
      }
    ]
  }
}
Email Schema-Versioned Examples

Email uses task_metadata.channel_type: "email" and task_metadata.channel: "email". Email vCon also includes the email subject as a top-level field.

Email schema-versioned transcript bodies use the following semanticType values:

  • email
  • text

Email-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • Email messages use semanticType: "email" and carry the email payload under email.
  • Email message rows can be inbound or outbound; both directions use the same email object shape.
  • email.from is an address object with mailto.
  • email.to, email.cc, and email.bcc are arrays of address objects with mailto.
  • email.headers is an object of header key/value pairs, such as MESSAGE-ID, REFERENCES, and IN-REPLY-TO.
  • email.bodyPlain and email.bodyHtml carry the plain-text and HTML body representations.
  • email.contentType identifies the email body content type.
  • The top-level vCon subject carries the email subject for the interaction. The parsed email payload also carries email.subject.
  • Email attachments are represented in top-level attachments[], linked with attachments[].dialog and attachments[].party, same as other channels.
  • Email lifecycle and announcement rows use semanticType: "text".

The following excerpt follows the archived Email vCon dialog structure, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2026-07-14T10:24:49.876+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"email\",\"email\":{\"subject\":\"Sample Digital Transcripts Email Subject\",\"from\":{\"mailto\":\"customer@example.com\"},\"to\":[{\"mailto\":\"support@example.com\"}],\"cc\":[{\"mailto\":\"agent@example.com\"}],\"bcc\":[],\"bodyPlain\":\"Sample email body for digital transcripts with attachments.\",\"bodyHtml\":\"&lt;div dir=&quot;ltr&quot;&gt;Sample email body for digital transcripts with attachments.&lt;/div&gt;\\r\\n\",\"contentType\":\"text/html\",\"headers\":{\"MESSAGE-ID\":\"<sample-message-id@example.com>\",\"REFERENCES\":\" <sample-message-id@example.com>\",\"IN-REPLY-TO\":\"<sample-message-id@example.com>\"}}}",
    "message_id": "2b6d5237-2fe4-4f00-b15c-f34d9e3dc217"
  },
  {
    "type": "text",
    "start": "2026-07-14T10:24:52.363+00:00",
    "parties": [
      1
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"14 Jul 2026 06:24:52 - agent@example.com has been added to the conversation by customer@example.com\"}",
    "message_id": "01c51c86-e448-44e7-8485-6ec9e2da3f62"
  }
]

The following example shows the parsed JSON value of dialog[].body for an Email message. Field names and nesting follow the archived Email vCon structure.

Email body:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "email",
  "email": {
    "subject": "Sample Digital Transcripts Email Subject",
    "from": {
      "mailto": "customer@example.com"
    },
    "to": [
      {
        "mailto": "support@example.com"
      }
    ],
    "cc": [
      {
        "mailto": "agent@example.com"
      }
    ],
    "bcc": [],
    "bodyPlain": "Sample email body for digital transcripts with attachments.",
    "bodyHtml": "&lt;div dir=&quot;ltr&quot;&gt;Sample email body for digital transcripts with attachments.&lt;/div&gt;\r\n",
    "contentType": "text/html",
    "headers": {
      "MESSAGE-ID": "<sample-message-id@example.com>",
      "REFERENCES": " <sample-message-id@example.com>",
      "IN-REPLY-TO": "<sample-message-id@example.com>"
    }
  }
}
Work Item Schema-Versioned Examples

Work Item transcripts use task_metadata.channel_type: "workItem" and task_metadata.channel contains the configured Work Item channel name.

Work Item schema-versioned transcript bodies use the following semanticType values:

  • work-item-form
  • text

Work Item-specific behavior:

  • Each dialog[].body value is stored as stringified JSON in the vCon transcript.
  • Work Item data snapshots use semanticType: "work-item-form" and carry the snapshot payload under workItem.
  • The workItem object contains the Work Item key-value data captured for that snapshot.
  • Work Item lifecycle and announcement rows use semanticType: "text".
  • Work Item transcripts in this guide do not include attachment metadata, so extensions and critical include task_metadata only.

The following excerpt follows the archived Work Item vCon dialog structure, with body stored as stringified JSON:

[
  {
    "type": "text",
    "start": "2026-07-16T10:26:06.482+00:00",
    "parties": [
      0
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"inbound\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"work-item-form\",\"workItem\":{\"caseId\":\"CASE-1001\",\"priority\":\"High\"}}",
    "message_id": "139badc2-00f9-4fe0-bd6e-7cf7f353819c"
  },
  {
    "type": "text",
    "start": "2026-07-16T10:26:08.144+00:00",
    "parties": [
      1
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"16 Jul 2026 03:26:08 - A new chat has been successfully created by system\"}",
    "message_id": "ca2fe32b-a83e-4b18-80b0-82846bd3d10e"
  },
  {
    "type": "text",
    "start": "2026-07-16T10:28:47.571+00:00",
    "parties": [
      1
    ],
    "mediatype": "application/json",
    "encoding": "none",
    "body": "{\"direction\":\"announcement\",\"redacted\":false,\"bypassTranscript\":false,\"semanticType\":\"text\",\"text\":\"16 Jul 2026 03:28:47 - Chat has been CLOSED by ChatAPI\"}",
    "message_id": "ad20200a-dda2-495a-bb06-6115a707ae00"
  }
]

The following examples show the parsed JSON value of dialog[].body for Work Item semantic types. Field names and nesting follow the archived Work Item vCon structure.

Work Item data snapshot:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "work-item-form",
  "workItem": {
    "caseId": "CASE-1001",
    "priority": "High"
  }
}

Work Item announcement:

{
  "direction": "announcement",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "16 Jul 2026 03:28:47 - Chat has been CLOSED by ChatAPI"
}
SMS Schema-Versioned Guidance

SMS supports plain text transcript rows and announcement rows. SMS does not have rich-message or attachment examples in this guide.

SMS transcript bodies use the common text shape:

{
  "direction": "inbound",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Hi, I need help with my appointment."
}

SMS announcements use the same semanticType: "text" body shape with direction: "announcement":

{
  "direction": "announcement",
  "redacted": false,
  "bypassTranscript": false,
  "semanticType": "text",
  "text": "Sample announcement"
}
Downloading Attachments from Schema-Versioned Digital Transcripts

Unlike the preserved legacy attachment examples above, schema-versioned digital transcripts expose stable Contact Center attachment API URLs in the transcript payload. These are not the final presigned download URLs.

To download an attachment referenced from a schema-versioned digital transcript:

  1. Read the attachment url from the transcript payload.
  2. Make an HTTP GET request to that attachment url using the same bearer token that you use for the Captures API. Optionally pass urlExpiration as a query parameter to request the presigned downloadUrl lifetime in minutes.
  3. Read the downloadUrl returned by that attachment API response.
  4. Make an HTTP GET request to the returned downloadUrl to fetch the exact attachment bytes.

urlExpiration follows the same behavior as Captures URL expiration:

  • If urlExpiration is omitted, the returned downloadUrl expires in 60 minutes.
  • If urlExpiration is greater than 60, the returned downloadUrl expires in 60 minutes.
  • If urlExpiration is 0 or less, the request is rejected with a bad request error.

Example:

curl --request GET \
  --url 'https://api.intgus1.ciscoccservice.com/v1/organization/bb275007-7d49-4fa0-8f84-73e49e44432f/channel/Instagram/interaction/c7a796c1-e64c-46f6-9d77-1ee85e51190a/attachment/4423fed7-8caf-4f47-aa7d-2154a52f8cbf?urlExpiration=30' \
  --header 'authorization: Bearer <same token as capture auth>'
{
  "attachmentId": "4423fed7-8caf-4f47-aa7d-2154a52f8cbf",
  "downloadUrl": "https://example-bucket.s3.amazonaws.com/path/to/attachment?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260626T054139Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=EXAMPLE/20260626/us-east-1/s3/aws4_request&X-Amz-Signature=EXAMPLE",
  "urlExpiration": 30
}

The downloadUrl is the short-lived URL for the actual attachment download. As with transcript filePath URLs, do not persist, log, or expose these presigned URLs beyond what is required for retrieval.

anchorDecrypting Attachments

anchor

The preserved example below applies to the legacy attachment flow shown in the legacy transcript examples above.

For schema-versioned digital transcripts, first call the stable attachment URL present in the transcript with the same Captures API bearer token to obtain a short-lived presigned download URL, then use that returned downloadUrl together with the attachment encryption metadata from the transcript if decryption is required.

The decryption model itself does not change between legacy and schema-versioned digital transcripts. The only difference is how you obtain the downloadable attachment URL before passing the encrypted bytes and encryption metadata into your decryption workflow.

Do not pass the authenticated schema-versioned attachment API URL from the transcript directly into the decryption flow. Resolve it first, download the encrypted bytes from the returned presigned downloadUrl, and then decrypt those bytes.

New
Beta

  1. Encrypted attachments will need to be decrypted using Webex Encryption SDK made available to developers. In order to do this, you'll need the following parameters handy from the transcript.json
  • attachments[i].url
  • legacy format: attachments[i].encrypted and attachments[i].encryptionDetails
  • schema-versioned format: attachments[i].task_attachment.encrypted and attachments[i].task_attachment.encryption_details

The attachment URLs exposed in the transcript.json are protected by CORS. This is not intended for use within browser based apps.

  1. Webex Developer Platform offers a Webex JS SDK encryption plugin that will allow you to decrypt these attachments.
  2. Install the Decryption SDK
npm install --save @webex/plugin-encryption
  1. Below is a sample code that you would need to use in order to decrypt attachments
import Webex from "@webex/plugin-encryption";
import fs from "fs";

// Initialize Webex with access token
const webex = Webex.init({
  credentials: {
    access_token: accessToken,
  },
});

// Example attachment metadata from the transcript JSON
const transcriptAttachment = {
  fileName: "myfile.jpg",
};

// Use a downloadable attachment URL.
// Legacy format: this can be the attachment URL directly from the transcript JSON.
// Schema-versioned format: first resolve the authenticated attachment API URL and use the returned downloadUrl here.
const attachmentUrl = "https://example.com/presigned-download-url";

// Use the filename from the transcript attachment entry so the decrypted file
// is stored with the expected name and extension.
const fileName = transcriptAttachment.fileName;

webex.once("ready", async () => {
  try {
    // Register the cypher
    await webex.cypher.register();

    // The attributes - `jwe` and `keyUri` are to be fetched from the
    // attachment encryption metadata in the `transcript.json`
    const options = {
      useFileService: false,
      // If JWE or keyUri are not in the URL, provide them from the transcript
      // attachment encryption metadata. This is the expected approach for
      // schema-versioned digital transcripts.
      // jwe: 'yourJweValue',
      // keyUri: 'yourKeyUriValue'
    };

    const fileBytes = await webex.cypher.downloadAndDecryptFile(
      attachmentUrl,
      options
    );

    fs.writeFileSync(fileName, fileBytes);
    console.log(`File saved to ${fileName}`);

    // Deregister when done
    await webex.cypher.deregister();
  } catch (error) {
    console.error("Error in encryption process:", error);
    await webex.cypher.deregister();
  }
});
In This Article
  • Overview
  • Migration from Legacy to Schema-Versioned Digital Transcripts
  • Quick Recap - Captures API
  • Dealing with Captures API Response
  • Legacy Transcript JSON Schema Details
  • New Schema-Versioned Digital Transcript Format
  • Decrypting Attachments

Connect

Support

Developer Community

Developer Events

Contact Sales

Handy Links

Webex Ambassadors

Webex App Hub

Resources

Open Source Bot Starter Kits

Download Webex

DevNet Learning Labs

Terms of Service

Privacy Policy

Cookie Policy

Trademarks

© 2026 Cisco and/or its affiliates. All rights reserved.