Re: Exception in Transfering a call
Richard Deadman <[email protected]> Tue, 26 Apr 2005 15:27:41 -0400
| Newsgroups | gmane.comp.java.sun.jtapi |
|---|---|
| Message-ID | <[email protected]> |
You are right. I didn't look at your code correctly. You might want to ask Avaya technical support about this. Richard -- Richard Deadman Deadman Consulting, Inc. Web Services, Policy Management, Java Telephony, Software Architecture mailto:[email protected] http://www.deadman.ca Office: 613-231-5112 Cell: 613-220-2469 On Apr 27, Kenny Wong <[email protected]> wrote: > > Richard, > Shouldn't I create a call with the provider.createCall() first before > doing a consult with "callControlCall.consult(terminalConncection, > remoteNumber)"? > I think the problem is that I can't transfer a call when both call's > terminalConnection is in either HELD state or TALKING state. I think > that one of them will need to be in the TALKING state and the other in > the HELD state. Am i right in that? > > Thank you very much > Kenny > > On 4/27/05, Richard Deadman <[email protected]> wrote: > > Kenny, > > > > I don't know much about the Avaya provider. It might want you to do a > > "callControlCall.consult(terminalConncection, remoteNumber)" to create the consultation > > call, instead of "provider.createCall()". > > > > > > Richard > > > > -- > > Richard Deadman > > Deadman Consulting, Inc. > > Web Services, Policy Management, Java Telephony, Software Architecture > > mailto:[email protected] > > <a href='http://www.deadman.ca'>http://www.deadman.ca</a> > > Office: 613-231-5112 > > Cell: 613-220-2469 > > > > On Apr 26, Kenny Wong <[email protected]> wrote: > > > > > > Richard, > > > Thank you very much. Really appreciate your help. > > > I have implemented this way and even though, the terminalconnection is > > > suppose to be on hold state, i got an error: > > > > > > com.avaya.jtapi.tsapi.TsapiInvalidStateException: terminal connections > > > not in valid states > > > at com.avaya.jtapi.tsapi.rg.a(Unknown Source) > > > at com.avaya.jtapi.tsapi.qe.transfer(Unknown Source) > > > at cti.call_transfer.callChangedEvent(call_transfer.java:456) > > > at com.avaya.jtapi.tsapi.ae.run(Unknown Source) > > > at com.avaya.jtapi.tsapi.pf.run(Unknown Source) > > > > > > > > > snippets of codes: > > > case ConnConnectedEv.ID : > > > System.out.println("Connected"); con = > > > ((ConnEv)eventList[i]).getConnection(); > > > comm_addr = con.getAddress(); > > > comm_addr_name = comm_addr.getName(); > > > > > > if (comm_addr_name.equals(null)){ > > > break; > > > } > > > > > > if ((comm_addr_name.compareTo(f_from)==0)&& (!comm_addr_name.equals(null))) > > > { > > > orig_addr = con.getAddress(); > > > orig_addr_name = orig_addr.getName(); > > > > > > myCall = (CallControlCall) con.getCall(); > > > myCall1 = myCall.getConnections()[0]; > > > mytc = (TerminalConnection[]) myCall1.getTerminalConnections(); > > > mycctc = (CallControlTerminalConnection) mytc[0]; > > > talkingTc = mytc[0]; > > > > > > > > > if (canconsult==true){ > > > try{ > > > call1 = provider.createCall(); > > > canconsult =false; > > > System.out.println("Sending Consult Call"); > > > ((CallControlCall) call1).consult(talkingTc, f_to); > > > > > > > > > }catch(Exception e){ > > > > > > e.printStackTrace(); > > > > > > } > > > } > > > } > > > break; > > > > > > > > > case CallCtlTermConnHeldEv.ID : > > > System.out.println("HELD"); > > > Call call2 = eventList[i].getCall(); > > > Connection holdConn = call2.getConnections()[0]; > > > Connection holdConn1 = call2.getConnections()[1]; > > > String addr = holdConn.getAddress().getName(); > > > String addr1 = holdConn1.getAddress().getName(); > > > > > > > > > if ((addr.equals(f_from))&& (addr1.equals(f_to))) > > > { > > > try > > > { > > > myCall.setTransferEnable(true); > > > myCall.setTransferController(talkingTc); > > > if (provider.getState()== Provider.IN_SERVICE) > > > System.out.println("Pre-Condition Provider State : Provider.IN_SERVICE" ); > > > > > > if (call1.getState()== Call.IDLE) > > > System.out.println("Pre-Condition callNew State : Call.IDLE" ); > > > > > > if (call1.getState()== Call.ACTIVE) > > > System.out.println("Pre-Condition callNew State : Call.ACTIVE" ); > > > > > > if (call1.getState()== Call.INVALID) > > > System.out.println("Pre-Condition callNew State : Call.INVALID" ); > > > > > > if(((CallControlTerminalConnection)talkingTc).getCallControlState() == > > > CallControlTerminalConnection.ACTIVE){ > > > System.out.println("Pre-Condition callNew State : tc.ACTIVE" ); > > > } > > > > > > if(((CallControlTerminalConnection)talkingTc).getCallControlState() == > > > CallControlTerminalConnection.HELD){ > > > System.out.println("Pre-Condition callNew State : tc.HELD" ); > > > } > > > > > > if(((CallControlTerminalConnection)talkingTc).getCallControlState() == > > > CallControlTerminalConnection.TALKING){ > > > System.out.println("Pre-Condition callNew State : tc.TALKING" ); > > > } > > > > > > if(((CallControlTerminalConnection)talkingTc).getCallControlState() == > > > CallControlTerminalConnection.IDLE){ > > > System.out.println("Pre-Condition callNew State : tc.IDLE" ); > > > } > > > > > > myCall.transfer(call1); > > > } > > > > > > catch (Exception e) > > > { > > > System.out.println("transfer error"); > > > e.printStackTrace(); > > > } > > > } > > > break; > > > > > > > > > Sorry, didnt mean to paste all but I thought that it would help to > > > back my question/ > > > > > > Thanks > > > Kenny > > > > > > On 4/26/05, Richard Deadman <[email protected]> wrote: > > > > Kenny, > > > > > > > > See below... > > > > > > > > > > > > Richard > > > > > > > > -- > > > > Richard Deadman > > > > Deadman Consulting, Inc. > > > > Web Services, Policy Management, Java Telephony, Software Architecture > > > > mailto:[email protected] > > > > <a href='<a href='http://www.deadman.ca'><a href='http://www.deadman.ca</a>'>http://www.deadman.ca</a></a>'>http://www.deadman.ca'><a href='http://www.deadman.ca</a>'>http://www.deadman.ca</a></a></a> > > > > Office: 613-231-5112 > > > > Cell: 613-220-2469 > > > > > > > > On Apr 26, Kenny Wong <[email protected]> wrote: > > > > > > > > > > Richard, > > > > > Thank you for advising me on this matter. I implemented it this way: > > > > > > > > > > if (tc.getState()== CallControlTerminalConnection.ACTIVE) > > > > > System.out.println("Pre-Condition callNew State : > > tc.ACTIVE" ); > > > > > if (tc.getState()== CallControlTerminalConnection.HELD) > > > > > System.out.println("Pre-Condition callNew State : > > tc.HELD" ); > > > > > > > > Yes, you should be doing: > > > > > > > > int ccState = ((CallControlTerminalConnection)tc).getCallControlState(); > > > > switch (ccState) { > > > > case CallControlTerminalConnection.ACTIVE: > > > > System.out.println("Pre-Condition callNew State : ACTIVE"); > > > > break; > > > > case CallControlTerminalConnection.ACTIVE: > > > > System.out.println("Pre-Condition callNew State : ACTIVE"); > > > > break; > > > > default: > > > > break; > > > > } > > > > > > > > > > > > > > where tc is a TerminalController. > > > > > > > > > > I will change it to check on the CallControlTerminalConnection's > > > > > state. Sorry but I have another question to inquire about the transfer > > > > > process. > > > > > > > > > > - I have actually managed to implement a transfer process using only > > > > > 1 transfer controller. According to the API, it is stated that we need > > > > > 2 transfer controller. could you advise me on what the second will be > > > > > and why is there a need for it? > > > > > > > > > > - the transfer process that i have implemented is a blind transfer, > > > > > that is to say, once i have recieved a phone call and upon hold, the > > > > > hold event will fire off and make a call to the transfer destination > > > > > and transfer the call. > > > > > what i really need to implement is a controlled transfer whereby the > > > > > reciever of a incoming call can talk to the transfer destination party > > > > > before commiting the transfer. > > > > > > > > You want to do a controlled transfer: > > > > - set terminal connection on hold > > > > - make a new call (call2) on the terminal connection to the destination > > > > - ensure they want to accept the transfer > > > > - call1.setTransferEnable(true) > > > > - call1.setTransferController(terminal connection) > > > > - call1.transfer(call2) > > > > > > > > > > > > > > Really hope that you can help me on that. > > > > > > > > > > Thanks > > > > > Kenny > > > > > > > > > > On 4/26/05, Richard Deadman <[email protected]> wrote: > > > > > > Are you calling CallControlTerminalConnection.getCallControlState() or > > > > > > TerminalConnection.getState()? The former should return HELD, if the provider > > suceeded in > > > > > > holding the terminal connection, whereas the latter will return ACTIVE, since HELD > > is not > > > > > > an option. > > > > > > > > > > > > JTAPI defines CallControlTerminalConnection as a subinterface of > > TerminalConnection and > > > > > > provides a different method for finding out the CallControl state. Applications > > that are > > > > > > just accessing the object as a TerminalConnection and call "getState()" are > > expecting, and > > > > > > should get, one of IDLE, RINGING, ACTIVE, PASSIVE, DROPPED, or UNKNOWN. According > > to the > > > > > > JTAPI specification, CallControlTerminalConnection.HELD is mapped to > > > > > > TerminalConnection.ACTIVE. > > > > > > > > > > > > Richard > > > > > > > > > > > > -- > > > > > > Richard Deadman > > > > > > Deadman Consulting, Inc. > > > > > > Web Services, Policy Management, Java Telephony, Software Architecture > > > > > > mailto:[email protected] > > > > > > <a href='<a href='<a href='http://www.deadman.ca&#39;&gt;<a'>http://www.deadman.ca'><a</a> > > href='<a href='http://www.deadman.ca&lt;/a&gt;'><a href='http://www.deadman.ca</a></a>'><a href='http://www.deadman.ca'><a'>http://www.deadman.ca'><a</a>'>http://www.deadman.ca</a></a>'><a href='http://www.deadman.ca'><a'>http://www.deadman.ca'><a</a></a>'>http://www.deadman.ca</a>'><a href='http://www.deadman.ca</a></a>'><a href='http://www.deadman.ca'><a'>http://www.deadman.ca'><a</a>'>http://www.deadman.ca</a></a>'><a href='http://www.deadman.ca'><a'>http://www.deadman.ca'><a</a></a></a> > > href='<a href='http://www.deadman.ca&lt;/a&gt;'><a href='http://www.deadman.ca</a></a></a>'>http://www.deadman.ca</a></a></a></a>'>http://www.deadman.ca</a>'><a href='http://www.deadman.ca</a></a></a>'>http://www.deadman.ca</a></a></a></a></a> > > > > > > Office: 613-231-5112 > > > > > > Cell: 613-220-2469 > > > > > > > > > > > > On Apr 25, Kenny Wong <[email protected]> wrote: > > > > > > > > > > > > > > Richard, > > > > > > > Can i know how do i set my TerminalConnection state to be on hold? I have > > > > > > > tried using the ((CallCtlTerminalConnection)tc).hold() but the tc state is > > > > > > > still ACTIVE.. Thanks a lot > > > > > > > > > > > > > > =========================================================================== > > > > > > > To unsubscribe, send email to [email protected] and include in the body > > > > > > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > > > > > > [email protected] and include in the body of the message "help". > > > > > > > > > > > > > > > > > > > =========================================================================== > > > > > > To unsubscribe, send email to [email protected] and include in the body > > > > > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > > > > > [email protected] and include in the body of the message "help". > > > > > > > > > > > > > > > > =========================================================================== > > > > > To unsubscribe, send email to [email protected] and include in the body > > > > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > > > > [email protected] and include in the body of the message "help". > > > > > > > > > > > > > > > > > > =========================================================================== > > > > To unsubscribe, send email to [email protected] and include in the body > > > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > > > [email protected] and include in the body of the message "help". > > > > > > > > > > =========================================================================== > > > To unsubscribe, send email to [email protected] and include in the body > > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > > [email protected] and include in the body of the message "help". > > > > > > > > > > =========================================================================== > > To unsubscribe, send email to [email protected] and include in the body > > of the message "signoff JTAPI-INTEREST". For general help, send email to > > [email protected] and include in the body of the message "help". > > > > =========================================================================== > To unsubscribe, send email to [email protected] and include in the body > of the message "signoff JTAPI-INTEREST". For general help, send email to > [email protected] and include in the body of the message "help". > > =========================================================================== To unsubscribe, send email to [email protected] and include in the body of the message "signoff JTAPI-INTEREST". For general help, send email to [email protected] and include in the body of the message "help".