Contents
Configuring Features
Review the sections below for more information about how to configure Interaction Recording Web Services to use the specified features.
Configuration for Voice Recordings
Interaction Recording Web Services requires a specific configuration for GIR call recordings to work correctly. The following sections describe how to configure Interaction Recording Web Services for call recordings.
Configuring the Interaction Recording Web Services Parameters
- To support call recordings, it's important that you update the following settings in the serverSettings section of the application.yaml file:
- undocumentedExternalApiUrl
- createCallRecordingCF
- crClusterName
- crRegion
- cryptoSecurityKey
- webDAVMaxConnection
- webDAVMaxTotalConnection
- nodePath
- recordingSettings, in particular recordCryptoServerDecryptMaxConnection, recordCryptoServerDecryptMaxTotalConnection and recordCryptoServerDecryptSocketTimeout
- multiPartResolverMaxUploadSize
- multiPartResolverMaxInMemorySize
- backgroundScheduledMediaOperationsSettings, in particular enableBackgroundScheduledMediaOperations and defaultBackupExportURI
- Determine the contact center ID for Interaction Recording Web Services using the following command with the ops username and password (ops:ops):
{ curl -u ops:ops http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/contact-centers; echo }
Interaction Recording Web Services returns the following output:
{"statusCode":0,"uris":["http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/ contact-centers/<contact center ID (in hex format)>"]}
- Using a text editor, create a new file called add_voice_features with the following content:
{ "uris":[ "/api/api-voice-recording", "/api/api-supervisor-recording", "schema-elasticsearch-v2-call-recording" ] }
- Execute the following command:
{ curl -u ops:ops -X POST -d @add_voice_features http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers/<contact center ID (in hex format)>/features --header "Content-Type: application/json"; echo }
Configuring the Storage Credentials for Interaction Recording Web Services
Enable Voice Recording
Start
- Determine the contact center ID on Interaction Recording Web Services using the following command with the ops username and password (ops:ops):
{ curl -u ops:ops http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers; echo }
The following output is returned:
{"statusCode":0,"uris":["http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers/<contact center ID (in hex format)>"]}
ImportantUse the <contact center ID (in hex format)> in all subsequent commands. - Using a text editor, create a new file called create_table with the following content:
{ "operationName":"createCRCF" }
ImportantYou do not need to create the table manually when the createCallRecording option is set to true in the application.yaml file. The table will be automatically created by Interaction Recording Web Services (RWS). -
Execute the following command:
{ curl -u ops:ops -X POST -d @create_table http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/ contact-centers/<contact center ID (in hex format)>/recordings --header "Content-Type: application/json"; echo }
End
Enable Storage
Start
- Using a text editor, create a new file called recording_settings with the following content:
{ "store": [ { "webDAV": { "userName": "user1", "password": "password1", "uri": "http://apache1/webdav" } }, { "webDAV": { "userName": "user2", "password": "password2", "uri": "http://apache2/webdav" } } ] }
ImportantThe URI in recording_settings is case sensitive and must match the URI in the IVR Profile. For example:"uri": "http://GENESYSREC1/recordings" is not the same as "uri": "http://genesysrec1/recordings"
-
Execute the following command:
{ curl -u ops:ops -X POST -d @recording_settings http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers/<contact center ID (in hex format)>/settings/call-recordings --header "Content-Type: application/json"; echo }
End
Configuring the Call Recording Audit Log
Interaction Recording Web Services provides an audit log for the following recording operations:
- Playback of the recording media file
- Deletion of the recording file
Complete the steps below to configure the audit log:
Start
- Stop Interaction Recording Web Services using the following command:
sudo service gir stop - Edit the GWS_HOME/etc/logback.xml file file and update the configuration to include INFO level messaging. For example:
<?xml version="1.0" encoding="UTF-8"?> <!-- Example LOGBACK Configuration File http://logback.qos.ch/manual/configuration.html --> <configuration scan="true"> <appender name="RECORDING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch><!-- ACCEPT for printing log above INFO, DENY for printing only INFO--> </filter> <file>${jetty.logs}/recording.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${jetty.logs}/recording-%d{yyyy-MM-dd-HH}.gz</fileNamePattern> <maxHistory>720</maxHistory><!-- 1 Month --> </rollingPolicy> <encoder> <pattern>%d{MM/dd/yyyy HH:mm:ss.SSS, UTC} [%X{principal.name}] [%X{req.userAgent}] [%X{req.remoteHost}] %X{req.requestURI} %msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${jetty.logs}/cloud.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- hourly rollover --> <fileNamePattern>${jetty.logs}/cloud-%d{yyyy-MM-dd-HH}.gz</fileNamePattern> <!-- keep 5 days' worth of history --> <maxHistory>120</maxHistory> </rollingPolicy> <encoder> <pattern>%d{MM/dd/yyyy HH:mm:ss.SSS, UTC} %-5level [%X{principal.name}] [%X{session}] [%X{contactCenter}] [%thread] %X{req.requestURI} %X{req.queryString} %logger{36} %msg%n</pattern> </encoder> </appender> <logger name="com.<domain>.cloud.v2.api.controllers.callrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.<domain>.cloud.v2.api.tasks.callrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.<domain>" level="WARN" /> <logger name="com.<domain>.cloud" level="DEBUG" /> <logger name="com.<domain>.cloud.rtreporting" level="WARN" /> <logger name="com.<domain>.salesforce.security" level="INFO" /> <root level="WARN"> <appender-ref ref="FILE" /> </root> </configuration>
- For MLM, create a RECORDING appender if it does not exist. For example:
<appender name="RECORDING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch><!-- ACCEPT for printing log above INFO, DENY for printing only INFO--> </filter> <file>${jetty.logs}/recording.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${jetty.logs}/recording-%d{yyyy-MM-dd}.gz</fileNamePattern> <maxHistory>720</maxHistory><!-- 1 Month --> </rollingPolicy> <encoder> <pattern>%d{MM/dd/yyyy HH:mm:ss.SSS, UTC} [%X{principal.name}] [%X{req.userAgent}] [%X{req.remoteHost}] %X{req.requestURI} %msg%n</pattern> </encoder> </appender>
- Add the following loggers for the RECORDING appender:
For more information about Logback, see Logback configuration.
<logger name="com.genesyslab.cloud.v2.api.controllers.callrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.api.controllers.screenrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.api.tasks.callrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.api.tasks.interactionrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.api.tasks.screenrecording"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.api.tasks.settings"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.media.scheduler"> <appender-ref ref="RECORDING" /> </logger> <logger name="com.genesyslab.cloud.v2.media.task"> <appender-ref ref="RECORDING" /> </logger>
- Start GIR using the following command:
sudo service gir start - Review the audit log. Open the <LOG_PATH>/recording.log file, where <LOG_PATH> is the path parameter for the logging section in your application.yaml. By default, this is /var/log/jetty9.
The following example shows that two recordings are requested for playback and deletion:10/28/2013 15:46:03.203 [ops] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/ops/contact-centers/46284f2f-d615-4329-957a-f5341ed fd5d7/recordings/recid0/play/2cb4ea04-f81d-44e8-83b6-1f4a63a1a659.mp3 Play media [2cb4ea04-f81d-44e8-83b6-1 f4a63a1a659] of recording [recid0] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] requested 10/28/2013 15:46:03.341 [ops] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/ops/contact-centers/46284f2f-d615-4329-957a-f5341ed fd5d7/recordings/recid0/play/2cb4ea04-f81d-44e8-83b6-1f4a63a1a659.mp3 Play media [2cb4ea04-f81d-44e8-83b6-1 f4a63a1a659] of recording [recid0] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] failed 10/28/2013 15:46:10.946 [ops] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/ops/contact-centers/46284f2f-d615-4329-957a-f5341ed fd5d7/recordings/recid1/play/2cb4ea04-f81d-44e8-83b6-1f4a63a1a658.mp3 Play media [2cb4ea04-f81d-44e8-83b6-1 f4a63a1a658] of recording [recid1] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] requested 10/28/2013 15:46:11.033 [ops] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/ops/contact-centers/46284f2f-d615-4329-957a-f5341ed fd5d7/recordings/recid1/play/2cb4ea04-f81d-44e8-83b6-1f4a63a1a658.mp3 Play media [2cb4ea04-f81d-44e8-83b6-1 f4a63a1a658] of recording [recid1] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] succeed 10/28/2013 15:46:52.179 [admin@genesyslab.com] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/recordings/recid0 Delete metadata and media-files of call-recording is requested. contact-center [46284f2f-d615-4329-957a-f5341edfd5d7], call-recording [recid0] 10/28/2013 15:46:52.216 [admin@genesyslab.com] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/recordings/recid0 Delete metadata and media-files of call-recording failed. contact-center [46284f2f-d615-4329-957a-f5341edfd5d7], call-recording [recid0] 10/28/2013 15:46:56.253 [admin@genesyslab.com] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/recordings/recid1 Delete metadata of call-recording is requested. contact-center [46284f2f-d615-4329-957a-f5341edfd5d7], call-recording [recid1] 10/28/2013 15:46:56.420 [admin@genesyslab.com] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 ( KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36] [192.168.135.1] /api/v2/recordings/recid1 Delete metadata of call-recording succeeded. contact-center [46284f2f-d615-4329-957a-f5341edfd5d7], call-recording [recid1]
End
Configuring the API Thread Pool
Interaction Recording Web Services provides properties for the Call Recording API thread pool by configuring the hystrix.properties file.
The following table describes the parameters required to set the API thread pool.
Property/API Name | Thread Pool Name | Description |
---|---|---|
hystrix.command.[API Name].
execution.isolation.thread. |
N/A | The hystrix timeout. The default value is set to 6000. |
hystrix.threadpool.[API Pool Name]
.coreSize |
N/A | The thread pool size. The default value is set to 10. |
RecordingOperationApiTaskV2 | ApiOperationPool | The call or screen recording operation. |
CreateCallRecordingApiTaskV2 | ApiCreatePool | Create call recording. |
DeleteCallRecordingApiTaskV2 | ApiDeletePool | Delete call recording. |
GetCallRecordingApiTaskV2 | ApiGetPool | Get call recording metadata. |
GetCallRecordingCFInfoApiTaskV2 | ApiGetPool | Get call recording CF Information. |
GetCallRecordingMediaApiTaskV2 | ApiGetPool | Streaming call recording media. |
QueryCallRecordingApiTaskV2 | ApiQueryPool | Query call recording metadata. |
For more information about the Call Recording API, see the Genesys Interaction Recording API Reference.
Configuration for Screen Recordings
As with call recordings, Interaction Recording Web Services requires a specific configuration for GIR screen recordings to work correctly. The following sections describe how to configure Interaction Recording Web Services for screen recordings.
Configuring the Interaction Recording Web Services Parameters
Complete the steps below to support screen recordings:
Start
- Update the following settings in the serverSettings section of the application.yaml file. Your configuration should look something like this:
crossOriginSettings: corsFilterCacheTimeToLive: 120 allowedOrigins: <Interaction Recording Web Services Servers>,<SpeechMiner Web Servers> allowedMethods: GET,POST,PUT,DELETE,OPTIONS allowedHeaders: "X-Requested-With,Content-Type,Accept,Origin,Cookie,authorization,ssid,surl,ContactCenterId,Range" allowCredentials: true screenRecordingSettings: screenRecordingEServicesEnabled: true screenRecordingVoiceEnabled: true screenRecordingConnectionReportingSettings: reportingEnabled: true createReportingCF: true multiPartResolverMaxUploadSize: 536870912 multiPartResolverMaxInMemorySize: 67108864
Make the following changes to the example above:
- Change <Interaction Recording Web Services Servers> and <SpeechMiner Web Servers> to the HTTP/HTTPS addresses of the Interaction Recording Web Services instances and SpeechMiner Web Servers.
- multiPartResolverMaxUploadSize controls the maximum allowed size (in bytes) for a screen recording video file that can be uploaded to Interaction Recording Web Services. This parameter should be aligned with maxDurationMinutes, so if you change its value, ensure that you also consider the maxDurationMinutes value specified within the Advanced Configuration for the Screen Recording Service section in the Deploying the Screen Recording Service - Advanced Configuration page. The maximum size of a file that can be uploaded by the Screen Recording Service must be less than or equal to the multiPartResolverMaxUploadSize.
- Determine the contact center ID on Interaction Recording Web Services using the following command with the ops username and password (ops:ops):
{ curl -u ops:ops http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/contact-centers; echo }
Interaction Recording Web Services returns the following output:
{"statusCode":0,"uris":["http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/ contact-centers/<contact center ID (in hex format)>"]}
- Using a text editor, create a new file called add_screen_features with the following content:
{ "uris":[ "/api/api-voice-screenrecording", "/api/api-multimedia-screenrecording", "/api/api-screenrecording-connection-reporting", "schema-elasticsearch-v2-screen-recording" ] }
-
Execute the following command:
{ curl -u ops:ops -X POST -d @add_screen_features http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers/<contact center ID (in hex format)>/features --header "Content-Type: application/json"; echo }
- Use the api-voice-screenrecording parameter for voice interactions, and use the api-multimedia-screenrecording parameter for non-voice interactions.
- Use the api-screenrecording-connection-reporting parameter to enable the collection of information about Screen Recording Services client connections for the contact center.
- If you wish to direct the SpeechMiner UI to Interaction Recording Web Services instead of Recording Crypto Server for decryption of screen recordings, add the api-recordings-decryption-proxying parameter to the list of features enabled for the contact center above. Note that this requires additional configuration.
-
Using a text editor, create a new file called create_stats_table, with the following content:
{ "operationName":"CreateReportingCFs" }
-
Execute the following command:
{ curl -u ops:ops -X POST -d @create_stats_table http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/contact-centers/<contact center ID (in hex format)>/screen-recording-connections --header "Content-Type: application/json"; echo }
End
Configuring the Storage Credentials for Interaction Recording Web Services
Complete the steps below to configure storage credentials for Interaction Recording Web Services.
Start
- Determine the contact center ID on Interaction Recording Web Services using the following command with the ops username and password (ops:ops):
{ curl -u ops:ops http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/contact-centers; echo }
Interaction Recording Web Services returns the following output:
{"statusCode":0,"uris":["http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services port>/api/v2/ops/ contact-centers/<contact center ID (in hex format)>"]}
- Using a text editor, create a new file called create_table, with the following content:
{ "operationName":"createCRCF" }
- Execute the following command:
{ curl -u ops:ops -X POST -d @create_table http:// <Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops/ contact-centers/<contact center ID (in hex format)>/screen-recordings --header "Content-Type: application/json"; echo }
- Enable storage for a single or multiple locations:
ImportantWithin the storage settings, the same location can be specified multiple times if you have inactive (“active”: false) settings specified as well as “active”: true. However, you must ensure that for a specific location, only one value has “active”: true set. For additional information about storage settings, refer to Interaction Recording Web Services (Web Services) Group Settings. See the Property Descriptions section for details about the supported property values.
- For a single location:
- Using a text editor, create the create_single_location file:
{ "name":"storage", "location": "/", "value":[ { "storageType": "webDAV", "active": true, "credential": { "userName": "<webdav user>", "password": "<webdav password>", "storagePath": "<webdav uri>" } } ] }
ImportantReplace <webdav user>, <webdav password>, <webdav uri> with the appropriate values. - Execute the following command:
{ curl -u ops:ops -X POST -d @create_single_location http:// <Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops /contact-centers/<contact center ID (in hex format)>/settings/screen-recording --header "Content-Type: application/json"; echo }
- For multiple locations:
- Using a text editor, create the create_first_location file:
{ "name":"storage", "location": "<node_location>", "value":[ { "storageType": "webDAV", "active": true, "credential": { "userName": "<webdav user>", "password": "<webdav password>", "storagePath": "<webdav uri>" } } ] }
- Execute the following command:
{ curl -u ops:ops -X POST -d @create_first_location http://<Interaction Recording Web Services Server>:<Interaction Recording Web Services Port>/api/v2/ops /contact-centers/<contact center ID (in hex format)>/settings/screen-recording --header "Content-Type: application/json"; echo }
ImportantReplace <node_location>, <webdav user>, <webdav password>, <webdav uri> with the appropriate values. The values for the <node_location> are similar to the nodePath settings in the application.yaml file, but allow a hierarchical representation. For example, an Interaction Recording Web Services node uses a storage setting with a location of "/US" in the nodePath set to "/US/AK" or "/US/HI". - Repeat steps a and b for each location required.
- Using a text editor, create the create_first_location file:
End
For more information on the properties of this settings group, see Interaction Recording Web Services Settings Groups.
Configuring the API Thread Pool
Interaction Recording Web Services provides properties for the Call Recording API thread pool by configuring the hystrix.properties file.
The following table describes the parameters required to set the API thread pool.
Property/API Name | Thread Pool Name | Description |
---|---|---|
hystrix.command.[API Name].
execution.isolation.thread. |
N/A | The hystrix timeout. The default value is set to 6000. |
hystrix.threadpool.[API Pool Name]
.coreSize |
N/A | The thread pool size. The default value is set to 10. |
RecordingOperationApiTaskV2 | ApiOperationPool | The call or screen recording operation. |
CreateScreenRecordingApiTaskV2 | ApiUploadPool | Create screen recording |
DeleteScreenRecordingMediaApiTaskV2 | ApiDeletePool | Delete screen recording |
GetScreenRecordingApiTaskV2 | ApiGetPool | Get screen recording metadata |
GetScreenRecordingMediaApiTaskV2 | ApiStreamPool | Stream screen recording media |
QueryScreenRecordingApiTaskV2 | ApiQueryPool | Query screen recording metadata |
For more information about the Call Recording API, see the Genesys Interaction Recording API Reference.