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
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>:8080/api/v2/ops/contact-centers; echo
The following output is returned:
{"statusCode":0,"uris":["http://<Interaction Recording Web Services Server>:8080/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, created the create_table file using the following command:
{ "operationName":"createCRCF" } curl -u ops:ops -X POST -d @create_table http://htcc:8080/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 the recording_settings text file using the following command:
{ "store": [ { "webDAV": { "userName": "user1", "password": "password1", "uri": "http://apache1/webdav" } }, { "webDAV": { "userName": "user2", "password": "password2", "uri": "http://apache2/webdav" } ] } curl -u ops:ops -X PUT -d @recording_settings http://<Interaction Recording Web Services Server>:8080/api/v2/ops/ contact-centers/<contact center ID (in hex format)>/settings/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 call recording operations:
- Playback of the recording media file
- Deletion of the call 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 /usr/share/gir/.current/etc/logback.xml 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 Jetty 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 - Open the /var/log/jetty9/recording.log file and review the audit log. 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 recording [reci d0] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] requested 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 recording [recid0] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] failed 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 recording [reci d1] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] requested 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 recording [recid1] from contact center [46284f2f-d615-4329-957a-f5341edfd5d7] succeeded
End
Configuring the API Thread Pool
Interaction Recording Web Services provides properties for the Call Recording API thread pool via archaius.
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 meta data. |
| GetCallRecordingCFInfoApiTaskV2 | ApiGetPool | Get call recording CF Information. |
| GetCallRecordingMediaApiTaskV2 | ApiGetPool | Streaming call recording media. |
| QueryCallRecordingApiTaskV2 | ApiQueryPool | Query call recording Meta data. |
For more information about the Call Recording API, see the Genesys Interaction Recording API Reference.
For more information about how to use Workspace Web Edition for Voice Recording, see the Workspace Web Edition Help.
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 syncNode: true multiPartResolverMaxUploadSize: 536870912 multiPartResolverMaxInMemorySize: 536870912Make 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 for the Screen Recording video file that can be uploaded to Interaction Recording Web Services (in bytes). Setting the value too high (10MB+) for this parameter may cause performance and/or security issues for Interaction Recording Web Services.
- Add screen recording features to the Contact Center:
POST http://<htcc-host-prefix>/api/v2/ops/contact-centers/bea09df2-82c5-441a-9072-5f2fc15fadc4/features { "uris":[ "/api/api-voice-screenrecording", "/api/api-multimedia-screenrecording", "/api/api-screenrecording-connection-reporting" ] }- 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 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.
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:
- 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>:8080/api/v2/ops /contact-centers/<contact center ID (in hex format)>/settings/screen-recording --header "Content-Type: application/json"; echo
- Using a text editor, create the create_single_location file:
- 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>:8080/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:
- For a single location:
End
For more information on the properties of this settings group, see Web Services Settings Groups.
Configuring the API Thread Pool
Interaction Recording Web Services provides properties for the Screen Recording API thread pool via archaius.
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 meta data |
| GetScreenRecordingMediaApiTaskV2 | ApiStreamPool | Stream screen recording media |
| QueryScreenRecordingApiTaskV2 | ApiQueryPool | Query screen recording meta data |
For more information about the Call Recording API, see the Genesys Interaction Recording API Reference.
