Voice Data integration description

 

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

 

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:

 

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 

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
 

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.
 

email 

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 

Answered 

Result if 201=UserAnswer is the last event 

Abandoned 

Result if not one of the others 

Transfered out 

Result if 204=UserTransfer 300=QueueTransfer is last event 

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

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 

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

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

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