<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Cisco JTAPI Questions</title>
  <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_category?p_l_id=&amp;mbCategoryId=1053359" />
  <subtitle />
  <id>http://developer.cisco.com/c/message_boards/find_category?p_l_id=&amp;mbCategoryId=1053359</id>
  <updated>2013-05-25T05:31:30Z</updated>
  <dc:date>2013-05-25T05:31:30Z</dc:date>
  <entry>
    <title>RE: Getting at  pre-existant connections when terminal/address is instantia</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15521137" />
    <author>
      <name>David Requena</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15521137</id>
    <updated>2013-05-23T09:53:18Z</updated>
    <published>2013-05-23T09:53:18Z</published>
    <summary type="html">Many thanks, that explains a lot: why my call count don't get messed up whe latter I add a CallObserver.
In this case this is part of a lazy initialization triggered by a call setup method which I don't want to proceed if there is any active call on the terminal, I resorted to createSnapshot() and its associated CiscoTermSnapshotEv and CiscoTermSnapshotCompletedEv events. This way I don't need to play the guess how long to wait game :-)

Thaks again</summary>
    <dc:creator>David Requena</dc:creator>
    <dc:date>2013-05-23T09:53:18Z</dc:date>
  </entry>
  <entry>
    <title>RE: Getting at  pre-existant connections when terminal/address is instantia</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15466143" />
    <author>
      <name>David Staudt</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15466143</id>
    <updated>2013-05-21T20:46:30Z</updated>
    <published>2013-05-21T20:46:30Z</published>
    <summary type="html">Only upon adding an Observer does the JTAPI library actually 'open' the device with UCM/CTI-Manager, and at that point receives a series of 'snapshot' events that catch-up/summarize the implementation with the current state of the calls on the device.  So without adding an Observer, JTAPI will not know about any existing calls.  In addition, immediately after adding the Observer it may take some finite amount of time for all of the available snapshot events to arrive and the device state to reach concurrency.  About the best you can do is add observer, and then wait for some general amount of time (perhaps 100 to 500 ms) to let any outstanding snapshot events arrive, then check getTerminalConnections()</summary>
    <dc:creator>David Staudt</dc:creator>
    <dc:date>2013-05-21T20:46:30Z</dc:date>
  </entry>
  <entry>
    <title>Getting at  pre-existant connections when terminal/address is instantiated</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15463250" />
    <author>
      <name>David Requena</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15463250</id>
    <updated>2013-05-21T20:01:59Z</updated>
    <published>2013-05-21T20:01:59Z</published>
    <summary type="html">I need to track terminalConnections present at a given terminal. While that is easy enough using observers, I've been unable to get at TerminalConnections already stablished when a terminal or Address object is instantiated as respective getTerminalConnections() both return null.

How would I go about getting at those? I don't really need to accces the actual objects, just a count would be enough.
Terminal is being instantiated in super provider fashion (provider.createTerminal()) if that makes any difference.

Thanks in advance.</summary>
    <dc:creator>David Requena</dc:creator>
    <dc:date>2013-05-21T20:01:59Z</dc:date>
  </entry>
  <entry>
    <title>RE: How to properly shutdown Provider?</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15463092" />
    <author>
      <name>David Requena</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15463092</id>
    <updated>2013-05-21T19:54:12Z</updated>
    <published>2013-05-21T19:54:12Z</published>
    <summary type="html">Many thanks for your insights. Although not optimum a solution the jtapi.ini parameter does somewhat solve the issue.</summary>
    <dc:creator>David Requena</dc:creator>
    <dc:date>2013-05-21T19:54:12Z</dc:date>
  </entry>
  <entry>
    <title>RE: call transfer on CTI RP</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15387608" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15387608</id>
    <updated>2013-05-18T19:46:32Z</updated>
    <published>2013-05-18T19:46:32Z</published>
    <summary type="html">I dont see any obvious reason why the transfer would fail, you may want to open a support case with logs.
