Transformation Rules - ETL Pipelines
This document outlines the transformation rules and source-to-target data mappings for ETL pipelines.
Explanation of Columns
Target Field
Represents the field name in the target system where the transformed data will be stored.
Source Field (MongoDB)
Specifies the corresponding field in MongoDB from which the data is extracted.
Source Data Type
Defines the data type of the source field in MongoDB (e.g.,
String
,Integer
,DateTime
).
Field Type
Indicates whether the field is an Existing Field (predefined in the system) or a Custom Field (added for specific business needs).
Transformation Rules
Describes the logic applied to convert the source data into the target format.
Transformation Information
Refer to this document Reporting Database Schema
Conversations
conversation
A conversation entity records the customer's conversation details. A conversation consists of all channel sessions where a customer is conversing, the conversation participants (bots, agents, customers) and optionally also some conversation data.
See more about Conversations on Conversation Objects Unique id to identify this conversation
This table only records the essential conversation fields. There are separate tables for conversation data and conversation participants.
Extraction Details
Purpose: Uses an API of the historical reports manager component to fetch the required data.
Source:
conversation-manager_db.conversations
conversation-manager_db.CustomerTopicEvents
API URL:
<FQDN>/historical-reports/stats/conversation?endTime=1900-01-01T00:00:00.000Z&limit=100
Component Description: Makes a REST API call to fetch conversation data from the historical reports manager component.
Target Field | Source Field ( API / MongoDB ) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
conversation_id | _id | ObjectId | Existing |
|
room_id (reserved for future) | none | Existing | Identifies the room this conversation is a part of. Currently, null since a conversation is not a part of any room. | |
customer_id | customer._id | ObjectId | Existing | Unique identifier of the customer associated with the conversation. |
customer_name | customer.firstName | String | Existing | Records the customer name with whom this conversation is associated. |
start_time | creationTime | Date | Existing | Records the date and time when this conversation was started. |
end_time | endTime | Date | Existing | Records the date and time when this conversation was ended. |
conversation_duration | conversationDuration | [INT] | Custom | Stores the total duration of the conversation, calculated as the difference between |
bot_id | botId | String | Existing | Identifier of the bot who was a participant of this conversation. |
task_state | taskState | String | Custom |
|
reason_code | reasonCode | String | Custom |
|
disposition | disposition | String | Custom |
This is the reason why the conversation was closed. The details can be referenced from the document Task Reason Codes
|
direction | conversationDirection | String | Existing | Records the direction of conversation i.e. INBOUND/OUTBOUND. There can be multiple channel sessions (INBOUND/OUTBOUND) in a conversation. We'll consider the conversation's direction based on the first channel session's direction in a conversation. |
conversation_data
A conversation can have key-value pairs to record any arbitrary additional data required. This is known as the conversation data. A single key-value pair for a conversation is inserted as one record in this table.
See Conversation Data for more details.
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source:
conversation-manager_db.conversations
MongoDB Query:
CODE{ "$and": [ { "conversationData": { "$exists": true, "$type": "object", "$ne": {} } } ] }
Field | Source Field ( API / MongoDB ) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
conversation_id | _id | ObjectId | Existing | Identifies the conversation for which this conversation data record is inserted. |
key | key | String | Custom | Any alphanumeric value from conversationData Object. |
value | value | String | Custom | Any alphanumeric value from conversationData Object. |
record_creation_time | endTime | Date | Existing | Records the date and time when this conversation was ended. |
conversation_participant
Conversation participants are the participants that take part in a conversation. For example , customers, bots and agents. Each record in the table represents a Conversation Participant.
Extraction Details
Purpose: Uses an API of the historical reports manager component to fetch the required data.
Source:
conversation-manager_db.conversations
conversation-manager_db.CustomerTopicEvents
API URL:
<FQDN>/historical-reports/stats/conversation/participant?endTime=<last_sync_time>&limit=100
Component Description: Makes a REST API call to fetch conversation participant data from the historical reports manager component.
Field | Source Field ( API / MongoDB ) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
id | Auto-Generated | [nvarchar](50) | Custom | A unique identification of a participation by agent/customer/bot etc. |
participant_id | participantId | String | Existing |
|
conversation_id | conversationId | String | Existing |
|
participant_role (AGENT | CUSTOMER | EXTERNAL) | participantRole | String | Custom | Indicates the role of a participant in the conversation
Derived from Role is determined as follows: |
record_creation_time | recordCreationTime | Timestamp | Existing | Assigned based on |
Activities
voice_activities
A voice activity records the voice conversation details. This includes the start and end time of the conversation, call legs information, customer information, channel session information etc.
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source: MongoDB source to extract data is as follows:
conversation-manager_db.conversationActivities
MongoDB Query:
{"activity.name": "VOICE_ACTIVITY"}
Target Field | Source Field (MongoDB) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
row_id | Auto-Generated | Custom | Primary-Key: Hashing Field to implement upserting operation to prevent loading duplicate data. | |
id | _id | Object ID | Existing | Unique identifier for mongo db record. |
customer_id | customerId | String | Existing | Identifies the customer who is part of this conversation. |
conversation_id | conversationId | String | Existing | Identifies the conversation for which this voice activity data record is inserted. |
channel_session_id | channelSessionId | String | Existing | Identifies the channel session for which this voice activity data record is inserted. |
channel_session_direction | activity.channelSession.channelSessionDirection | String | Existing | Records the direction of channel session i.e. INBOUND/OUTBOUND. There can be multiple channel sessions in a conversation. |
channel_id | activity.channelSession.channel._id | Object ID | Existing | Identifies the channel for which this voice activity data record is inserted. |
channel_name | activity.channelSession.channel.name | String | Existing | Extracts the channel name, that the respective voice activity is a part of. |
channel_customer_identifier | activity.channelSession.channelData.channelCustomerIdentifier | String | Existing | Records the identifier for the respective channel customer of a respective voice activity. |
service_identifier | activity.channelSession.channel.serviceIdentifier | String | Existing | Records the service identifier that the CX solution is deployed on. |
tenant_id | activity.channelSession.channel.tenant._id | Object ID | Existing | Unique identifier for the associated tenant of a conversation. |
customer | activity.channelSession.customer | Object | Existing | Extracts all the customer associated details from a conversation including customer id, name, phone number, etc. It is stored in the form of a JSON object. |
room_id | roomId | String | Existing | Identifies the room this conversation is a part of. |
activity_id | activity._id | Object ID | Existing | Identifies the activity this conversation is a part of. |
activity_name | activity.name | String | Existing | Extracts the type/name of the activity, the conversation is a part of |
activity_timestamp | activity.timestamp | Date | Existing | Extracts the date and time, when the activity was performed. |
event_emitter_id | activity.eventEmitter.id | String | Existing | Identifies the event emitter this conversation is a part of. |
event_emitter_type | activity.eventEmitter.type | String | Existing | Records the type of the event emitter |
state_name | activity.channelSession.state.name | String | Existing | Extracts the state of the conversation from the state object in the channel session object |
state_reason_code | activity.channelSession.state.reasonCode | String | Existing | Records the reason code of the conversation from the state object in the channel session object |
start_time | activity.data.startTime | Date | Existing | Records the date and time when this conversation was started. |
end_time | activity.data.endTime | Date | Existing | Records the date and time when this conversation was ended. |
total_duration | activity.date.duration | Int64 | Existing | Stores the total duration of the conversation. |
conversation_hold_time | activity.data.holdTime | Double | Existing | Records the total hold time of the conversation. |
sender_id | activity.data.callLegs.sender.id | String | Existing | Identifies the sender of the respective conversation. |
sender_type | activity.data.callLegs.sender.type | String | Existing | Extracts the type of the sender of the conversation from the sender object in the call legs array. Sender can be Agent, IVR, etc. |
sender_name | activity.data.callLegs.sender.name | String | Existing | Extracts the name of the sender based on its type. This can be the configured IVR name or the name of the associated agent of the conversation. |
call_leg_start_direction | activity.data.callLegs.startDirection | String | Existing | Extracted from the call leg detail object. Records the start direction of the call legs. Start direction can be:
|
call_leg_end_direction | activity.data.callLegs.endDirection | String | Existing | Extracted from the call leg detail object. Records the end direction of the call legs. End direction can be:
|
call_leg_start_time | activity.data.callLegs.startTime | Date | Existing | Extracted from the call leg detail object. Records the start date and time of the call legs. |
call_leg_end_time | activity.data.callLegs.endTime | Date | Existing | Extracted from the call leg detail object. Records the end date and time of the call legs. |
call_leg_duration | activity.data.callLegs.duration | Int64 | Existing | Extracted from the call leg detail object. Stores the total duration of the call leg. |
recordCreationTime | recordCreationTime | Date | Existing | Assigned based on |
timestamp | timestamp | Date | Existing | Records the date and time of when the activity was performed. |
_etl_inserted_at |
|
| Custom | Date and time when the ETL data pipeline was run and data was inserted in table. |
voice_connector_activities
A voice connector activity records the voice connector conversation details. This includes the start and end time of the conversation, message details, channel details, scheduling meta data, status etc.
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source: MongoDB source to extract data is as follows:
conversation-manager_db.conversationActivities
Mongo DB Query:
{"activity.eventEmitter.senderName": "CX-Voice-Connector"}
Target Field | Source Field (MongoDB) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
activity_id | activity._id | Object ID | Existing | Identifies the activity this voice conversation is a part of. |
activity_name | activity.name | String | Existing | Extracts the name of the activity, the conversation is a part of. |
activity_type | activity.type | String | Existing | Extracts the type of the activity, the conversation is a part of. |
activity_timestamp | activity.timestamp | String | Existing | Extracts the date and time, when the activity was performed. |
event_emitter_id | activity.eventEmitter.id | String | Existing | Identifies the event emitter this conversation is a part of. |
event_emitter_type | activity.eventEmitter.type | String | Existing | Records the type of event emitter |
sender_name | activity.eventEmitter.senderName | String | Existing | Extracts the name of the sender based on its type. This can be the configured IVR name, the name of the associated agent of the conversation, or for this case |
customer_id | docuemnt.customerId | String | Existing | Unique identifier of the customer associated with the conversation. |
customer | activity.data.header.customer | Object | Existing | Extracts all the customer associated details from a conversation including customer id, name, phone number, etc. It is stored in the form of a JSON object. |
channel_session_id | activity.channelSession._id | Object ID | Existing | Identifies the channel session for which this voice activity data record is inserted. |
participant_type | activity.channelSession.participantType | String | Existing | Records the type of the channel session participant. |
channel_id | activity.channelSession.channel._id | Object ID | Existing | Identifies the channel for which this voice activity data record is inserted. |
tenant_id | activity.channelSession.channel.tenant._id | Object ID | Existing | Unique identifier for the associated tenant of a conversation. |
channel_config_id | activity.channelSession.channel.channelConfig._id | Object ID | Existing | Unique identifier for the associated channel config of the conversation. |
channel_connector_id | activity.channelSession.channel.channelConnector._id | Object ID | Existing | Unique identifier for the associated channel connector of the conversation. |
channel_type_id | activity.channelSession.channel.channelType._id | Object ID | Existing | Unique identifier for the associated channel type of the conversation. |
scheduling_meta_data | activity.data.header.schedulingMetaData | Object | Existing | Extracts the all the scheduling meta data details from a conversation including the including date and time, campaign id, campaign type, gateway id, etc. is is stored as a JSON object. |
activity_data_id | activity.data.id | String | Existing | Identifies the activity data this conversation is a part of. |
sender_id | activity.data.header.sender.id | String | Existing | Identifies the sender of this conversation. |
sender_type | activity.data.header.sender.type | String | Existing | Extracts the type of the sender of the conversation from the sender object in the activity data object. |
channel_customer_identifier | activity.data.header.channelData.channelCustomerIdentifier | String | Existing | Records the identifier for the respective channel customer of a respective voice activity. |
service_identifier | activity.data.header.channelData.serviceIdentifier | String | Existing | Records the service identifier that the CX solution is deployed on. |
message_type | activity.data.body.type | String | Existing | Records the type of message sent to the customer for the conversation. |
message_id | activity.data.body.id | String | Existing | Records the identifier for the message sent to the customer. |
message_text | activity.data.body.messageText | Existing | Records the text of the message sent to the customer. | |
status | activity.data.body.status | String | Existing | Extracts the status of the conversation. The status can be:
|
reason_code | activity.data.body.reasonCode | String | Existing | Records the reason code of the conversation. Reason codes can be:
|
room_id | activity.roomInfo._id | Object ID | Existing | Identifies the room of which this conversation is a part of. |
room_mode | activity.roomInfo.mode | String | Existing | Extracts the room mode from the roomInfo object. |
timestamp | timestamp | Date | Existing | Records the date and time of when the activity was performed. |
recordCreationTime | recordCreationTime | Date | Existing | Assigned based on |
_etl_inserted_at |
|
| Custom | Date and time when the ETL data pipeline was run and data was inserted in table. |
Campaigns
campaigns
Campaigns records the campaigns added in the system along with their details. This includes the created at and updated at time stamp, title of campaign, number of contacts in campaigns, status etc. For more details on campaigns refer to the following document: https://expertflow-docs.atlassian.net/wiki/x/CQA8Fg?atlOrigin=eyJpIjoiNjRlZWQ1ZWE1NjhmNDVlZmEyNmZjNmJiMjFlMTg2MWUiLCJwIjoiYyJ9 .
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source: MongoDB source to extract data is as follows:
campaignsDb.campaigns
MongoDB Query: None
Target Field | Source Field (MongoDB) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
id | _id | Object ID | Existing | Unique identifier for mongo db record. |
flow_id | flowId | String | Existing | Unique identifier of the flow builder used to deploy the respective campaign. |
title | title | String | Existing | Extracts the title of the campaign. |
number_of_contacts | numberOfContacts | Int(32) | Existing | Counts and extracts the number of contacts from the csv file uploaded while creating the campaign. |
sources | sources | Array | Existing | Stored an JSON object, records the identifiers of sources of the contacts in the campaign. |
status | status | String | Existing | Extracts the status of the campaign. Campaign can either be:
|
created_at | createdAt | Date | Existing | Extracts the date and time when the campaign was created in the system. |
updated_at | updatedAt | Date | Existing | Extracts the date and time when the campaign was updated in the system. |
version | __v | Int(32) | Existing | Version |
_etl_inserted_at |
|
| Custom | Date and time when the ETL data pipeline was run and data was inserted in table. |
campaign_scheduler
Campaigns scheulder records the data for the scheduled campaigns added in the system along with their details. This includes the customer information, channel session information, scheduling metadata etc. For more details on campaigns refer to the following document: https://expertflow-docs.atlassian.net/wiki/x/CQA8Fg?atlOrigin=eyJpIjoiNjRlZWQ1ZWE1NjhmNDVlZmEyNmZjNmJiMjFlMTg2MWUiLCJwIjoiYyJ9 .
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source: MongoDB source to extract data is as follows:
conversation-manager_db.conversationActivities
MongoDB Query:
{"activity.eventEmitter.senderName": "CAMPAIGN_SCHEDULER"}
Target Field | Source Field (MongoDB) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
activity_id | activity._id | Object ID | Existing | Identifies the activity this conversation is a part of. |
name | activity.name | String | Existing | Extracts the name of the activity, the conversation is a part of. |
type | activity.type | String | Existing | Extracts the type of the activity, the conversation is a part of. |
activity_timestamp | activity.timestamp | Date | Existing | Extracts the date and time, when the activity was performed. |
event_emitter_id | activity.eventEmitter.id | String | Existing | Identifies the event emitter this conversation is a part of. |
event_emitter_type | activity.eventEmitter.type | String | Existing | Records the type of the event emitter |
sender_name | activity.eventEmitter.senderName | String | Existing | Extracts the name of the sender based on its type. This can be the configured IVR name, the name of the associated agent of the conversation, or in this case |
customer_id | document.customerId | String | Existing | Unique identifier of the customer associated with the conversation. |
customer | activity.channelSession.customer | Object | Existing | Extracts all the customer associated details from a conversation including customer id, name, phone number, etc. It is stored in the form of a JSON object. |
channel_session_id | activity.channelSession._id | Object ID | Existing | Identifies the channel session for which this voice activity data record is inserted. |
participant_type | activity.channelSession.type | String | Existing | Records the type of the channel session participant. |
channel_id | activitiy.channelSession.channel._id | Object ID | Existing | Identifies the channel for which this voice activity data record is inserted. |
default_outbound | activity.channelSession.channel.defaultOutbound | Boolean | Existing | Records whether the channel is by default set to Outbound or not. It is stored as Boolean value:
|
tenant_id | activity.channelSession.channel.tenant._id | Object ID | Existing | Unique identifier for the associated tenant of a conversation. |
channel_config_id | activity.channelSession.channel.channelConfig._id | Object ID | Existing | Unique identifier for the associated channel config of the conversation. |
channel_connector_id | activity.channelSession.channel.channelConnector._id | Object ID | Existing | Unique identifier for the associated channel connector of the conversation. |
channel_type_id | activity.channelSession.channel.channelType._id | Object ID | Existing | Unique identifier for the associated channel type of the conversation. |
is_interactive | activity.channelSession.channel.channelType.isInteractive | Boolean | Existing | Records whether the channel type is interactive or not. It is stored as Boolean value:
|
is_active | activity.channelSession.isActive | Boolean | Existing | Records whether the channel session is active or not. It is stored as Boolean value:
|
scheduling_meta_data | activity.data.header.schedulingMetadat | Object | Existing | Extracts the all the scheduling meta data details from a conversation including the including date and time, campaign id, campaign type, gateway id, etc. is is stored as a JSON object. |
activity_data_id | activity.data.id | String | Existing | Identifies the activity data this conversation is a part of. |
sender_id | activity.data.header.sender.id | String | Existing | Identifies the sender of the respective conversation. |
sender_type | activity.data.header.sender.type | String | Existing | Extracts the type of the sender of the conversation from the sender object in the activity data object. |
channel_customer_identifier | activity.data.header.channelData.channelCustomerIdentifier | String | Existing | Extracts the identifier for the respective channel customer of a respective voice activity. |
service_identifier | activity.data.header.channelData.serviceIdentifier | String | Existing | Extracts the service identifier that the CX solution is deployed on. |
message_type | activity.data.body.type | String | Existing | Extracts the type of message sent to the customer. It can be:
|
messageId |
|
| Existing | Records the identifier for the message sent to the customer. |
message_text | activity.data.body.messageText | String | Existing | Extracts the message text sent to the customer. |
status |
|
| Existing | Records the status of the message. It can be:
|
reason_code | activity.data.body.reasonCode | Null | Existing | Records the reason code of the conversation from the body object in the activity data object |
call_id | activity.data.body.callId | Null | Existing | Records the identifier for the call sent to the customer. |
room_id | activity.roomInfo._id | Object ID | Existing | Identifies the room this conversation is a part of. |
room_mode | activity.roomInfo.mode | String | Existing | Extracts the room mode from the roomInfo object. |
timestamp | timestamp | Date | Existing | Records the date and time of when the activity was performed. |
recordCreationTime | recordCreationTime | Date | Existing | Records the date and time of the conversation when the data is pushed in the db. |
_etl_inserted_at |
|
| Custom | Date and time when the ETL data pipeline was run and data was inserted in table. |
Secure Link Generation
secure_link
Secure link records the WebRTC conversation details made through a secure token/link. It consists of details for conversation, channel session, customer, agent, status, reason for expiration etc. For more details regarding secure link generation, refer to the following document: https://expertflow-docs.atlassian.net/wiki/x/BYHm?atlOrigin=eyJpIjoiZmI5NDU4MzAzZTg3NGFlNjgxYmMwOTkzOGFkMjIxYzciLCJwIjoiYyJ9 .
Extraction Details
Purpose: Extracts data from MongoDB based on a specific query.
Source: MongoDB source to extract data is as follows:
conversation-manager_db.conversationActivities
MongoDB Query:
{ "activity.data.body.type": "SLG" }
Target Field | Source Field (MongoDB) | Source Data Type | Field Type | Transformation Rules |
---|---|---|---|---|
row_id | Auto-Generated | Custom | Primary-Key: Hashing Field to implement upserting operation to prevent loading duplicate data. | |
customer_id | customerId | String | Existing | Identifies the customer who is part of this conversation. |
conversation_id | conversationId | String | varchar(255) | Identifies the conversation for which this data record is inserted. |
channel_session_id | channelSession._id | String | Existing | Identifies the channel session for which this data record is inserted. |
activity_id | activity._id | Object Id | Existing | Identifies the activity this conversation is a part of. |
activity_name | activity.name | String | Existing | Extracts the name of the activity, the conversation is a part of |
activity_type | activity.type | String | Existing | Extracts the type of the activity, the conversation is a part of. |
activity_timestamp | activity.timestamp | Date | Existing | Extracts the date and time, when the activity was performed. |
event_emitter_id | activity.eventEmitter._id | Object Id | Existing | Identifies the event emitter this conversation is a part of. |
event_emitter_type | activity.eventEmitter.type | String | Existing | Records the type of event emitter. |
event_emitter_sender_name | activity.eventEmitter.senderName | String | Existing | Extracts the name of the event emitter sender based on its type. This can be the configured IVR name, the name of the associated agent of the conversation, or for this case |
channel_id | activity.channelSession.channel._id | Object Id | Existing | Identifies the channel for which this voice activity data record is inserted. |
channel_name | activity.channelSession.channel.name | String | Existing | Extracts the channel name, that the conversation is a part of. |
service_identifier | activity.channelSession.channel.serviceIdentifier | String | Existing | Records the service identifier that the CX solution is deployed on. |
default_outbound | activity.channelSession.channel.defaultOutbound | Boolean | Existing | Records whether the channel is by default set to Outbound or not. It is stored as Boolean value:
|
tenant_id | activity.channelSession.channel.tenant._id | Object Id | Existing | Unique identifier for the associated tenant of a conversation. |
tenant_name | . | . | Custom | Tenant name to identify the tenant of the conversation (by default set to ‘ |
channel_mode | activity.channelSession.channel.channelConfig.channelMode | String | Existing | Records the Channel Mode. |
channel_connector_id | activity.channelSession.channel.channelConnector._id | Object Id | Existing | Unique identifier for the associated channel connector of the conversation. |
channel_type | activity.channelSession.channel.channelType.name | String | Existing | Records the associated channel type of the conversation. |
customer | activity.channelSession.customer | Object | Existing | Extracts all the customer associated details from a conversation including customer id, name, phone number, etc. It is stored in the form of a JSON object. |
channel_customer_identifier | activity.channelSession.channelData.channelCustomerIdentifier | String | Existing | Records the identifier for the respective channel customer of a conversation. |
room_id | activity.channelSession.roomInfo._id | Object Id | Existing | Identifies the room this conversation is a part of. |
room_mode | activity.channelSession.roomInfo.mode | String | Existing | Extracts the room mode from the roomInfo object. |
state_name | activity.channelSession.state.name | String | Existing | Extracts the state of the conversation from the state object in the channel session object |
state_reason_code | activity.channelSession.state.reasonCode | String | Existing | Records the reason code of the conversation from the state object in the channel session object. |
channel_session_direction | activity.channelSession.channelSessionDirection | String | Existing | Records the direction of channel session i.e. INBOUND/OUTBOUND. There can be multiple channel sessions (INBOUND/OUTBOUND) in a conversation. |
sender_id | activity.data.header.sender.id | String | Existing | Identifies the sender of the respective conversation. |
sender_type | activity.data.header.sender.type | String | Existing | Extracts the type of the sender of the conversation from the sender object in the activity data object. |
type | activity.data.body.type | String | Existing | Type (in this case “ |
agent_id | activity.data.body.agentId | String | Existing | Identifies the agent part of this conversation. |
agent_name | activity.data.body.agentName | String | Existing | Records the name of the agent part of this conversation. |
agent_extension | activity.data.body.agentExtension | String | Existing | Records the extension of the agent part of this conversation. |
status | activity.data.body.status | String | Existing | Extracts the status of the conversation. It can be:
|
reason_for_expiration | activity.data.body.agentId.expiredReason | String | Existing | Records the reason for expiration of conversation. It can be:
|
timestamp | timestamp | Date | Existing | Records the date and time of when the conversation was performed. |
recordCreationTime | recordCreationTime | Date | Existing | Records the date and time of the conversation when the data is pushed in the db. |
_etl_inserted_at | . | . | Custom | Date and time when the ETL data pipeline was run and data was inserted in table. |