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&#39;&gt;<a
href='http://www.deadman.ca&lt;/a&gt;'>http://www.deadman.ca</a></a>'>http://www.deadman.ca'><a
href='http://www.deadman.ca&lt;/a&gt;'>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&amp;#39;&amp;gt;&lt;a'>http://www.deadman.ca&#39;&gt;<a</a>
> > href='<a href='http://www.deadman.ca&amp;lt;/a&amp;gt;&#39;&gt;<a
href='http://www.deadman.ca&lt;/a&gt;&lt;/a&gt;&#39;&gt;<a
href='http://www.deadman.ca&#39;&gt;&lt;a'>http://www.deadman.ca'><a</a>'>http://www.deadman.ca</a></a>'><a
href='http://www.deadman.ca&#39;&gt;&lt;a'>http://www.deadman.ca'><a</a></a>'>http://www.deadman.ca&lt;/a&gt;'><a
href='http://www.deadman.ca&lt;/a&gt;&lt;/a&gt;&#39;&gt;<a
href='http://www.deadman.ca&#39;&gt;&lt;a'>http://www.deadman.ca'><a</a>'>http://www.deadman.ca</a></a>'><a
href='http://www.deadman.ca&#39;&gt;&lt;a'>http://www.deadman.ca'><a</a></a></a>
> > href='<a href='http://www.deadman.ca&amp;lt;/a&amp;gt;&#39;&gt;<a
href='http://www.deadman.ca&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;'>http://www.deadman.ca</a></a></a></a>'>http://www.deadman.ca&lt;/a&gt;'><a
href='http://www.deadman.ca&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;'>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".