Table of Contents

ECE

My Notes

UCCE - Integration

URLs

Install / Config Tips

PCCE CCE Admin - ECE Gadget Rendering Issues

Exception in LDAP authentication  <@> 
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=example,DC=com'

Pick / Pull Emails in ECE

Enable Pick Pull While In Not Ready

To Enable Pick Pull While In Not Ready you need to set the below registry key to “1” on the UCCE Router

[HKEY_LOCAL_MACHINE\SOFTWARE\Cisco Systems, Inc.\ICM\ucce\RouterA\Router\CurrentVersion\Configuration\Config]
"EnablePickPullWhileInNotReady"=dword:00000001

Note - to be able to search from a specific Queue - you must assign the relevant Skillgroup to the ECE Queue

Pull Emails

You need to select which Queues you want to pull from when not Ready. Select Options and then select the queues as per below:

Outbound ECE Emails

Jasper Reports

Admin API

PUT 
/system/ws/v19/administration/service/instance/998/stop
/system/ws/v19/administration/service/instance/998/start

PUT 
/system/ws/v19/administration/service/process/998/stop
/system/ws/v19/administration/service/process/998/start

Add Data to Chat before it is passed into the StartChat()

method.

Web Callbacks - Quick Start Guide







Importing UCCE Agents into ECE (not needed for PCCE)

When importing users - they are imported to a specific department.

Partition → Integration → Unified CCE → Unified CCE → Configuration
Bottom Right of page → Click on the Import button.

Chat Queuing

Max queue time - global setting (you can reduce it in the ICM Script by using a lower Wait timer).

ECE Web Server Authentication

Check the Account is using correct credentials in IIS

Give read account access to the CONFIG folder

Do NOT do below - as it will break the rights on the SCHEMA folder. This prevents the Default App Pool work process from starting successful.

However if you do - to revert SCHEMA folder as it should be:

“ALL APPLICATION PACKAGES”, “USERS” and if it lets you - you can also add “ALL RESTRICTED APPLICATION PACKAGES”

==== Below needs to be reviewed and corrected - as you do not want or need to change the rights to the SCHEMA folder.

X-Frame-Options and Content-Security-Policy HTTP Response Headers

The ECE webserver by default sets the X-Frame-Options and Content-Security-Policy to the value set in wsname parameter (which is passed as a URl variable). This allows the gadget and Chat form to be allowed as a iframe within the Finesse Server or the customers website.

However this could be hacked to set these values to whatever you set in the wsname - hence a possible security risk. To workaround this issue - we can fix this in the ECE Web Server IIS URL rewrite module - by updating the web.config file. the below only set the parameters for an allowed whitelist of the domains (and any sub domains) of “domain1.com or domain2.com”

Find and Replace as following in the ECE IIS web.config file:

Find:

"wsname=((http[s]?)(:|%3A)(/|%2F)(/|%2F)([_0-9a-z-.@:%_\+~#=]*))"

Replace:

"wsname=((http[s]?)(:|%3A)(/|%2F)(/|%2F)([a-z0-9-]+[.])*(sub.domain1\.com|domain2\.com)(&amp;|%26|$))"

The above issues - the below should allow empty domains ….

<add input="{QUERY_STRING}" pattern="wsname=((http[s]?)(:|%3A)(/|%2F)(/|%2F)([a-z0-9-]+\.)*(domain1\.com|domain2\.com)(&amp;|%26|$))" />


Find:

<action type="Rewrite" value="ALLOW-FROM {C:2}://{UrlDecode:{C:6}}" replace="true" />

Replace:

<action type="Rewrite" value="ALLOW-FROM {C:2}://{UrlDecode:{C:6}{C:7}}" replace="true" />

Find:

<action type="Rewrite" value="frame-ancestors 'self' {C:2}://{UrlDecode:{C:6}}" replace="true" />

Replace:

<action type="Rewrite" value="frame-ancestors 'self' {C:2}://{UrlDecode:{C:6}{C:7}}" replace="true" />

This is an extract of the default config file for above

