Finesse
Bulk Create Reason Codes on CCE 12.X
Gadgets
Links
RTMT available on finesse - https://FQDN:8443/plugins/CcmServRtmtPlugin.exe
Sample Code
CUIC Permalink Report in Finesse
Finesse API
Predefined Reason Codes
Performance Stats
Example
https://finesse1.xyz.com/finesse-dp/rest/DiagnosticPortal/GetPerformanceInformation
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <dp:GetPerformanceInformationReply ReturnCode="0" xmlns:dp="http://www.cisco.com/vtg/diagnosticportal"> <dp:Schema Version="1.0" /> <dp:PerformanceInformation> <dp:PropertyList> <dp:Property Value="109441280" Name="Tomcat/Heap Memory Utilized"/> <dp:Property Value="50921904" Name="Tomcat/Non Heap Memory Utilized"/> <dp:Property Value="0" Name="CTI Statistics/Incoming Responses Queue"/> <dp:Property Value="0" Name="CTI Statistics/Outgoing Responses Queue"/> <dp:Property Value="0" Name="Tomcat/Average Request Process Time"/> <dp:Property Value="0" Name="Tomcat/Longest Request Process Time"/> <dp:Property Value="1.47" Name="Average System Load"/> <dp:Property Value="183" Name="Tomcat/Thread Count"/> <dp:Property Value="183" Name="Tomcat/Peak Thread Count"/> <dp:Property Value="0" Name="CTI Statistics/Events In Queue"/> <dp:Property Value="0" Name="CTI Statistics/Decoding Responses Queue"/> <dp:Property Value="0" Name="Active Totals/Logged In Agents"/> <dp:Property Value="0" Name="Active Totals/Current Calls"/> <dp:Property Value="0" Name="Running Totals/Calls Received or Initiated"/> <dp:Property Value="0" Name="Running Totals/Calls Failed"/> </dp:PropertyList> </dp:PerformanceInformation> </dp:GetPerformanceInformationReply>
Load Balancing
Use SystemInfo API (check out https://developer.cisco.com/site/finesse/documents/dev-guide/)
Example
Query: http://finesse.domain.com/finesse/api/SystemInfo
Response:
<SystemInfo> <deploymentType>UCCE<deploymentType> <peripheralId>5001</peripheralId> <license></license> <currentTimeStamp>2014-01-27T13:07:08.687Z</currentTimeStamp> <status>IN_SERVICE</status> <timezoneOffset>300</timezoneOffset> <xmppDomain>xmppserver.xyz.com</xmppDomain> <xmppPubSubDomain>pubsub.xmppserver.xyz.com</xmppPubSubDomain> <primaryNode> <host>10.1.1.1</host> </primaryNode> <secondaryNode> <host>10.1.1.2</host> </secondaryNode> </SystemInfo>
As documented in Finesse Developer Guide, using Firefox plugin Poster is great for testing / developing against Finesse.
There is also a REST Client from http://www.wiztools.org/
Sample Gadgets from dev net
http://orourke.tv/finesse/
Sample Workflow URL
FINESSE REASON CODES LIST
Reference
https://developer.cisco.com/site/finesse/docs/#reasoncode
https://developer.cisco.com/site/finesse/docs/#reasoncodeget-list
Examples
https://finesse.purplepi.ie/finesse/api/ReasonCodes?category=ALL
https://finesse.purplepi.ie/finesse/api/ReasonCodes?category=NOT_READY
https://finesse.purplepi.ie/finesse/api/ReasonCodes?category=LOGOUT
Log Gathering
file get activelog desktop recurs reltime days x
Client Network Connections
show network status nodns search :8445
Or try this
show network status nodns search :7443
On a Browser Refresh - Finesse Retrieves the following
Making REST request: method=GET, url= /finesse/api/SystemInfo?nocache=1526048581775 /finesse/api/User/5552002?nocache=1526048581793 /finesse/api/User/5552002/Dialogs?nocache=1526048582232 /finesse/api/User/5552002/ReasonCodes?category=LOGOUT&nocache=1526048582234 /finesse/api/User/5552002/ReasonCodes?category=NOT_READY&nocache=1526048582237 /finesse/api/User/5552002/Workflows?nocache=1526048582255 /finesse/api/User/5552002/WrapUpReasons?nocache=1526048583420 /finesse/api/User/5552002/MediaPropertiesLayouts?nocache=1526048583422
Decrypt HTTPS traffic from UC Servers using wireshark
Private Keys
http://tech.yanatm.com/?p=1213
/usr/local/platform/.security/tomcat/keys/
HTTP Method Used
- GET: Retrieve a single object or list of objects (for example, a single user or list of users).
- PUT: Replace a value in an object (for example, to change the state of a user from NOT_READY to READY).
- POST: Create a new entry in a collection (for example, to create a new reason code or wrap-up reason).
- DELETE: Remove an entry from a collection (for example, to delete a reason code or wrap-up reason).
Agent Login/Logout/Ready/NotReady
Reference - https://developer.cisco.com/docs/finesse/#!usersign-in-to-finesse/usersign-in-to-finesse
URL: http://finesse1.xyz.com/finesse/api/User/1234
Method: PUT
Content Type: Application/XML
HTTP Request
<User> <state>LOGIN</state> <extension>1001001</extension> </User>
<User> <state>LOGOUT</state> <logoutAllMedia>true</logoutAllMedia> </User>
<User> <state>READY</state> </User>
<User> <state>NOT_READY</state> <reasonCodeId>1</reasonCodeId> </User>
Reference Finesse JavaScript on 3rd Party Gadget
Third-party gadgets that are hosted on a separate web server can reference the JavaScript library accordingly: Refernce: https://developer.cisco.com/docs/finesse/#faq
<?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="My Title" > <Require feature="settitle" /> <Require feature="dynamic-height" /> <Require feature="pubsub-2" /> <Require feature="setprefs" /> </ModulePrefs> <UserPref name="scheme" display_name="scheme" default_value=""/> <UserPref name="host" display_name="host" default_value=""/> <UserPref name="hostPort" display_name="hostPort" default_value=""/> <Content type="html"> <![CDATA[ <!-- jQuery --> <script type="text/javascript" src="__UP_scheme__://__UP_host__:__UP_hostPort__/desktop/assets/js/jquery.min.js"></script> <!-- Finesse Library --> <script type="text/javascript" src="__UP_scheme__://__UP_host__:__UP_hostPort__/desktop/assets/js/finesse.js"></script> <script type="text/javascript"> gadgets.HubSettings.onConnect = function () { finesse.modules.myFunction.init(); }; </script> ]]> </Content> </Module>
Modified Versions of Cisco Sample Gadgets
Gadget Caching
Clear Caching by
- restarting 'Cisco Finesse Tomcat'
- use the CLI command utils webproxy cache clear shindig to clear the Shindig cache.
- Pass a “nocache” parameter in the URL to clear the cache.
Example:
cURL
Example Using cURL to send Finesse Commands (See Finesse Developer Guide)
Download cURL for Windows from here: http://www.confusedbycode.com/curl/
curl -X PUT http://192.168.1.173/finesse/api/User/12001 --user "12001:12345" -H "Content-Type:application/xml" --data "<User><state>READY</state></User>"
This will send a HTTP PUT as in the below example:
PUT /finesse/api/User/12001 HTTP/1.1 Authorization: Basic MTIwMDE6MTIzNDU= User-Agent: curl/7.36.0 Host: 192.168.1.173 Accept: */* Content-Type:application/xml Content-Length: 33 <User><state>READY</state></User>
WGET
WGET does not support PUT, but its it does support POST.
A HTTP POST is what the JavaScript library uses similar to below using wget
It includes in the POST the full URL which includes the PUT details as in above
Note: It also contains the Baisc Authentication String, which would need to be worked out before hand
wget http://192.168.1.173/gadgets/makeRequest --header="Content-Type: application/x-www-form-urlencoded; charset=UTF-8" --post-data="url=http%3A%2F%2Flocalhost%3A8080%2Ffinesse%2Fapi%2FUser%2F12001&httpMethod=PUT&headers=Content-Type%3Dapplication%252Fxml%26Authorization%3DBasic%2520MTIwMDE6MTIzNDU%253D&postData=%3CUser%3E%3Cstate%3EREADY%3C%2Fstate%3E%3C%2FUser%3E"
This send the following HTTP POST
POST /gadgets/makeRequest HTTP/1.0 User-Agent: Wget/1.11.4 Accept: */* Host: 192.168.1.173 Connection: Keep-Alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Content-Length: 234 url=http%3A%2F%2Flocalhost%3A8080%2Ffinesse%2Fapi%2FUser%2F12001&httpMethod=PUT&headers=Content-Type%3Dapplication%252Fxml%26Authorization%3DBasic%2520MTIwMDE6MTIzNDU%253D&postData=%3CUser%3E%3Cstate%3EREADY%3C%2Fstate%3E%3C%2FUser%3E
UCCX URLs
https://uccx10-5a.ucce9.lab.orourke.tv:8445/finesse/api/SystemInfo
https://uccx10-5a.ucce9.lab.orourke.tv:8445/desktop/
JavaScrpit API
jQUERY & Finesse JavaScript Library Location on Finesse
<!-- jQuery --> <script type="text/javascript" src="/desktop/assets/js/jquery.min.js"></script> <!-- Finesse Library --> <script type="text/javascript" src="/desktop/assets/js/finesse.js"></script>
Gather Finesse Logs
(Requires an SFTP server)
file get activelog desktop/logs/*
Or this should refine it by date
file get activelog desktop/logs/* recurs reltime days 2
Finesse Admin GUI Password Locked
Account Locked After Five Failed Sign In Attempts
If an administrator tries to sign in to the Finesse administrator console (or diagnostic portal) with the wrong password five times in a row, Finesse blocks access to that user account for a period up to 30 minutes. For security reasons, Finesse does not alert the user that their account is locked. They must wait 30 minutes and try again.“
If you do not want to wait - you must set the UI password to a new password via the OS admin access. Then reset the password again back to its original password (so set the password twice!). This will unlock the password and you can log in again with the original password.
admin:utils reset_application_ui_administrator_password New password:* Confirm new Password:* -------------------- utils reset_ui_administrator_password -------------------- Reset user interface password
Finesse Gadget - Call Variables
var callvars = new Array(); // the callvars array of callvariables callvars = dialog.getMediaProperties(); var callType = callvars.callType; clientLogs.log('handleNewDialog(): callType=' + callType); var callState = dialog.getState(); clientLogs.log('handleNewDialog(): callState=' + callState); var callVariable = callvars["callVariable9"]; clientLogs.log("handleNewDialog(): callVariable9="+callvars["callVariable9"]);
Upgrading to CCE 12
You need to manually configure the Reason codes and WrapUp Strings on CCE when you upgrade to CCE 12. Here is how to get all the Reason codes from Finesse:
All Reason Codes
https://ucce-finesse-a.lab2.purplepi.ie/finesse/api/ReasonCodes?category=NOT_READY https://ucce-finesse-a.lab2.purplepi.ie/finesse/api/ReasonCodes?category=LOGOUT
All Wrap Ups
https://ucce-finesse-a.lab2.purplepi.ie/finesse/api/WrapUpReasons
Force Wrap Ups
https://community.cisco.com/t5/contact-center/finesse-12-force-wrap-up-config/td-p/4000554
utils finesse set_property desktop forceWrapUp true
utils finesse set_property desktop forceWrapUp false
Example Finesse URL Parameters
container=default& mid=0& nocache=1& country=US& lang=en& view=default& refresh=86400& up_id=5551002& up_order=128& up_country=US& up_language=en& up_locale=en_US& up_host=ucce-finesse-a.lab2.purplepi.ie& up_hostPort=443& up_extension=12022& up_xmppDomain=UCCE-FINESSE-A.lab2.purplepi.ie& up_pubsubDomain=pubsub.UCCE-FINESSE-A.lab2.purplepi.ie& up_restHost=ucce-finesse-a.lab2.purplepi.ie& up_mobileAgentMode=undefined& up_mobileAgentDialNumber=undefined& up_scheme=https& up_localhostFQDN=UCCE-FINESSE-A.lab2.purplepi.ie& up_localhostPort=8082&up_teamId=5000& up_teamName=Team_01&up_clientDriftInMillis=219& up_systemAuthMode=NON_SSO& up_compatibilityMode=false& up_toasterNotificationTimeout=8& up_CCDContainer=true& up_externalServerHost=https%3A%2F%2Fucce-finesse-a.lab2.purplepi.ie%3A443&up_deploymentType=UCCE& up_peripheralId=5000& up_messages=%7B%22select.agent.message%22%3A%22Select+an+Agent+from+Team+Performance+Gadget%22%7D& st=john.doe%3Ajohn.doe%3Aappid%3Acont%3Aurl%3A0%3Adefault& url=https%3A%2F%2Fucce-hds-a.lab2.purplepi.ie%2Freports%2Fgadgets%2FScreenPop1%2FScreenPop.xml%3Fbanana%3Dtrue
Finesse - getMediaProperties - CCE Call Variables
var callVariables = dialog.getMediaProperties();
Example CCE Variable List Retrieved
callVariable1 callVariable2 callVariable3 callVariable4 callVariable5 callVariable6 callVariable7 callVariable8 callVariable9 callVariable10 user.media.id user.microapp.ToExtVXML[0] user.microapp.ToExtVXML[1] user.microapp.ToExtVXML[2] user.microapp.ToExtVXML[3] user.microapp.ToExtVXML[4] user.microapp.FromExtVXML[0] user.microapp.FromExtVXML[1] user.microapp.FromExtVXML[2] user.microapp.FromExtVXML[3] user.microapp.app_media_lib user.microapp.caller_input user.cvp_server_info DNIS callType dialedNumber outboundClassification queueNumber queueName callKeyCallId callKeyPrefix
Call History Gadget
<tab> <id>myHistory</id> <icon>history</icon> <label>finesse.container.tabs.agent.myHistoryLabel</label> <columns> <column> <!-- The following gadgets are used for viewing the call history and state history of an agent. --> <gadgets> <gadget>https://my-cuic-server:8444/cuic/gadget/LiveData/LiveDataGadget.jsp?gadgetHeight=280&viewId=5FA44C6F930C4A64A6775B21A17EED6A&filterId=agentTaskLog.id=CL%20teamName</gadget> <gadget>https://my-cuic-server:8444/cuic/gadget/LiveData/LiveDataGadget.jsp?gadgetHeight=280&viewId=56BC5CCE8C37467EA4D4EFA8371258BC&filterId=agentStateLog.id=CL%20teamName</gadget> </gadgets> </column> </columns> </tab>
alternateHosts Configuration
The <gadget> element in the Finesse Layout XML provides an attribute to specify alternate hosts from which the gadget can be loaded. This allows the Cisco Finesse desktop to load the gadget using a different host if the primary server is unavailable.
The alternateHosts attribute contains a comma-separated list of FQDNs that will be used if the primary-host-FQDN is unavailable.
<gadget alternateHosts="host1,host2,host3,..."> https://<primary-host-FQDN>/<gadget-URL> </gadget>
Serviceability API Examples
RuntimeConfigInfo
URL: https://finesse1.xyz.com/finesse/api/RuntimeConfigInfo
<RuntimeConfigInfo> <activeDialogCount>123</activeDialogCount> <activeTaskCount>0</activeTaskCount> <averageConfiguredMediaPerAgent>1</averageConfiguredMediaPerAgent> <averageLoggedInMediaPerAgent>1</averageLoggedInMediaPerAgent> <averageSkillGroupCountPerAgent>3</averageSkillGroupCountPerAgent> <maxSkillGroupCountPerAgent>10</maxSkillGroupCountPerAgent> <timeToInService>4</timeToInService> <totalLoggedInAgentsInNode>203</totalLoggedInAgentsInNode> <uniqueConfiguredSkillGroups>64</uniqueConfiguredSkillGroups> <uri>/finesse/api/RuntimeConfigInfo</uri> </RuntimeConfigInfo>
Get Product Version
URL: https://finesse1.xyz.com/finesse-dp/rest/DiagnosticPortal/GetProductVersion
<dp:GetProductVersionReply xmlns:dp="http://www.cisco.com/vtg/diagnosticportal" ReturnCode="0"> <dp:Schema Version="1.0"/> <dp:ProductVersion VersionString="12.0(1)" Maintenance="1" Minor="0" Major="12" Name="Cisco Finesse"/> <dp:ComponentVersionList/> </dp:GetProductVersionReply>
Disable XMPP External Access
utils finesse set_property webservices enableExternalNotificationPortAccess false
Reference: https://quickview.cloudapps.cisco.com/quickview/bug/CSCvi53649