Also, if reason for doing transfer is only to have caller appear as RP then you could look at selectRoute API which allows to modify callingParty.</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-18T19:46:32Z</dc:date>
  </entry>
  <entry>
    <title>RE: call transfer on CTI RP</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15386404" />
    <author>
      <name>George Goglidze Berdzenishvili</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15386404</id>
    <updated>2013-05-18T10:20:32Z</updated>
    <published>2013-05-18T10:20:32Z</published>
    <summary type="html">[quote=Abhishek Malhotra]Are you setting RTP parameters for RP after the call gets connected? If not, the call might go down by the time transfer is done and might result in InvalidStateException.  [/quote]
 
I'm putting the call on hold as soon I answer it. I did not think I had to set the RTP parameters for RP after the call gets connected.
And the call does not get disconnected. On the calling phone you can see that it's on hold - and MOH is streaming too successfully. 
 
but I tried to do the following now: 
        case    CiscoMediaOpenLogicalChannelEv.ID:
            
            CiscoMediaOpenLogicalChannelEv ev = (CiscoMediaOpenLogicalChannelEv)event;
            
            if (ev.isRTPRequired()) {
                
                InetAddress ip = null;
                try {
                    ip = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    logger.error(e.getMessage());
                }
                CiscoRTPParams         rtpParams = new CiscoRTPParams(ip, 16333);
                
                CiscoRouteTerminal    tc = (CiscoRouteTerminal) ev.getTerminal();
                
                try {
                    tc.setRTPParams(ev.getCiscoRTPHandle(), rtpParams);
                } catch (InvalidStateException e) {
                    logger.error(e.getMessage());
                } catch (InvalidArgumentException e) {
                    logger.error(e.getMessage());
                } catch (PrivilegeViolationException e) {
                    logger.error(e.getMessage());
                }
                
            }
            break;
 
 
but I still get the same problem. pre-conditions failure! 

Any further ideas on this? 
 
I have my reasons not to use redirect! I need the call to be originated from the RP. if I do Redirect the caller's ID is still the original caller (Phone A) and not RP.
Thanks,</summary>
    <dc:creator>George Goglidze Berdzenishvili</dc:creator>
    <dc:date>2013-05-18T10:20:32Z</dc:date>
  </entry>
  <entry>
    <title>RE: redirect from RP to Phone with CFA to the same RP</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15386384" />
    <author>
      <name>George Goglidze Berdzenishvili</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15386384</id>
    <updated>2013-05-18T10:09:36Z</updated>
    <published>2013-05-18T10:09:36Z</published>
    <summary type="html">Hi guys,

Many thanks for your replies!!! I greatly appreciate it.

Indeed David, this solution does work as I have tried it already, but as you mentioned yourself the user experience is not good. 
As this is Manager/Assistant application. I cannot have a manager's phone ring even once.
 
I have thought of the following solution:
In CUCM I enable the service parameter: CFA Destination Override

And I still leave the CFA on the manager's phone.
then I try to do the following:
instead of using a Redirect() method (with this method the original caller's ID is maintained, and the CFA destinatino override feature does not kick-in).
I want to use blind transfer -&gt; where the call would actually be made from CTI RP so the CFA destination override function kicks in and let the manager's phone accpt the call.
 
But I could not get the blid transfer work. it tells me the following:
com.cisco.jtapi.InvalidStateExceptionImpl: Did not meet pre-conditions.
 
I have posted another Question on this forum for the transfer problem. so I will not continue listing how I'm doing it exactly on this question. 
I guess this question can be closed, and I would really appreciate if you coud answer here: 
http://developer.cisco.com/web/jtapi/community/-/message_boards/message/15294084
 
Many thanks guys,</summary>
    <dc:creator>George Goglidze Berdzenishvili</dc:creator>
    <dc:date>2013-05-18T10:09:36Z</dc:date>
  </entry>
  <entry>
    <title>RE: redirect from RP to Phone with CFA to the same RP</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15371822" />
    <author>
      <name>David Staudt</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15371822</id>
    <updated>2013-05-17T17:02:46Z</updated>
    <published>2013-05-17T17:02:46Z</published>
    <summary type="html">Abhishek's idea gets pretty close, but I think there may be a race condition if you try and monitor the phone and then try and kick calls off the phone as they arrive, in that the phone will immediately auto-accept any incoming call and potentially start ringing.  So user experience might be a quick partial ring or display flash before the app can brush the call off.

The core challenge is that in fact the use-case as described is not CFA, which is unconditional - what you seem to be asking for is conditional forwarding, i.e. managed by application business logic.  So you want the user not to invoke UCM managed CFA, but rather a service of your app that is a 'replacement' for CFA. 
For this concept to work, all calls to the device (or at least calls which should receive this treatment - based on UCM dial plan) need to first be sent to an app CTI-RP.  Your app then decides whether the call should actually be Redirect()'ed onward to the phone, or Redirect()'ed to the forwarded destination.</summary>
    <dc:creator>David Staudt</dc:creator>
    <dc:date>2013-05-17T17:02:46Z</dc:date>
  </entry>
  <entry>
    <title>RE: Remote destination profiles</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15358012" />
    <author>
      <name>Christian Ejlertsen</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15358012</id>
    <updated>2013-05-17T08:25:15Z</updated>
    <published>2013-05-17T08:25:15Z</published>
    <summary type="html">Nothing to do with Extension mobility.
It's mobility, cisco's implementation og single numebr reach. So what i write is what i want : )
However there seems to  no event thrown at all when a call from a remote destination is returned to the phone. So apart from looping command and wait for the success then as of now there is no answer in jtapi.</summary>
    <dc:creator>Christian Ejlertsen</dc:creator>
    <dc:date>2013-05-17T08:25:15Z</dc:date>
  </entry>
  <entry>
    <title>RE: Is JTAPI 9 compatibile with older PBXs?</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351609" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351609</id>
    <updated>2013-05-17T01:31:13Z</updated>
    <published>2013-05-17T01:31:13Z</published>
    <summary type="html">CUCM upgrades are backward compatible with JTAPI applications(in allowed upgrade paths) but not forward compatible.
So, with older JTAPI version you can connect to newer CUCM, but with Newer JTAPI cannot connect to older CUCM</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:31:13Z</dc:date>
  </entry>
  <entry>
    <title>RE: Remote destination profiles</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351497" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351497</id>
    <updated>2013-05-17T01:24:34Z</updated>
    <published>2013-05-17T01:24:34Z</published>
    <summary type="html">What do you mean by remote destination profiles? Are you using EM cross cluster?
Can you explain a bit more on what you really want to achieve?
 </summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:24:34Z</dc:date>
  </entry>
  <entry>
    <title>RE: redirect from RP to Phone with CFA to the same RP</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351456" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351456</id>
    <updated>2013-05-17T01:21:32Z</updated>
    <published>2013-05-17T01:21:32Z</published>
    <summary type="html">If CFA is set, all calls would be forwarded. So, you cant send a call back as that would also get forwarded.
Instead of redirecting back to phone, is it possible that you forward the calls from Phone conditionally to RP.
So, basically your JTAPI application controls the phone and on getting OfferedEv you apply your business logic to determine whether call needs to stay on phone or whether it needs to be routed to RP. If it neeeds to be routed then you can invoke Redirect() API to send the call to RP.
 </summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:21:32Z</dc:date>
  </entry>
  <entry>
    <title>RE: How do you get original calling number from getCallingAddress?</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351424" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351424</id>
    <updated>2013-05-17T01:15:13Z</updated>
    <published>2013-05-17T01:15:13Z</published>
    <summary type="html">Do you know how the calls are being routed to the representatives?
Is it through your inhouse application or some other contact centre solution(UCCE/UCCX ?)
If it is your own application, you could specify calling address as part of selectRoute request while routing it to representative</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:15:13Z</dc:date>
  </entry>
  <entry>
    <title>RE: CiscoRTPInputStartedEv.getRTPInputProperties() problem</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351384" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351384</id>
    <updated>2013-05-17T01:07:05Z</updated>
    <published>2013-05-17T01:07:05Z</published>
    <summary type="html">RTPInputProperties are going to give you the IP Address and Port of the near end(ie. your CiscoMediaTerminal) while RTPOutputProperties are going to give you RTP Details for the far end. 
Can you explain on what information are you really looking for when you say, how to get right streams for the call?
 </summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:07:05Z</dc:date>
  </entry>
  <entry>
    <title>RE: Hosting a make call application as a web service</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351353" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351353</id>
    <updated>2013-05-17T01:01:49Z</updated>
    <published>2013-05-17T01:01:49Z</published>
    <summary type="html">[quote=Manas Varma]Hi All,
  We have successfully created standalone applications for making call, conferences and playbacks.Howeverm we need to host the application as a service to provide to our client. The issue with this is that once the session is established after the first request, the actually function of making call throws a null pointer exception, as its a stateless service.Has any one hosted these functions as web service.Would be great if you can light this up please!
Thanks,
Manas Varma
 [/quote]
How are you initializing JTAPI provider?
If i were to do this, I would create a ServletContextListener and initiate JTAPI provider with contextInitialized and shutdown the JTAPI Provider when contextDestroyed. And then I would reuse the same JTAPI Provider with all my requests.
So, client side would send a web request, and my servlets would use the JTAPI Provider on the server side
 </summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T01:01:49Z</dc:date>
  </entry>
  <entry>
    <title>RE: Not seeing CallCtlConnDisconnected in certain scenarios</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351309" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351309</id>
    <updated>2013-05-17T00:55:39Z</updated>
    <published>2013-05-17T00:55:39Z</published>
    <summary type="html">You should be getting disconnected event for both the parties when either of them disconnects. Can you attach JTAPI log for the above said scenario</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T00:55:39Z</dc:date>
  </entry>
  <entry>
    <title>RE: GetAddress without Extension Mobility</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351301" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351301</id>
    <updated>2013-05-17T00:51:49Z</updated>
    <published>2013-05-17T00:51:49Z</published>
    <summary type="html">The callobserver would work on addresses which are in JTAPI's provider's domain (ie. the address should be in JTAPI application users control list)
So, if you logout and device extension(address) changes then this new address(changed) would not work with call observer unless you have it in user's control list.
If this is not really your problem, can you ellaborate a bit more on what exactly you are doing and at what point you see the above said exception.</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T00:51:49Z</dc:date>
  </entry>
  <entry>
    <title>RE: CiscoTerminal.sendData() times out from desktop application</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351293" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351293</id>
    <updated>2013-05-17T00:48:43Z</updated>
    <published>2013-05-17T00:48:43Z</published>
    <summary type="html">Are you invoking multiple SendData API one after the other? If so, try giving some delay.
There are other threads in the forum covering more details on this issue. You can also find these details in CAVEAT section in dev guide.</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T00:48:43Z</dc:date>
  </entry>
  <entry>
    <title>RE: Looking for documentation (updateMonitorType etc)</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351252" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351252</id>
    <updated>2013-05-17T00:46:38Z</updated>
    <published>2013-05-17T00:42:06Z</published>
    <summary type="html">These were implemented in release 8.5. (You can refer to 8.5 Dev Guide) Please refer to Agent Greeting feature for "addMediaStream" API.
For "updateMonitorType", details are covered in "Whisper Coaching" feature section but I am not sure from which release this was supported, so I will let someone else comment on this. </summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T00:42:06Z</dc:date>
  </entry>
  <entry>
    <title>RE: NO SOUND</title>
    <link rel="alternate" href="http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351069" />
    <author>
      <name>Abhishek Malhotra</name>
    </author>
    <id>http://developer.cisco.com/c/message_boards/find_message?p_l_id=&amp;messageId=15351069</id>
    <updated>2013-05-17T00:35:22Z</updated>
    <published>2013-05-17T00:35:22Z</published>
    <summary type="html">While handling CiscoRTPOutputStartedEv, why are you invoking run() method of your RTP sender thread directly instead of calling thread's start() method?
This is going to block the JTAPI event thread itself as it will process your play file logic on on the current thread(JTAPI's Event thread) itself.
Also, look at packet traces on whether your RTP sender is sending RTP packets from your host machine, and see if the firewall is allowing RTP stream(s)</summary>
    <dc:creator>Abhishek Malhotra</dc:creator>
    <dc:date>2013-05-17T00:35:22Z</dc:date>
  </entry>
</feed>

