Showing results for 
Search instead for 
Did you mean: 

Whisper Coaching

Level 1
Level 1

Dear Team,


I want to configure the Whisper coaching feature in a Finesse Gadget. and as far as I know, this feature is not based on REST APIs, and you need to write application for whisper i.e. web service. 

Appreciate if someone can guide me through building the web service code so that i will be able to call it through a finesse gadget.


Thank you

18 Replies 18

Cisco Employee
Cisco Employee

Hi Paul,


Thank you for your Reply i have navigated throughout the link and found the JAVA class ( Appreciate if you can guide me on how to implement this Java class in a web service so that i can call it from Finesse Gadget


Thank you for your usual support



You have the source directory and pom.xml so you just need to use maven to build the WAR file.  Navigate into the same directory as the pom.xml and issue "mvn install" from the command line.   Then deploy that web app on your app server of choice -- Tomcat, Glassfish, Jetty etc.

You'll have to manually add the JTAPI JAR for your CUCM version to your local maven repository and correct the dependency version in pom.xml.   The one I published was built some years ago on 11.5.   JAR dependencies shown in screenshot.


Screen Shot 2021-03-18 at 10.51.45.png

Hi Paul,


I went through the implementation of the document and i was checking the localhost catalina logs after updating the CUCM ip address and JTAPI user and password, but i am still receiving the below error 


18-Mar-2021 08:01:22.418 INFO [main] org.apache.catalina.core.ApplicationContext.log Marking servlet [Recording] as unavailable
18-Mar-2021 08:01:22.418 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [Recording] in web application [/recordctrl-1.0] threw load() exception
java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_US


to note that i have the below 2 jar files under the below path:

C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\recordctrl-1.0\WEB-INF\lib


1- javaee-web-api-7.0

2- json-20160810

3- jtapi-11.5 (My CUCM version)



to note as well that i have added the recordctrl-1.0.war file under webapps and i have restarted the tomcat service instead of using maven for deployment 



Anything i am missing ? and how i can make sure that the monitoring is working fine?


Kind regards,

Try also including javax.servlet-api-3.1.0.jar in WEB-INF/lib

Hi Paul,


Thank you for your reply, i have already added this jar file under the directory and i now have my webserver up and running with the below logs in stdout: Address 111, Event = CiscoAddrInServiceEv

i have as well tested the Rest API: http://<host:port/path>/monitor/<monitoredExtensionID> and it was successful.

and here i have 2 small questions:

1- this web server is going to provide on demand recording as well as whisper coaching right?

2- if possible, i need some hints to get this web service in a finesse gadget and i know that there is one to call a rest API, but how can i map the <monitoredExtensionID> and the monitor (supervisor extension) to this call


Thank you for your great support


Kind regards,




  1. Yes, you have all the recording and monitoring options available on CUCM via JTAPI exposed and available using HTTP. One simple thing you can test is to use a Finesse workflow to trigger recording when the agent answers based on a call variable set in the script containing a recording flag.   In fact, doing automated conditional recording based on variable content is the reason it was built.
  2. In your supervisor gadget you will need to include a UI element to select or enter the target agent extension to be monitored.  The monitor device will be the supervisors device which you will be able to pick up from the Finesse session user data.

Hi Paul,


What do you mean by a UI element ?? you mean a REST API gadget that I build on finesse and that gadget will contain a button to trigger the REST API http request. and regarding the monitored agent numbers that we need to pick, this has to be put manually ? or we can select the agent(click on the talking agent) like we do in silent monitoring then we can click the whisper coaching button without having to put the agent extension manually ??


thank you a lot again for your swift support



You'll need some user interface capability in your gadget for the supervisor to specify the target extension. The simplest would be an input field into which they enter the agent device DN and a button to start monitoring.   It would be slicker if you could use the selected agent in another gadget but I don't think that information will be available to you in a separate gadget iFrame without modifying the supervisor gadget or building a custom replacement for it.  You could try a question on the Finesse forum but I think you'd be better off using the simple form approach to get something working quickly.

Hi Paul,


I was testing the API using postman with the below input:


- 8888 is the calling number

- 569 is the called number

- 554 is the supervisor number that needs to monitor the call


- 554 wanna monitor 8888 

- all 3 extensions are in service

- using ip communicator for testing

- and i am using cucm mode without uccx

whenever i call the API, i receive a fast busy message with no resources error on the phone, although the phones are all in the same device pool and  using same codec

below are the stdout logs

Call [8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED, Event = TermConnRingingEv SEP28D2443E124A
Call [8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED, Event = ConnConnectedEv 569:PT_Internal:1
Call [8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED, Event = TermConnActiveEv SEP28D2443E124A
Call [8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED, Event = ConnConnectedEv 569:PT_Internal:1
Call [8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED, Event = TermConnActiveEv SEP28D2443E124A
Connection State = [SEP8CA982C37FBA/[8888:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14025)->ACTIVE]->ESTABLISHED]->TALKING
"tone": "NONE",
"action": "START",
"monitor": "554",
"type": "WHISPER"
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->DIALING, Event = CallActiveEv
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->DIALING, Event = ConnCreatedEv 554:PT_Internal:1
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->DIALING, Event = ConnConnectedEv 554:PT_Internal:1
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->DIALING, Event = TermConnCreatedEv SEP3CF01126079F
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->DIALING, Event = TermConnActiveEv SEP3CF01126079F
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14026)->ACTIVE]->FAILED, Event = ConnFailedEv 554:PT_Internal:1



thank you for your support






Can you confirm that Standard Monitoring and Barge in works OK using the out of the box Supervisor Finesse Desktop features using the same extensions? 




Hi Gerry,


i had an issue with my Monitoring CSS, now i fixed it and the API is calling the web service however both the client and the agent can hear the supervisor. to note that i have simulated the client as an extension calling to a trigger. so the call is as follows:


554 is the supervisor extension

8888 is an extension simulating the client calling into the call center

569 is the agent extension


below are the stdout logs:


Connection State = [SEP28D2443E124A/[569:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14072)->ACTIVE]->ESTABLISHED]->TALKING
"tone": "NONE",
"action": "START",
"monitor": "554",
"type": "WHISPER"
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = CallActiveEv
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnCreatedEv 554:PT_Internal:1
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnConnectedEv 554:PT_Internal:1
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = TermConnCreatedEv SEP3CF01126079F
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = TermConnActiveEv SEP3CF01126079F
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnCreatedEv 569:PT_Internal:5
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnInProgressEv 569:PT_Internal:5
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnAlertingEv 569:PT_Internal:5
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = ConnConnectedEv 569:PT_Internal:5
Call [554:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14074)->ACTIVE]->ESTABLISHED, Event = CiscoTermConnMonitorTargetInfoEv SEP3CF01126079F
Call [569:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14072)->ACTIVE]->ESTABLISHED, Event = CiscoTermConnMonitoringStartEv SEP28D2443E124A
Call [569:PT_Internal:1/(P1-JTAPI_monitoring) GCID=(1,14072)->ACTIVE]->ESTABLISHED, Event = CiscoTermConnMonitorInitiatorInfoEv SEP28D2443E124A



Now I have the slient monitoring feature working using this solution, but when it comes to whisper coaching, the client can as well hear me 


note that i am testing using IP communicator


and by the way, why does cisco still didn't include this feature natively. I think it is more important than many features they release because i've been asked for it by many clients  


Kind regards,

NOTE : Cisco Whisper Coaching feature does not works on Cisco IP Communicator


In case you are open to 3rd party application you can check out below application for your requirement

MARS Silent Monitor & Whisper Coaching 

Please check out attached document on the application

For more details you can write to