<outboundRules>
                <rule name="XFrame_wsname">
                    <match serverVariable="RESPONSE_X_Frame_Options" pattern=".+" negate="true" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                        <add input="{QUERY_STRING}" pattern="wsname=((http[s]?)(:|%3A)(/|%2F)(/|%2F)([_0-9a-z-.@:%_\+~#=]*))" />
                        <add input="{UNENCODED_URL}" pattern="/(?:web/apps|web/integration/view/platform/common/login|templates/selfservice|templates/finesse/gadget|web/view/platform/common/login|web/controller|templates/chat|web/view/live/customer)/" />
                    </conditions>
                    <action type="Rewrite" value="ALLOW-FROM {C:2}://{UrlDecode:{C:6}}" replace="true" />
                </rule>
                <rule name="CSP-wsname">
                    <match serverVariable="RESPONSE_Content_Security_Policy" pattern=".+" negate="true" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
                        <add input="{QUERY_STRING}" pattern="wsname=((http[s]?)(:|%3A)(/|%2F)(/|%2F)([_0-9a-z-.@:%_\+~#=]*))" />
                        <add input="{UNENCODED_URL}" pattern="/(?:web/apps|web/integration/view/platform/common/login|templates/selfservice|templates/finesse/gadget|web/view/platform/common/login|web/controller|templates/chat|web/view/live/customer)/" />
                    </conditions>
                    <action type="Rewrite" value="frame-ancestors 'self' {C:2}://{UrlDecode:{C:6}}" replace="true" />
                </rule>
<rule name="CSP-wsname">
  <match serverVariable="RESPONSE_Content_Security_Policy" pattern=".+" negate="true" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
    <!-- One step: extract domain and validate -->
    <add input="{QUERY_STRING}" 
         pattern="wsname=((http[s]?)(:|%3A)((/|%2F)(/|%2F))(([^&/]+)\.(mydomain1\.com|mydomain2\.com)))" />
    
    <!-- Check for the correct page path -->
    <add input="{UNENCODED_URL}" 
         pattern="/(?:web/apps|web/integration/view/platform/common/login|templates/selfservice|templates/finesse/gadget|web/view/platform/common/login|web/controller|templates/chat|web/view/live/customer)/" />
  </conditions>
  <!-- Use captured protocol and domain -->
  <action type="Rewrite" 
          value="frame-ancestors 'self' {C:2}://{UrlDecode:{C:5}}" 
          replace="true" />
</rule>

Email OAuth

Deleting / Clearing an Activity

Permissions

All of the following are required:

In PCCE - the above permissions are added by adding in ECE → User → Relationships:

Deleting Attachments

Changing the AW which ECE connects to

Read the readme and Run utility at the following location.

D:\ECE\Utilities\awdb_server_refresh

Example URLs for ECE 12.5

Stopping ECE Data Script

@echo off
REM Stop the Cisco Service
net stop "Cisco Service"

REM Wait 5 minutes, then kill any remaining java or javaw
ECHO Waiting 5 minutes before continuing
timeout /t 600 /nobreak
taskkill /IM java* /f

REM Restart Cisco Service
net start "Cisco Service"
ECHO Cisco Service is restarted, please monitor task manager to validate when system is running. 

ECE Database Memory Config

USE master
GO
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'min server memory', 3072;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 10240;
GO
RECONFIGURE;
GO

Upgrade TIPS

There's two different ISOs for ECE that can do a full install or an upgrade from a non 12.6 version

Note - you cannot use the ES to do an install or upgrade. Install Upgrade with base versions above and then apply the updates.

Summary of Tech Refresh

Short version:

ECE Java CA Cert Store

and NOT

The latter - gets overwritten at startup!

ECE Databases - simple overview

Microsoft Graph API Permissions for ECE

Provide Graph API permissions to ECE for your email accounts.

1. Navigate to the https://developer.microsoft.com/en-us/graph/graph-explorer in incognito mode.

2. Login to the URL https://developer.microsoft.com/en-us/graph/graph-explorer using the service/admin credentials configured for the email accounts in ECE solve application.

3. Provide consent to below Microsoft graph API endpoints: