Here is a cool new Cert Tool for CCE
Here are the commands for the Reporting Server.
%CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -delete -alias wsm_certificate %CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -delete -alias callserver_certificate %CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -genkeypair -alias wsm_certificate -keysize 2048 -keyalg RSA -validity 3650 %CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -genkeypair -alias callserver_certificate -keysize 2048 -keyalg RSA -validity 3650 %CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -export -alias wsm_certificate -file %CVP_HOME%\conf\security\wsm.crt %CVP_HOME%\jre\bin\keytool.exe -storetype JCEKS -keystore %CVP_HOME%\conf\security\.keystore -export -alias callserver_certificate -file %CVP_HOME%\conf\security\callserver.crt
For a Health / Content Switch health probe - use the following API call - as it does not require authentication
https://server/unifiedconfig/config/deployment
https://<server>/unifiedconfig/config/activedirectorydomain https://<server>/unifiedconfig/config/deployment https://<server>/unifiedconfig/config/deploymenttypeinfo https://<server>/unifiedconfig/config/machineinventory https://<server>/unifiedconfig/config/version https://<server>/unifiedconfig/config/routingtype https://<server>/unifiedconfig/config/registry https://<server>/unifiedconfig/config/status
TCD PeripheralCallKey = (globalCallID_callManagerId * (2 to the 24th)) + globalCallID_callId TCD PeripheralCallKey = (globalCallID_callManagerId * (16777216)) + globalCallID_callId example: TCD PeripheralCallKey = (4 * (16777216)) + 70002)
http://<CAD base services IP address>:8088/TUP/CAD/Install.htm
http://<CAD base services IP address>:8088/TUP/CAD/Admin.htm
http://<CAD base services IP address>:8088/TUP/CAD/SR.htm
https://CAD-server/cadbe/CAD-BE.jsp
http://CAD-server:8088/cadbe/CAD-BE.jsp
Version: LDAPv2 Host: IP address of the Server Port: 38983 Base DN: o=Spanlink Communications Security: Anonymous
This example has a “:” as the separator.
Call.PeripheralVariable8 == Variable1:Variable2"
Variable1 == left(Call.PeripheralVariable8,((find(":", Call.PeripheralVariable8))-1))
Variable2 == right(Call.PeripheralVariable8,((len(Call.PeripheralVariable8)-(find(":", Call.PeripheralVariable8)))))
user1stVariable ⇒
before(":",%1%)
user2ndvariable ⇒
before(":",right(%1%,((len(%1%)-(find(":",%1%))))))
VariableMinusFirst ⇒
right(%1%,((len(%1%)-(find(":",%1%)))))
userVariableMinusSecond ⇒
right(right(%1%,((len(%1%)-(find(":",%1%))))),((len(right(%1%,((len(%1%)-(find(":",%1%))))))-(find(":",right(%1%,((len(%1%)-(find(":",%1%))))))))))
user3rdvariable ⇒
user2ndVariable(userVariableMinusFirst(%1%))
user4thVariable ⇒
(userVariableMinusFirst(userVariableMinusFirst(%1%)))
Small Agent / Generic PG: Max of 5 (excluding CTIOS)
Large Agent / Generic PG: Max of 20 (excluding CTIOS)
Reference: Page 326 of UCCE 11 SRND
Extract below:
All-Event clients (CTI Server)
Max of 5: For 2 vCPU VMs built from the Small Agent PG OVA. These clients are in addition to the 2 CTI OS connections. You can reduce the number of All-Event clients to support more monitor mode connections.
Max of 20: For 4 vCPU VMs built from the Large Agent PG OVA. These clients are in addition to the 2 CTI OS connections. You can reduce the number of All-Event clients to support more monitor mode connections.
| Reason Code | Reason Description |
|---|---|
| -1 | Agent reinitialized due to peripheral restart |
| -2 | PG reset the agent - PG Failure |
| 999 | A Finesse supervisor forced an agent state change. |
| -3 | Administrator modified the agents extension while the agent was logged in |
| 32767 | The agent's state was changed to Not Ready because the agent did not answer a call and the call was redirected to a different agent or skill group. |
| 50002 | CTIOS Failure - Agent Logged Out Incorrectly? |
| 50003 | The agent was logged out because CUCM reported the agents device as out of service |
| 50004 | The agent was logged out due to agent inactivity as configured in agent desk settings |
| 50010 | Not Ready - The agent did not receive multiple consecutive calls routed to him/her. The system makes the agent Not Ready automatically so that additional calls are not routed to the agent. By default, the number of consecutive calls missed before the agent is made Not Ready is 2. |
| 50020 | Logged Out Due to been Reskilled |
| 50040 | The mobile agent was logged out because the call failed. |
| 50041 | Not Ready - The agent's state was changed to Not Ready because the call fails when the agent's phone line rings busy. |
| 50042 | The mobile agent was logged out because the phone line disconnected when using nailed connection mode. |
| 51004 | Not Ready - This reason codes applies if an agent logs onto an extension which already has a call or if the agent is on a call when the PG restarts. |
Concatenate can handle up to 8 arguments - as per below - any more and it will give a “too many arguments” error If you need to concatenate more - put your 8 arguments to one VariableX and another 8 to another variableY and then concatenate variables X and Y.
concatenate("a=a1","b=2","c=3","d=4","e=5","f=6","g=7","h=8")
Disable on all VMs the following:
How to check:
@echo off : Gerard O'Rourke cls set confirm=N set /P confirm=Do you want to proceed and disable RSS? IF "%confirm%" == "Y" goto continue IF "%confirm%" == "y" goto continue goto end :continue @echo on netsh int tcp set global rss=disabled netsh int tcp show global pause exit :end echo Script Aborted! pause
Open when 1 or 3, Closed when 0 or 2
<configuredStatus><status>0</status></configuredStatus> <runTimeStatus>1</runTimeStatus>
Calender Closed
<configuredStatus><status>0</status></configuredStatus> <runTimeStatus>0</runTimeStatus>
Forced Open
<configuredStatus><status>2</status></configuredStatus> <runTimeStatus>3</runTimeStatus>
Forced Closed
<configuredStatus><status>1</status></configuredStatus> <runTimeStatus>2</runTimeStatus>
<businessHour> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> <refURL>/unifiedconfig/config/businesshour/5001</refURL> <changeStamp>3</changeStamp> <configuredStatus> <status>2</status> <statusReason> <refURL>/unifiedconfig/config/businesshourstatusreason/5003</refURL> <reasonText>Unknown Reason</reasonText> </statusReason> </configuredStatus> <name>ForceOpenExample</name> <runTimeStatus>3</runTimeStatus> <runTimeStatusReason>Unknown Reason</runTimeStatusReason> <specialDaySchedules/> <timezone> <refURL>/unifiedconfig/config/timezone/v2/5038</refURL> <displayName>(UTC) Dublin, Edinburgh, Lisbon, London</displayName> </timezone> <type>0</type> <weekDaySchedules/> </businessHour>
<businessHour> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> <refURL>/unifiedconfig/config/businesshour/5002</refURL> <changeStamp>1</changeStamp> <configuredStatus> <status>1</status> <statusReason> <refURL>/unifiedconfig/config/businesshourstatusreason/5003</refURL> <reasonText>Unknown Reason</reasonText> </statusReason> </configuredStatus> <name>ForceClosedExample</name> <runTimeStatus>2</runTimeStatus> <runTimeStatusReason>Unknown Reason</runTimeStatusReason> <specialDaySchedules/> <timezone> <refURL>/unifiedconfig/config/timezone/v2/5038</refURL> <displayName>(UTC) Dublin, Edinburgh, Lisbon, London</displayName> </timezone> <type>0</type> <weekDaySchedules/> </businessHour>
<businessHour> <refURL>/unifiedconfig/config/businesshour/5003</refURL> <changeStamp>1</changeStamp> <configuredStatus> <status>0</status> </configuredStatus> <name>OpenHours_247</name> <runTimeStatus>1</runTimeStatus> <runTimeStatusReason>Week Day open reason</runTimeStatusReason> <specialDaySchedules/> <timezone> <refURL>/unifiedconfig/config/timezone/v2/5038</refURL> <displayName>(UTC) Dublin, Edinburgh, Lisbon, London</displayName> </timezone> <type>0</type> <weekDaySchedules/> </businessHour>
<businessHour> <refURL>/unifiedconfig/config/businesshour/5000</refURL> <changeStamp>21</changeStamp> <configuredStatus> <status>0</status> </configuredStatus> <name>Hours_Sales</name> <runTimeStatus>0</runTimeStatus> <runTimeStatusReason>Week Day closed reason</runTimeStatusReason> <specialDaySchedules/> <timezone> <refURL>/unifiedconfig/config/timezone/v2/5038</refURL> <displayName>(UTC) Dublin, Edinburgh, Lisbon, London</displayName> </timezone> <type>1</type> <weekDaySchedules> <weekDaySchedule> <refURL>/unifiedconfig/config/businesshour/5000/weekdayschedule/5006</refURL> <changeStamp>1</changeStamp> <endTime>17:00</endTime> <startTime>07:00</startTime> <dayOfWeek>1</dayOfWeek> </weekDaySchedule> <weekDaySchedule> <refURL>/unifiedconfig/config/businesshour/5000/weekdayschedule/5007</refURL> <changeStamp>7</changeStamp> <endTime>17:00</endTime> <startTime>07:00</startTime> <dayOfWeek>2</dayOfWeek> </weekDaySchedule> <weekDaySchedule> <refURL>/unifiedconfig/config/businesshour/5000/weekdayschedule/5008</refURL> <changeStamp>2</changeStamp> <endTime>17:00</endTime> <startTime>07:00</startTime> <dayOfWeek>3</dayOfWeek> </weekDaySchedule> <weekDaySchedule> <refURL>/unifiedconfig/config/businesshour/5000/weekdayschedule/5009</refURL> <changeStamp>0</changeStamp> <endTime>17:00</endTime> <startTime>09:00</startTime> <dayOfWeek>4</dayOfWeek> </weekDaySchedule> <weekDaySchedule> <refURL>/unifiedconfig/config/businesshour/5000/weekdayschedule/5010</refURL> <changeStamp>0</changeStamp> <endTime>17:00</endTime> <startTime>09:00</startTime> <dayOfWeek>5</dayOfWeek> </weekDaySchedule> </weekDaySchedules> </businessHour>
The example formula provided by the Courtesy Call back Script:
ValidValue(((SkillGroup.%1%.RouterCallsQNow+1)
*
(ValidValue(SkillGroup.%1%.AvgHandledCallsTimeTo5,20))
/max(
SkillGroup.%1%.Ready,
(SkillGroup.%1%.TalkingIn
+
SkillGroup.%1%.TalkingOut
+
SkillGroup.%1%.TalkingOther))
),100)
Actual Example with Skillgroup “eirSupport1”
Skill Group Example ValidValue(((SkillGroup.eirSupportSG1.RouterCallsQNow+1)*(ValidValue(SkillGroup.eirSupportSG1.AvgHandledCallsTimeTo5,100))/max(SkillGroup.eirSupportSG1.Ready,(SkillGroup.eirSupportSG1.TalkingIn+SkillGroup.eirSupportSG1.TalkingOut+SkillGroup.eirSupportSG1.TalkingOther))),100)
===
This returns the EWT in seconds. Effectivity the formula is: Calls in (Queue * Average Handled Time) / Number of agents that logged in and actively taking calls (i.e. exclude agents that are not ready)
The formula uses the ValidValue so if no current value available for the last 5 minutes it returns a 'default' value.
These should be set the specific Average Handle Time for this specific Queue (determine this by reviewing the SG / PQ Historical report).
Here is a Precision Queue Example:
ValidValue(((PQ.eirSupport1_PQ.CallsInQ+1)*(ValidValue(PQ.eirSupport1_PQ.AvgHandledCallsTimeTo5,285))/max(PQ.eirSupport1_PQ.Ready,(PQ.eirSupport1_PQ.TalkingIn+PQ.eirSupport1_PQ.TalkingOut+PQ.eirSupport1_PQ.TalkingOther))),285)
If the formula is used prior to routing to the PQ - you should include the +1.
If the formula is used after queuing to the SG / PQ - then this should be excluded.
ValidValue(((PQ.Sales_PQ.CallsInQ+PQ.CustomerService_PQ.CallsInQ+PQ.Accounts.CallsInQ)*trun((ValidValue(PQ.Sales_PQ.AvgHandledCallsTimeTo5,285)+ValidValue(PQ.CustomerService_PQ.AvgHandledCallsTimeTo5,285)+ValidValue(PQ.Accounts.AvgHandledCallsTimeTo5,285))/3)/max(PQ.Sales_PQ.Ready,(PQ.Sales_PQ.TalkingIn+PQ.Sales_PQ.TalkingOther))),285)
Name: EWT_1PQ
ValidValue(((PQ.%1%.CallsInQ)*trunc((ValidValue(PQ.%1%.AvgHandledCallsTimeTo5,%2%))/max(PQ.%1%.Ready,(PQ.%1%.TalkingIn+PQ.%1%.TalkingOther)))),1)
Name: EWT_CustomerService_PQ
trunc(1.0*( userEWT_1PQ(CustomerService_PQ,497) + userEWT_1PQ(Apples_PQ,249) + trunc(0.7*(userEWT_1PQ(Bananas_PQ,171))) ) )
Name: EWT_1SkillGroup
ValidValue(((SkillGroup.%1%.RouterCallsQNow)*trunc((ValidValue(SkillGroup.%1%.AvgHandledCallsTimeTo5,%2%))/max(SkillGroup.%1%.Ready,(SkillGroup.%1%.TalkingIn+ SkillGroup.%1%.TalkingOut+SkillGroup.%1%.TalkingOther)))),%2%)
Name: EWT_Sales
userEWT_1SkillGroup(Sales_IVR,300) + trunc((0.50)*userEWT_1SkillGroup(Apples_IVR,386)) + trunc((0.80)*userEWT_1SkillGroup(Bananas_IVR,300))
https://cvp-server:8111/cvp-dp/rest/DiagnosticPortal/ListConfigurationCategories https://cvp-server:8111/cvp-dp/rest/DiagnosticPortal/GetConfigurationCategory?Category=CallServer%2FSIP&Filename=C%3A%5CCisco%5CCVP%5Cconf%5Csrv.xml https://cvp-server:8111/cvp-dp/rest/DiagnosticPortal/GetConfigurationCategory?Category=CallServer/SIP&Filename=C:%5CCisco%5CCVP%5Cconf%5Csrv.xml https://cvp-server:8111/cvp-dp/rest/DiagnosticPortal/GetProductVersion https://cce-server:7890/icm-dp/rest/DiagnosticPortal/GetProductVersion https://cce-server:7890/icm-dp/rest/DiagnosticPortal/ListServices https://finesse:8445/finesse/api/SystemInfo
Note - only PCCE API allows you to create Agents.
With UCCE you get a 405 - method not allowed.
HTTP GET
URL:
https://ucce-hds-12/unifiedconfig/config/agent?time=1677491118064&startIndex=0&q=&ignoreSearchErrors=true&summary=true&resultsPerPage=2
Response
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <results> <pageInfo> <firstPage>https://ucce-hds-12/unifiedconfig/config/agent?sort=person.userName%20asc&resultsPerPage=2</firstPage> <lastPage>https://ucce-hds-12/unifiedconfig/config/agent?sort=person.userName%20asc&startIndex=4&resultsPerPage=2</lastPage> <nextPage>https://ucce-hds-12/unifiedconfig/config/agent?sort=person.userName%20asc&startIndex=2&resultsPerPage=2</nextPage> <resultsPerPage>2</resultsPerPage> <sortTerm>person.userName asc</sortTerm> <startIndex>0</startIndex> <totalResults>6</totalResults> </pageInfo> <permissionInfo> <canCreate>true</canCreate> <canUpdate>true</canUpdate> <canDelete>true</canDelete> <role>Administrator</role> <departmentAdmin>false</departmentAdmin> </permissionInfo> <agents> <agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="agentSummary"> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> <refURL>/unifiedconfig/config/agent/5028</refURL> <changeStamp>7</changeStamp> <agentId>5551001</agentId> <agentServicesEnabled/> <agentStateTrace>false</agentStateTrace> <agentTeam> <refURL>/unifiedconfig/config/agentteam/5000</refURL> <name>Team_A</name> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> </agentTeam> <person> <ecePerson>true</ecePerson> <firstName>Alice</firstName> <lastName>Anderson</lastName> <loginEnabled>true</loginEnabled> <screenName>Alice</screenName> <ssoEnabled>false</ssoEnabled> <userName>[email protected]</userName> </person> <supervisor>true</supervisor> </agent> <agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="agentSummary"> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> <refURL>/unifiedconfig/config/agent/5029</refURL> <changeStamp>6</changeStamp> <agentId>5551002</agentId> <agentServicesEnabled/> <agentStateTrace>false</agentStateTrace> <agentTeam> <refURL>/unifiedconfig/config/agentteam/5000</refURL> <name>Team_A</name> <department> <refURL>/unifiedconfig/config/department/5000</refURL> <name>Department1</name> </department> </agentTeam> <person> <ecePerson>true</ecePerson> <firstName>Bob</firstName> <lastName>Bobster</lastName> <loginEnabled>true</loginEnabled> <screenName>Bob</screenName> <ssoEnabled>false</ssoEnabled> <userName>bob</userName> </person> <supervisor>false</supervisor> </agent> </agents> </results>
HTTP POST
URL:
https://ucce-hds-12/unifiedconfig/config/agent
BODY:
<agent> <agentId>999001</agentId> <peripheral/> <peripheralSet/> <person> <firstName>temp</firstName> <lastName>agent1</lastName> <userName>temp_agent1</userName> <loginEnabled>false</loginEnabled> <ssoEnabled>false</ssoEnabled> <password>12345</password> <ecePerson>false</ecePerson> </person> <description>My Desc</description> <department/> <datacenter/> <agentDeskSettings/> <agentTeam/> <agentAttributes/> <skillGroups> <skillGroup> <refURL>/unifiedconfig/config/skillgroup/5035</refURL> </skillGroup> </skillGroups> <defaultSkillGroup/> <supervisor>false</supervisor> <supervisorTeams/> </agent>
Make sure to install ODBC 13
Install Error
2023-05-21 12:13:41 [Information] Operating System ProductName = Windows Server 2019 Standard
2023-05-21 12:13:41 [Information] Microsoft SQL Server is installed on this system
2023-05-21 12:13:41 [Information] Checking Microsoft SQL Server installation
2023-05-21 12:13:41 [Information] MSSQLSERVER service is started.
2023-05-21 12:13:41 [Information] SQL query = select case when CHARINDEX('64', CAST(SERVERPROPERTY('Edition') AS VARCHAR(100))) >0 then 64 else 32 end
2023-05-21 12:13:41 [Information] Return code from dbupgRunSQLSelectInt = 0
2023-05-21 12:13:41 [Error] Installer failed due to the following possible reasons:
1) SQL Server Edition check failed.
2) The logged in user may not be part of SQL security logins with sysadmin role associated.
Please correct the errors manually and re-start the ICM Installation.
ALTER DATABASE master SET COMPATIBILITY_LEVEL = 140;
SELECT name, compatibility_level FROM sys.databases;
Reference: Compatability: https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/icm_enterprise/ucce_compatibility/matrix/rcct_b_12_6_solution_compatibility_matrix.html Install: https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/pcce/pcce_12_6_2/installation/guide/pcce_b_1262_cisco_pcce_installationandupgrade_guide/pcce_b_cisco_pcce_installationandupgrade_guide_12_5_2_appendix_01010.html#task_BFD5435B077F5DD844025A17F2B572DB SQL https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-ver15
An Example of using UPCCTEST. This should only be used with instructions from TAC.
upcctest: tran /start upcctest: SystemAttribute /SystemAttributeID <ID> /AttributeValue 1 /cs <CHANGESTAMP> /update upcctest: tran /commit Verify the update by executing query on AWDB.
If the ID the field is '1234' and the existing change stamp is '9' the command would look like below:
upcctest: tran /start upcctest: SystemAttribute /SystemAttributeID 1234 /AttributeValue 1 /cs 9 /update upcctest: tran /commit Verify the update by executing query on AWDB.
tran /start ReasonCode /ReasonCode 50006 /ReasonText Offhook /desc "The agent takes the phone off the hook to place a call. If the agent remembers to change the status, the agent-triggered reason code is displayed. If the agent does not remember to change the status, the system issues this reason code" /ReasonType 4 /IsGlobal Y tran /commit
Java 8 needed for utilities such as RTMT - Java 8 can be download here: