Re: Exception in Transfering a call
Richard Deadman <[email protected]> Tue, 26 Apr 2005 12:37:45 -0400
| Newsgroups | gmane.comp.java.sun.jtapi |
|---|---|
| Message-ID | <[email protected]> |
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] http://www.deadman.ca 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='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 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='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 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".