Voice Data integration description
- 1 Data types and formats
- 1.1 Data generation and storing
- 1.2 Timestamps
- 1.3 Phone numbers
- 2 Export file retention
- 3 Call data exports
- 3.1 DirectCall
- 3.2 ServiceCall
- 3.3 ServiceCallDetail
- 3.4 CallsExtended
- 3.5 CallDetails
- 4 Classification data exports
- 4.1 Classification
- 4.2 ClassificationTags
- 4.3 ClassificationTagSchemas
- 5 Callback data exports
This document describes data structures that are used for reporting data.
Data types and formats
Data generation and storing
File naming
Data is exported in CSV-format, one csv-file per export type per day.
Export files are named useing following pattern: <date>_<orgname>_daily_<exporttype>.csv
| Description | Example |
---|---|---|
<date> | Date in format YYYY-MM-DD | 2020-12-12 |
<orgname> | Organization name | exampleorg |
<exporttype> | Type of export | calldetails |
The resulting filename is 2020-12-12_exampleorg_daily_calldetails.csv, which contains calldetails export of date 2020-12-12.
There are two options for data generation: daily and intraday
Daily
All daily files are created at 0300 UTC, containing data from previous day.
Intraday
Export files are created as 00:15 UTC of current day
New data is added to the same file every 5mins.
Timestamps
All timestamps are in UTC time, unless specifically stated otherwise.
Phone numbers
Phone numbers are stored in varchar columns. Numbers are normalized to E164 (+35850123...). Prefixing the numbers with plus-sign varies.
Export file retention
When using Enreach provided SFTP service, generated data export files are removed after 30 days.
Call data exports
Call data is aggregated to two different structures:
Raw call event data is available for
Calculated data for calls are
DirectCall contains calls made directly to (and by) an individual user. Same logical call can also exist in ServiceCall data in two cases:
User’s incoming calls are handled by BeneCC work number queue. In these cases, ServiceCall.email is that of the targeted user.
ServiceCalls where Queue name is null can be left out of standard reporting
User’s incoming call is transferred to BeneCC. In these cases, ServiceCall.email is that of the targeted user, and Queue name is the first service pool call overflowed to.
Incoming DirectCalls where corresponding CallId exists in ServiceCall and Queue name is not null should be left out of combined reports
DirectCall
A single DirectCall entry is created for a call targeting a user directly. It is a simple structure, containing only a single row with no complex sub-event structure that is required for service calls.
Export name: daily_directcall.csv
Column | Description |
---|---|
Id | Unique identifier for the entry |
CallId | Logical call entry is based on. A single call can result in multiple DirectCall entries for example when call is made from one known user to another and they both have their own entry |
Timestamp | Connection timestamp for connected calls, arrival timestamp for other |
TypeId | Call type. 0 for incoming, 1 for outgoing, 2 for Transfer |
email of the user | |
ResultTypeId | Call result. 0 for answered, 1 for abandoned, 2 for transferred. |
ExternalNumber | External party of the call, caller for incoming and called number for outgoing |
UserNumber | User number, caller for outgoing and called number for incoming calls. |
Duration | Call answered duration in seconds for answered calls, 0 for others |
Modified | When entry was created or modified. Creation date in practice for now, entry is not modified afterwards. |
ServiceCall
A single ServiceCall entry is created for each logical call.
In current BeneCC use case, entry is first created with Ongoing result type when call connects to the system but is not yet completed. Result type is updated when call completes.
For reporting use, fetching calls with non-Ongoing result modified since last fetch should be effective.
Export name: daily_servicecall.csv
Column | Description |
---|---|
Id | Identifier for the logical call. Corresponds to DirectCall.CallId |
Timestamp | Time when call arrived in system |
queuename | Name of first queue call arrived in. Normally this means the queue corresponding to the called number.
If call arrived at user personal queue and overflowed to a real queue, this displays the first real queue after the overflow has occurred.
Null if call arrives to personal queue and never overflows to a real queue. |
Null for calls not arriving to personal queue. For personal queue use, email of the targeted user. | |
ResultTypeId | Simplified call result. Processed directly from found ServiceCallDetail rows when call completes. Corresponds to ServiceCallResultTypes, types and logic described below. |
Anum | Original a-number of the call |
Bnum | Original b-number call was made to |
Modified | Modification timestamp. Creation time for new calls and updated when ResultTypeId is updated for completed calls. Used for fetching data to external systems. |
ServiceCallResultTypes
ResultTypeId is calculated once when call completes. Result is calculated directly by finding a single latest event of types 102=QueueScheduleClosed, 201=UserAnswer, 204=UserTransfer, 300=QueueTransfer.
Id | Name | Description |
0 | Answered | Result if 201=UserAnswer is the last event |
1 | Abandoned | Result if not one of the others |
2 | Transfered out | Result if 204=UserTransfer 300=QueueTransfer is last event |
3 | OffSchedule | Result if 102=QueueScheduleClosed is last event |
1000 | Ongoing | Result when call is still ongoing and the final result is undetermined. |
ServiceCallDetail
Each ServiceCall can have several individual events describing the progress of the call. They are the primary way of performing reporting, as they provide the most detailed info available and provide the flexibility for different kinds of needs.
Export name: daily_servicecalldetail.csv
Column | Description |
Id | Row identifie |
CallId | Id of ServiceCall event belongs t |
Timestamp | Event timestamp |
EventTypeId | Event type id. Corresponds to ServiceCallEventTypes.Id described belo |
QueueName | name of queue related to the even |
email of user related to the even | |
Reason | Descriptive, more detailed info about the event. Values are un-normalized and specific to the underlying system (currently BeneCC), so the column should be used sparingly |
Modified | Modified timestamp for the row, used for fetching data to external systems. |
ServiceCallEventTypes
EventTypes represent different events that occur during a call
CallConnect (1)
Logged when call connects to the system.
Queue name is non-null if call was made to a number configured to a real queue.
Email is non-null if call was made to a number configured to a user.
Reason field in BeneCC use describes the type of the attempted target: PersonalWork for users, ServiceQueue for queues. In addition, Reason can also signal an error, for example if call was attempted to an unknown number NotInController is logged.
CallDisconnect (2)
Logged when the entire call is disconnected and can be treated as complete.
Queue name and Email are always null.
Disconnect usually occurs when the caller disconnects either before or after the call is answered, or the answering user disconnects the call. The system itself can also disconnect the call for example when service is closed, and the relevant prompt has been played.
For BeneCC, reason field describes the disconnecting party: local for system disconnects, remote for disconnects triggered by a remote party (either the caller or the answering user).
QueueArrive (100)
Logged when call is accepted and arrives to an individual queue. Allocation to agents is then attempted if available.
Queue name is always the queue call arrives in. If Email is non-null, call arrived to a personal queue with logged queue name.
For BeneCC, reason is always null.
QueueReject (101)
Logged when queue rejects the call instead of accepting it. The event is not currently used for BeneCC-originated data.
QueueScheduleClosed (102)
Logged when call connects to a specific queue that is closed for some reason at the time (usually outside of service hours).
Queue name is the queue that was targeted but is closed.
Email is always null.
For BeneCC, reason is always null.
QueueOverflow (103)
Logged when call overflows from one queue to another for some reason.
Queue name is the attempted overflow target.
Email is always null.
For BeneCC, reason describes the technical reason for overflowing.
NoAvailableProviders: No users are available for allocation
QueueFull: Maximum queue length was reached
QueueTimeout: Maximum queueing time was reached
QueueAllocateUser (200)
Logged when queue allocates the call to a user. Call can be allocated to multiple users at the same time.
Queue name is the allocating queue.
Email is the allocated user.
For BeneCC, Reason describes the type of allocating queue: PersonalWork for personal queues, ServiceQueue for real queues.
UserAnswer (201)
Logged when user answers the allocated call.
Queue name is the allocating queue.
Email is the answering user.
For BeneCC, Reason describes the type of allocating queue: PersonalWork for personal queues, ServiceQueue for real queues.
UserDisconnect (202)
Logged when user disconnects the call from UI (BeneDesk). Disconnects from terminals are not logged as separate UserDisconnect events but simply in CallDisconnect.
Queue name is the allocating queue.
Email is the disconnecting user.
For BeneCC, Reason is always null.
UserReject (203)
Logged either when user rejects the allocated call actively or the allocation is cancelled for some reason.
Queue name is the allocating queue.
Email is the allocated user.
For BeneCC, Reason describes the reason for reject in more detail:
Timeout: Maximum allocation time was reached.
CallDisconnected: Call disconnected during allocation.
GenericUserRejected: User either rejected actively or was found to be unreachable for example due to terminal being busy.
OtherConnected: Another agent answered the call (for simultaneous allocation).
UserTransfer (204)
Logged when answering user requests a call transfer using the UI (BeneDesk). Both internal and external transfers are logged identically, later events describe where the call was actually transferred to.
Queue name is the queue.
Email is the transferring user.
For BeneCC, Reason contains the transfer target number.
UserPark (205)
Logged when answering user parks the call.
Queue name is the allocating queue.
Email is the answering user.
For BeneCC, Reason is always null.
UserUnpark (206)
Logged when answering user unparks the call.
Queue name is the allocating queue.
Email is the answering user.
For BeneCC, Reason is always null.
UserOnHold (207)
Logged when answering user places the call on hold.
Queue name is the allocating queue.
Email is the answering user.
For BeneCC, Reason is always null.
UserUnHold (208)
Logged when answering user retrieves the call from hold.
Queue name is the allocating queue.
Email is the answering user.
For BeneCC, Reason is always null.
ExtQuery (250)
Logged when the system queries an external system for routing information, for example to check if the customer should be routed directly to a prioritized queue. Actual query functionality is implementation-specific and related to a custom project.
Queue name is logged if the query is caused by a queue configuration
Email is logged if query is caused by user configuration
Reason describes the query result. Value can vary by implementation, standard values are
OK: query receives an acceptable result
NOT_FOUND: no results found
ExtTarget (251)
Logged after an ExtQuery event to describe routing targets received in response. Possible targets are queues, users and direct numbers.
Queue name is logged if target is a queue
Email is logged if target is a user
Reason contains a semicolon-separated list of detailed information:
nbr: stored if target is a direct number
values: received target number (not necessarily normalized)
example: nbr=+358501231234
pr: if multiple targets are received, their relative priority (0 being the highest)
values: positive integer
example: pr=0;
req: whether to wait for target for time specified in parameter ttl. This only applies to user targets
values: bit 0/1
example: req=0;
ttl: how long requirement is valid. Currently used in combination with req flag to require a specific user
values: positive integer, second
example: ttl=30;
QueueTransfer (300)
Logged when the call is transferred out of the system.
Queue name is always null.
Email is always null.
For BeneCC, Reason contains the transfer target number.
QueueTransferConnect (301)
Logged when externally transferred call connects to the external system (e.g. the transfer was successful).
Queue name is always null.
Email is non-null if transfer targets a number mapped to a known user.
For BeneCC, Reason contains the target number.
QueueTransferCancel (302)
Logged when external transfer is cancelled or fails. This occurs if the original caller disconnects during transfer, or if the transfer target rejects the incoming call.
Queue name is always null.
Email is non-null if transfer targets a number mapped to a known user.
For BeneCC, Reason contains the detailed reason for cancel or reject:
CallDisconnected: Original caller disconnected the call
GenericUserRejected: Targeted user rejected the call
SupervisionStatus (320)
Supervision status for the call has been changed.
Reason contains supervisor name and status
<status>:<supervisor name>
Possible values for status: SilentlyListening, Whispering, Participating, Exited, Entered.
IvrSelection (400)
Logged when caller has made (DTMF) IVR menu selection or entered some longer collected input.
StartBlockingPrompt (401)
Logged when prompt playing that prevents allocation to agents has been started.
WrapUpStarted (410)
Logged when agent wrap-up time started
WrapUpTerminated (411)
Logged when agent wrap-up time was terminated
CallbackCreated (500)
A callback request was created from the call
Queue is the last queue before leaving callback requests.
Reason contains Id of the Callback list the requests were created.
CallsExtended
Combined table consisting of both the Direct and Service Calls and with some measures already calculated at the call level. Contains usually one row per callid.
Export name: daily_calls_extended.csv
Column | Description |
CallId | Logical call entry is based on. A single call can result in multiple entries for example when call is made from one known user to another and they both have their own entry |
Timestamp | Connection timestamp for connected calls, arrival timestamp for other |
EntryQueue | Name of the entry queue |
LastQueue | Name of the last queue |
ExternalNumber | External party of the call, caller for incoming and called number for outgoing |
UserNumber | User number, caller for outgoing and called number for incoming calls |
TotalWaitingTime | Total call waiting time duration in seconds |
TotalTalkingTime | Call talking duration in seconds |
IVRClearedWaitingTime | Call waiting time duration in seconds, excluding time the call has been in IVR or pre-welcome stages |
ServiceCall | Is a service call, 1/0 |
DirectCall | Is a direct call, 1/0 |
Incoming | Is an incoming call, 1/0 |
Outgoing | Is an outgoing call, 1/0 |
Answered | Is an answered incoming call, 1/0 |
OutAnswered | Is an answered outgoing call, 1/0 |
Transferred | Is the call transferred outside, 1/0 |
Abandoned | Is an abandoned call (disconnected before answer), 1/0 |
Offschedule | Is the call a service call coming when the service pool is closed, 1/0 |
TransferredToService | Is the direct call overflown or transferred to service pool, 1/0 |
Modified | When entry was created or modified. |
CallDetails
Contains call details related to users and service queues with some measures already calculated. Contains usually multiple rows for each callid.
Export name: daily_calldetails.csv
Column | Description |
CallId | Logical call entry is based on. A single call can result in multiple entries for example when call is made from one known user to another and they both have their own entry. |
OrganisationId | Id for the customer organisation. |
Event_TS | Timestamp of the call flow event |
QueueId | Id of the service pool |
LastName | Name of service pool related to the event |
Title | Type of queue |
email of user related to the event | |
WaitingTime | call waiting time duration in seconds at user level. How long the call was allocated to a user before, it was answered, canceled or rejected. |
TalkingTime | Call talking duration in seconds at user level |
IVRWaitingTime | Time spent in IVR menu |
DirectCallWaitTime | Waiting time for direct calls |
QueueWaitingTime | Call waiting time duration in seconds at queue level |
QueueTalkingTime | Call talking duration in seconds at queue level |
ServiceCall | Is a service call, 1/0 |
DirectCall | Is a direct call, 1/0 |
CallConnects | Call has been connected to the queue, 1/0 |
UserAnswers | User has answered the call, 1/0 |
UserAllocate | Call is allocated (offered) to the user, 1/0 |
AnsweredInQueue | Is the service call answered in the queue, 1/0 |
Incoming | Is an incoming call, 1/0 |
Outgoing | Is an outgoing call, 1/0 |
TransferredToService | Is the direct call overflown or transferred to service pool, 1/0 |
Modified | When entry was created or modified. |
ExternalNumber | Phone number of external party |
Classification data exports
Classification data is exported in three different datasets
Classifications
ClassificationTags
ClassificationSchemas
Classification
Classifications for calls or external events.
Column | Description |
Id | Unique id for classification |
Timestamp | Timestamp for conversation creation |
Tagschemaid | Tag schema id for classification |
Classifiedtypeid | Classified type: 1 – None, 2 – DirectCall, 3 – ServiceCall, 4 – Email, 5 – CallListItem |
Referencedcallid | If classification is related to calls, the corresponding Callid |
Referencedexternalid | If classification is related to external systems, the corresponding external id, e.g. message id |
Note | Classification note, free text |
Createdby | Email of classifying user |
Modified | When entry was created or modified. |
Export name: daily_clasification.csv
ClassificationTags
Tags for individual classifications.
Export name: daily_clasification_tags.csv
Column | Description |
ClassificationId | Unique id for classification. Corresponds to classification.id |
Tagid | Id for tag |
Tagdeleted | Is tag deleted (in classification),1/0 |
Modified | When entry was created or modified. |
ClassificationTagSchemas
Schema information for classification tags.
Export name: clasification_tag_schemas.csv
Column | Description |
Schemaid | Tag schema id |
Schemaname | Tag schema name |
Groupid | Tag group id |
Groupname | Tag group name |
Tagid | Tag id |
Schemaarchived | Is schema archived, 1/0 |
Schemadeleted | Is schema deleted, 1/0 |
Grouparchived | Is tag group archived, 1/0 |
Groupdeleted | Is tag group deleted, 1/0 |
Tagarchived | Is tag archived, 1/0 |
Tagdeleted | Is tag deleted (in schema), 1/0 |
Modified | When entry was created or modified. |
Callback data exports
CallHandling (callback)
Table consisting of combined presentation of callback request / attempt information.
Limitations to CallHandling -exports in cases where callback process is handled within Dynamics or Salesforce
Information from callback attempts are not reflected in these data exports.
Requests are closed automatically when they are moved from Enreach Voice services to Dynamics or Salesforce.
All callback requests are handled / closed by the same user (Salesforce or Dynamics Integration user)
Export name: daily_call_handling.csv
Column | Description |
Key_id | Unique id for the callback attempt |
Name | Callback list to which the related request belongs |
Contactnumber | Number of the caller who left the callback request |
Assigneduser | User to who have the callback request has been assigned |
Channelin | Name of the service pool where the call arrived before callback request was created |
Creationtime | Creation time of the related callback request |
Callbackrequestid | Related callback request Id |
User | User who have made the callback attempt |
Timestamp | Timestamp of the callback attempt |
Callbackattemptypeid (CallBackAttemptType) | Type Id for the callback attempt, described below. |
Status | Status of the related callback request |
Difference | Difference in minutes from callback request creation to attempt. |
Noattempts | TBD |
Callbackattempt | Flag for callback attempt (1/0) |
Callbacksuccessful | Was callback attempt successful, 1/0 |
Callbacktypeid (CallBackRequestType) | Type id for the related callback request, described below |
Callid | Callid for the related callback request. Callback request can be identified from the call data exports via the callid. |
Clasificationid | Id for the related clasification |
Modified | When entry was created or modified. |
CallbackAttemptType
Types of attempts that can be created. Different meanings for reporting/informational use, two main logical types (closing and not closing).
Name | Value | Description |
---|---|---|
Unknown | -1 | Unknown value |
CloseSuccessful | 0 | Closes request, handled successfully |
CloseUnsuccessful | 1 | Closes request, was not handled |
Busy | 2 | Contact was busy |
NoAnswer | 3 | Contact did not answer |
OtherAnswered | 4 | Voicemail, switchboard or some other target answered |
Other | 5 | Other unspecified |
Noattempts | 6 | No attempts have been made. Used for filtering requests. |
CloseExpired | 7 | Closes request, expired |
CallbackRequestType
Different types for callback requests
Name | Value | Description |
---|---|---|
Unknown | 0 | Unknown value. Provided for backwards compatibility, should be disregarded |
Callback | 1 | Callback item |
Overflow | 2 | Overflow item |
CallList | 3 | Call list item |
Any | 50 | Symbolic "any". Requests cannot actually be this type, used for filtering |
© Enreach, Mannerheimintie 117, 00280 Helsinki, Finland
+358 40 450 3000, www.enreach.fi