Archiving and Metadata
Contents
The Genesys Interaction Recording solution uses the Recording Crypto Server and Media Lifecycle Management system to back up store recording files.
Recording Crypto Server Archive Structure
The Recording Crypto Server, by default, is scheduled to generate an archive file every day based on the retention period. Each time the archival process is run, the output file is saved to a compressed file. The compressed file contains the recording files and the metadata. The following directory structure is the result of the expanded compressed file:
/{contact-center-id}
/{tenant-name}
/{year-month-day}
/{recording-id}
/recording.json
/{mediaFiles}
- contact-center-id—The unique identifier of the contact center that is generated by Web Services.
- tenant-name—The name of the tenant.
- year-month-day—The directory where the recording files are stored. There is a separate directory generated for each calendar day.
- recording-id—The unique recording identifier for each recording.
- recording.json—The recording metadata.
- mediaFiles—One or more recording files for the recording. The file name is referenced in the metadata. If encryption is enabled for this tenant, the recording is also encrypted in PKCS7 format. For an example of how to decrypt an encrypted recording file, see Decrypting Call Recordings.
Media Lifecycle Management Archive Structure
This section explains the archive structure that results when you use the Recording Lifecycle Scheduler component of Genesys Administrator Extension to create backup tasks.
Each backup task exports the recording files to one compressed file, with the full path:
<archive export directory>/<Tenant Name>-<Filter Type>-<Max Age Filter>-<Min Age Filter>-<yyyyMMddHHmmss>.zip
Where:
- <archive export directory> is determined first by the task's parameters ["location"] setting. If missing or blank, it defaults to the server setting, backgroundScheduledMediaOperationsSettings.backupExportURI.
- <Tenant Name> is always "Environment".
- <Filter Type> is based on the task filter that exported this archive: "voice" or "screen".
- <Min Age Filter> is based on the task filter that exported this archive: 0 if was not set.
- <Max Age Filter> is based on the task filter that exported this archive: 0 if was not set.
- <yyyyMMddHHmmss> is the UTC time when the task started its execution.
The structure of the compressed file is as follows:
<contact center id>
+-----<Tenant Name>
+----- <yyyy>
+----<MM>
+-----<dd>
+-------<recording id>
+-------meta-data.json
+-------<path from the originalMediaDescriptor>
+--------screen
+-------<screen recording id>
+-------meta-data.json
+-------<path from the originalMediaDescriptor>
Where:
- <Contact center id> is the contact center id for which the archiving is performed
- <Tenant Name> is always "Environment"
- <yyyy> is the year component in the startTime parameter of the recording id
- <MM> is the month component in the startTime of the recording id
- <dd> is the day component in the startTime parameter of the recording id
- <recording id> is the recording id of the recording being archived
- meta-data.json is a file containing the recording metadata of the id in JSON format
- <path from the originalMediaDescriptor> is the archived media file. The filename is the value of the "mediaFiles[n]["originalMediaDescriptor"]["path"]" JSON attribute:
"originalMediaDescriptor": { "storage": "webDAV", "path": "/TPDLFSN0J13EJF5OV3EB2182RO00000V_1001_1001_1003_1001_2014-11-05_18-11-44__AgentVoice1_2014_11_05_10_12_03.mp4_aH3XSa0_S_q9RVun6EnW0A.mp4", "data": { "storagePath": "http://eservices:8085/webdav" } },For the above example, the filename will be "TPDLFSN0J13EJF5OV3EB2182RO00000V_1001_1001_1003_1001_2014-11-05_18-11-44__AgentVoice1_2014_11_05_10_12_03.mp4_aH3XSa0_S_q9RVun6EnW0A.mp4". Note that the "/" (slash character) at the start of the path is removed from the name.
"originalMediaDescriptor":{ "path":"http://esx36-ip21-167.gws.genesys.com/recordings/func-test-gir-sched-6331c0e2-1303-44ff-9b9e-ae5964155e56.mp3", "storage":"webDAV" }For the above example, the filename retains the path value—for example, "http://...", but will be converted to "http_/esx36-ip21-167.gws.genesys.com/recordings/func-test-gir-sched-6331c0e2-1303-44ff-9b9e-ae5964155e56.mp3" by an extraction tool that operates on Windows. - screen is a sub-folder under the <recording id> where the recording id is that of the call recording. When the task filter is voice and executeOnScreenRecording is true, both call recordings and screen recordings may be archived. The screen recordings that are archived because of the association with the <call recording id>, goes under the screen sub-folder.
The following entries can have multiple instances under the same parent entry:
- <yyyy>
- <MM>
- <recording id>
- <path from the mediaDescriptor>
For more information about Media Lifecycle Management, click here.
Recording Metadata
The Recording Processor builds the recording metadata from ICON, and from the metadata from MCP for each recording file. The overall structure is in JSON format with the following mandatory core properties:
- id—The recording identifier.
- callerPhoneNumber—The caller DN (ANI).
- dialedPhoneNumber—The dialed number (DNIS).
- mediaFile—A list of recording files associated with this recording.
- eventHistory—A list of call events associated with this recording.
mediaFile Properties
The following table describes the mediaFile properties.
| Property | Data Type | Description | Required |
|---|---|---|---|
| mediaDescriptor | object—Contains the path and storage property. | Specifies the path and storage location of the media file. | Yes |
| startTime | datetime | Specifies the start time of the media file. | Yes |
| stopTime | datetime | Specifies the stop time of the media file. If MCP fails, this value will be the same as the startTime. | Yes |
| mediaID | string | Specifies the media file name for the media file that is used by clients to refer to the same media file. MCP ensures that this value is globally unique. | Yes |
| type | string | Specifies the MIME type of the media file. | Yes |
| duration | time | Specifies the time duration of the media file. | No |
| size | number | Specifies the size, in bytes, of the media file. | No |
| tenant | string | Specifies the tenant that the recording belongs to. | Yes |
| ivrprofile | string | Specifies the IVR Profile name that serviced the recording. | Yes |
| parameters | object—The properties are parameters. | Specifies the list of additional metadata information provided by SIP Server and the client applications. The properties are:
|
Yes |
| masks | array of objects—Each object contains the time and type property. | Specifies the time stamps of the pause/resume periods if the recording is masked by a client application. |
No |
| pkcs7 | string | Specifies the PKCS7 envelope (in PEM, base 64 string format) if the media file is encrypted. | No |
| certAlias | array of strings | Specifies a list of aliases to the encryption certificates if the media file is encrypted. | No (Yes if the pkcs7 property is present) |
| partitions | array of strings | Specifies a list of partition names for the media file. | Yes |
| accessgroups | array of strings | Specifies the access groups identified agent associated with the recording. | Yes |
eventHistory Properties
The following table describes the eventHistory properties.
| Property | Data Type | Description | Required |
|---|---|---|---|
| occurredAt | datetime | Specifies the start time of the event. | Yes |
| calluuid | string | Specifies the call UUID that the event belongs to. | Yes |
| event | string | Specifies the event type:
|
Yes |
| contact | object | Specifies the the contact information of the caller who joined or left the recording if the event is Joined or Left. | No |
| data | object | The attached data included in the recording if the event is data. | No |
Metadata Format
The following code snippet illustrates the metadata format:
{
"id": "00PV5Q27MG8AB8VNE49362LAES000013",
"callerPhoneNumber": "+14152213344",
"dialedPhoneNumber": "+14155551234",
"mediaFiles":
[
{
"mediaDescriptor": {
"path":"100PV5Q27MG8AB8VNE49362LAES000013_029FO32T0G8LDFTEK9I4K8DAES0KTDVE.wav",
"storage":"awsS3",
"data": {
"bucket": "mybucket"
}
},
"startTime": "2012-12-18T13:45:032.000Z",
"stopTime": "2012-12-18T14:15:036.000Z",
"mediaId" : "00PV5Q27MG8AB8VNE49362LAES000013_029FO32T0G8LDFTEK9I4K8DAES0KTDVE.wav"
"type" : "audio/wav",
"duration" : "534s",
"tenant" : "Environment",
"ivrprofile" : "DefaultIVRProfile",
"size" : "8544"
"parameters" : {
"record" : "source",
"recorddn" : "2222",
"calluuid":"00PV5Q27MG8AB8VNE49362LAES000013",
"ani":"+14152213344",
"dnis":"+14155551234",
"agentdn":"2222",
},
"masks" : [
{"time":"2013-02-06T10:23:10.034Z","type":"paused"},
{"time":"2013-02-06T10:23:23.124Z","type":"resume"}
],
"pkcs7" : "...",
"certAlias" : [ "...", "..." ],
"partitions" : [ "support" ],
"accessgroups" : [ "region1", "team1" ]
}
],
"eventHistory":
[
{
"occurredAt": "2012-12-18T13:45:032.000Z",
"calluuid":"00PV5Q27MG8AB8VNE49362LAES000013",
"contact":
{
"type": "User",
"phoneNumber": "+16501112222",
"userName": "AliceAmb@company",
"firstName": "Alice_NEW2",
"lastName": "Amber"
},
"event": "Joined"
},
{
"occurredAt":"2012-12-18T13:45:56.000Z",
"calluuid":"00PV5Q27MG8AB8VNE49362LAES000013",
"event":"Data",
"data":{"Test":"helloworld"}
},
{
"occurredAt": "3333-12-18T14:15:036.000Z",
"calluuid":"00PV5Q27MG8AB8VNE49362LAES000013",
"contact":
{
"type": "External",
"phoneNumber": "+1415221344"
},
"event": "Left"
}
]
}
