Re: [Asterisk-java-users] How to get ORIGINATE_STATUS value after OriginateAction
Brought to you by:
srt
From: Yves A. <yv...@gm...> - 2013-03-06 14:56:30
|
maybe we talk about different things, but if i run my given code, i can see status updates via callbackhandler... I agree, that there is obviously no way to _immediately_ get the channelID via asynchronous dial, but thats no problem, because you can pass your own references to the callbackhandler constructor. In my example it is a simple string, but you could pass any other object there.. if your listening to ami events only, you could match the value of the channel (event.getChannel) against the "number" you dialed and can track any state of your call this way.... (but i admit... there are nuts and bolts... redirecting calls, ringgroups, followme, local channels, queues and so on can make track a call quite hard...) the following example uses callbackhandler plus eventlisteners to get all information in realtime: package tests; import org.asteriskjava.live.AsteriskChannel; import org.asteriskjava.live.AsteriskQueueEntry; import org.asteriskjava.live.AsteriskServerListener; import org.asteriskjava.live.DefaultAsteriskServer; import org.asteriskjava.live.MeetMeUser; import org.asteriskjava.live.internal.AsteriskAgentImpl; import org.asteriskjava.manager.ManagerConnection; import org.asteriskjava.manager.ManagerEventListener; import org.asteriskjava.manager.action.OriginateAction; import org.asteriskjava.manager.event.BridgeEvent; import org.asteriskjava.manager.event.ChannelUpdateEvent; import org.asteriskjava.manager.event.DialEvent; import org.asteriskjava.manager.event.HangupEvent; import org.asteriskjava.manager.event.LinkEvent; import org.asteriskjava.manager.event.ManagerEvent; import org.asteriskjava.manager.event.NewAccountCodeEvent; import org.asteriskjava.manager.event.NewCallerIdEvent; import org.asteriskjava.manager.event.NewChannelEvent; import org.asteriskjava.manager.event.NewStateEvent; import org.asteriskjava.manager.event.OriginateFailureEvent; import org.asteriskjava.manager.event.OriginateResponseEvent; import org.asteriskjava.manager.event.OriginateSuccessEvent; import org.asteriskjava.manager.event.UnlinkEvent; public class CallTestWithCallbackHandler implements AsteriskServerListener, ManagerEventListener{ private static ManagerConnection managerConnection; public CallTestWithCallbackHandler() throws Exception{ DefaultAsteriskServer asteriskServer = new DefaultAsteriskServer("SERVER", "USERNAME", "PASSWORD"); asteriskServer.getManagerConnection().login(); asteriskServer.addAsteriskServerListener(this); asteriskServer.getManagerConnection().addEventListener(this); try { OriginateAction originateAction = new OriginateAction(); originateAction.setChannel("DAHDI/g0/SOURCENUMBERHERE"); originateAction.setContext("from-sip"); originateAction.setExten("DESTINATIONNUMBERHERE"); originateAction.setPriority(1); originateAction.setTimeout(15000l); asteriskServer.originateAsync(originateAction, new myCallbackHandler("TESTCALL")); System.out.println("now idling for a minute to get a chance to receive events and states..."); try { Thread.sleep(60000); } catch (Exception e) { System.out.println(e.getMessage()); } } catch (Exception e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception{ CallTestWithCallbackHandler aCall = new CallTestWithCallbackHandler(); } @Override public void onNewAsteriskChannel(AsteriskChannel channel) { System.out.println("new Channel created... data is: "+channel); } @Override public void onNewMeetMeUser(MeetMeUser user) { } @Override public void onNewAgent(AsteriskAgentImpl agent) { } @Override public void onNewQueueEntry(AsteriskQueueEntry entry) { } @Override public void onManagerEvent(ManagerEvent event) { // only print out relevant events here.. if (event instanceof NewChannelEvent || event instanceof ChannelUpdateEvent || event instanceof OriginateResponseEvent || event instanceof OriginateFailureEvent || event instanceof OriginateSuccessEvent || event instanceof NewCallerIdEvent || event instanceof NewStateEvent || event instanceof LinkEvent || event instanceof UnlinkEvent || event instanceof BridgeEvent || event instanceof DialEvent || event instanceof HangupEvent) System.out.println("got Event: "+event); } } an execution prints out, what happens in detail during a call setup, the call itself and the hangup.. output of callbackhandler is blue, managerevents are red, serverevents are violet and important details are _*black,bold and underlined*_... with this trace you can see very well, what happens at which time... myCallbackHandler for reference TESTCALL just instantiated. now idling for a minute to get a chance to receive events and states... got Event: org.asteriskjava.manager.event._*NewChannelEvent*_[dateReceived='Wed Mar 06 15:30:02 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='_*Rsrvd*_',channelstate='1',calleridname=null,timestamp=null,uniqueid='_*1362580137.4260*_',context='from-pstn',exten=null,accountcode=null,server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',channelstatedesc='Rsrvd',systemHashcode=1564136253] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:02 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='Dialing',channelstate='3',calleridname=null,timestamp=null,uniqueid='1362580137.4260',server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',channelstatedesc='Dialing',systemHashcode=959993440] myCallbackHandler for reference TESTCALL receives state: Dialling, channelID is: *_1362580137.4260_*, State is: RSRVD new Channel created... data is: AsteriskChannel[id='_*1362580137.4260*_',name='DAHDI/i1/SOURCENUMBERHERE-24d',callerId='',state='RSRVD',account='null',dateOfCreation=Wed Mar 06 15:30:02 CET 2013,dialedChannel=null,dialingChannel=null,linkedChannel=null] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:05 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='*_Ringing_*',channelstate='5',calleridname=null,timestamp=null,uniqueid='_*1362580137.4260*_',server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',channelstatedesc='Ringing',systemHashcode=591210723] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:07 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='_*Up*_',channelstate='6',calleridname=null,timestamp=null,uniqueid='1362580137.4260',server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',channelstatedesc='Up',systemHashcode=1084010740] got Event: org.asteriskjava.manager.event._*OriginateResponseEvent*_[dateReceived='Wed Mar 06 15:30:07 CET 2013',privilege='call,all',sequencenumber=null,reason='4',response='_*Success*_',calleridname=null,timestamp=null,uniqueid='_*1362580137.4260*_',actionid='AJ_ORIGINATE_0',internalactionid='569616903_9',context='from-sip',exten='DESTINATIONNUMBERHERE',server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',systemHashcode=1864729679] myCallbackHandler for reference TESTCALL receives state: Success, channelID is: _*1362580137.4260*_, State is: _*UP*_ got Event: org.asteriskjava.manager.event._*NewChannelEvent*_[dateReceived='Wed Mar 06 15:30:07 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='_*Rsrvd*_',channelstate='1',calleridname=null,timestamp=null,uniqueid='_*1362580141.4261*_',context='from-pstn',exten=null,accountcode=null,server=null,calleridnum=null,channel='DAHDI/i1/DESTINATIONNUMBERHERE-24e',channelstatedesc='Rsrvd',systemHashcode=198249052] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:07 CET 2013',privilege='call,all',callerid='DESTINATIONNUMBERHERE',sequencenumber=null,state='_*Dialing*_',channelstate='3',calleridname=null,timestamp=null,uniqueid='_*1362580141.4261*_',server=null,calleridnum='DESTINATIONNUMBERHERE',channel='DAHDI/i1/DESTINATIONNUMBERHERE-24e',channelstatedesc='Dialing',systemHashcode=1832874625] got Event: org.asteriskjava.manager.event._*DialEvent*_[dateReceived='Wed Mar 06 15:30:07 CET 2013',privilege='call,all',subevent='Begin',callerid=null,dialstatus=null,sequencenumber=null,_*destuniqueid='1362580141.4261',srcuniqueid='1362580137.4260'*_,destination='DAHDI/i1/DESTINATIONNUMBERHERE-24e',dialstring='g0/DESTINATIONNUMBERHERE',timestamp=null,calleridname=null,uniqueid='1362580137.4260',server=null,src='DAHDI/i1/SOURCENUMBERHERE-24d',calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',systemHashcode=1000613778] new Channel created... data is: AsteriskChannel[_*id='1362580141.4261'*_,name='DAHDI/i1/DESTINATIONNUMBERHERE-24e',callerId='',state='_*RSRVD*_',account='null',dateOfCreation=Wed Mar 06 15:30:07 CET 2013,dialedChannel=null,dialingChannel=null,linkedChannel=null] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:12 CET 2013',privilege='call,all',callerid='DESTINATIONNUMBERHERE',sequencenumber=null,state='_*Ringing*_',channelstate='5',calleridname=null,timestamp=null,uniqueid='_*1362580141.4261*_',server=null,calleridnum='DESTINATIONNUMBERHERE',channel='DAHDI/i1/DESTINATIONNUMBERHERE-24e',channelstatedesc='Ringing',systemHashcode=158635208] got Event: org.asteriskjava.manager.event._*NewStateEvent*_[dateReceived='Wed Mar 06 15:30:14 CET 2013',privilege='call,all',callerid=null,sequencenumber=null,state='_*Up*_',channelstate='6',calleridname=null,timestamp=null,uniqueid='*_1362580141.4261_*',server=null,calleridnum=null,channel='DAHDI/i1/DESTINATIONNUMBERHERE-24e',channelstatedesc='Up',systemHashcode=1232704349] got Event: org.asteriskjava.manager.event._*BridgeEvent*_[dateReceived='Wed Mar 06 15:30:14 CET 2013',privilege='call,all',_*uniqueid1='1362580137.4260',uniqueid2='1362580141.4261'*_,sequencenumber=null,bridgestate='_*Link*_',bridgetype='core',timestamp=null,channel1='DAHDI/i1/SOURCENUMBERHERE-24d',channel2='DAHDI/i1/DESTINATIONNUMBERHERE-24e',callerid1=null,server=null,callerid2=null,systemHashcode=45104096] got Event: org.asteriskjava.manager.event._*BridgeEvent*_[dateReceived='Wed Mar 06 15:30:17 CET 2013',privilege='call,all',_*uniqueid1='1362580137.4260',uniqueid2='1362580141.4261'*_,sequencenumber=null,bridgestate='_*Unlink*_',bridgetype='core',timestamp=null,channel1='DAHDI/i1/SOURCENUMBERHERE-24d',channel2='DAHDI/i1/DESTINATIONNUMBERHERE-24e',callerid1=null,server=null,callerid2=null,systemHashcode=277466206] got Event: org.asteriskjava.manager.event._*HangupEvent*_[dateReceived='Wed Mar 06 15:30:17 CET 2013',privilege='call,all',causetxt='Normal Clearing',callerid=null,cause='16',sequencenumber=null,calleridname=null,timestamp=null,uniqueid='_*1362580141.4261*_',server=null,calleridnum=null,channel='DAHDI/i1/DESTINATIONNUMBERHERE-24e',systemHashcode=2110683211] got Event: org.asteriskjava.manager.event._*DialEvent*_[dateReceived='Wed Mar 06 15:30:17 CET 2013',privilege='call,all',subevent='End',callerid=null,dialstatus='*_ANSWER_*',sequencenumber=null,destuniqueid=null,srcuniqueid='*_1362580137.4260_*',destination=null,dialstring=null,timestamp=null,calleridname=null,uniqueid='1362580137.4260',server=null,src='DAHDI/i1/SOURCENUMBERHERE-24d',calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',systemHashcode=1501740254] got Event: org.asteriskjava.manager.event._*HangupEvent*_[dateReceived='Wed Mar 06 15:30:17 CET 2013',privilege='call,all',causetxt='Normal Clearing',callerid=null,cause='16',sequencenumber=null,calleridname=null,timestamp=null,uniqueid='_*1362580137.4260*_',server=null,calleridnum=null,channel='DAHDI/i1/SOURCENUMBERHERE-24d',systemHashcode=373145787] regards, yves Am 06.03.2013 13:23, schrieb Mordechay Kaganer: > B.H. > > Hi > > There is indeed some problem with OriginateAction events - but it > seems to be asterisk's problem. When i send OriginateAction (in async > mode, but this doesn't really matter AFAIK), asterisk immediately > create a channel and starts to ring while it do generate all related > AMI events like NewChannelEvent, NewStateEvent on that channel, but > until the call is established or failed the AMI listener is unable to > link between the OriginateAction and the new channel. > Only OriginateResponseEvent will contain both OriginateAction's id and > the newly created channel. This means that there's no way to get > status updates on ongoing originate action like see if the channel is > ringing or dialing or whatever, even that the same app "sees" the new > channel and it's status updates. > > At least, that's what i have learned from my experience. Maybe > somebody knows how to workaround this? > > > On Wed, Mar 6, 2013 at 1:38 PM, Yves A. <yv...@gm... > <mailto:yv...@gm...>> wrote: > > hi, > > pls. see attached source... > > > package tests; > > > import org.asteriskjava.live.AsteriskChannel; > import org.asteriskjava.live.DefaultAsteriskServer; > import org.asteriskjava.live.LiveException; > import org.asteriskjava.live.OriginateCallback; > import org.asteriskjava.manager.ManagerConnection; > import org.asteriskjava.manager.action.OriginateAction; > > > public class CallTestWithCallbackHandler { > > private static ManagerConnection managerConnection; > > public static void main(String[] args) throws Exception{ > > DefaultAsteriskServer asteriskServer = new > DefaultAsteriskServer("SERVER", "USER", "PASSWORD"); > asteriskServer.getManagerConnection().login(); > > > try { > OriginateAction originateAction = new > OriginateAction(); > originateAction.setChannel("SIP/177");//first leg > originateAction.setContext("from-internal"); > originateAction.setExten("08154711"); //second leg > originateAction.setPriority(1); > originateAction.setTimeout(15000); > asteriskServer.originateAsync(originateAction, new > myCallbackHandler("177")); > System.out.println("now idling for a minute to get > a chance to receive events and states..."); > try { > Thread.sleep(60000); > } > catch (Exception e) { > System.out.println(e.getMessage()); > } > } > catch (Exception e) { > System.out.println(e.getMessage()); > } > } > } > > > > package tests; > > import org.asteriskjava.live.AsteriskChannel; > import org.asteriskjava.live.LiveException; > import org.asteriskjava.live.OriginateCallback; > > public class myCallbackHandler implements OriginateCallback{ > > > public String reference; > > public myCallbackHandler(String reference){ > System.out.println("myCallbackHandler for reference > "+reference+" just instantiated."); > this.reference = reference; > } > > public void onDialing(AsteriskChannel ac) > { > System.out.println("myCallbackHandler for reference > "+reference+" receives state: Dialling, channelID is: > "+ac.getId()+", State is: "+ac.getState()); > > String channelID=ac.getId(); > } > > public void onBusy(AsteriskChannel ac) > { > System.out.println("myCallbackHandler for reference > "+reference+" receives state: Busy, channelID is: "+ac.getId()+", > State is: "+ac.getState()); > } > > public void onFailure(LiveException le) > { > System.out.println("myCallbackHandler for reference > "+reference+" receives state: Failure "+le.getMessage()); > } > > public void onNoAnswer(AsteriskChannel ac) > { > System.out.println("myCallbackHandler for reference > "+reference+" receives state: No Answer, channelID is: > "+ac.getId()+", State is: "+ac.getState()); > } > > public void onSuccess(AsteriskChannel ac) > { > System.out.println("myCallbackHandler for reference > "+reference+" receives state: Success, channelID is: > "+ac.getId()+", State is: "+ac.getState()); > } > > } > > > regards, > yves > > > Am 06.03.2013 04:57, schrieb roko: >> Hi >> >> I use the SendActionCallback, but I'm getting the same response >> that I get from the blocking function... no new data. So, how >> can I get the value of the ORIGINATE_STATUS variable ? >> >> E. >> >> ------------------------------------------------------------------------ >> *De:* roko <ro...@ya...> <mailto:ro...@ya...> >> *Para:* "ast...@li..." >> <mailto:ast...@li...> >> <ast...@li...> >> <mailto:ast...@li...> >> *Enviado:* Lunes, 4 de marzo, 2013 10:38 A.M. >> *Asunto:* Re: [Asterisk-java-users] How to get ORIGINATE_STATUS >> value after OriginateAction >> >> Hi >> >> Thx for your answer. Do you mean instead of blocking using: >> >> ManagerResponse >> <http://www.asterisk-java.org/development/apidocs/org/asteriskjava/manager/response/ManagerResponse.html> sendAction(ManagerAction >> <http://www.asterisk-java.org/development/apidocs/org/asteriskjava/manager/action/ManagerAction.html> action, >> long timeout) >> >> Should I use this function ?: >> >> void sendAction(ManagerAction >> <http://www.asterisk-java.org/development/apidocs/org/asteriskjava/manager/action/ManagerAction.html> action, >> SendActionCallback >> <http://www.asterisk-java.org/development/apidocs/org/asteriskjava/manager/SendActionCallback.html> callback) >> >> I see in the docs that I still get a ManagerResponse >> <http://www.asterisk-java.org/development/apidocs/org/asteriskjava/manager/response/ManagerResponse.html>. >> Pls forgive me, I'm very new at this. How can I get the >> ORIGINATE_STATUS from the ManagerResponse object ? Do you have an >> example that I could use ? Thx for your help. >> >> E. >> >> ------------------------------------------------------------------------ >> *De:* Yves A. <yv...@gm...> <mailto:yv...@gm...> >> *Para:* ast...@li... >> <mailto:ast...@li...> >> *Enviado:* Lunes, 4 de marzo, 2013 2:45 A.M. >> *Asunto:* Re: [Asterisk-java-users] How to get ORIGINATE_STATUS >> value after OriginateAction >> >> Hi, >> >> you could use a callback handler. this way you´ll get informed >> about any state change. >> >> yves >> >> Am 04.03.2013 04:06, schrieb roko: >>> Hi everyone >>> >>> I'm just starting with asterisk and asterisk-java, so please >>> forgive me if this is a silly question. Here >>> (http://www.voip-info.org/wiki/view/Asterisk+cmd+Originate) >>> <http://www.voip-info.org/wiki/view/Asterisk+cmd+Originate> I >>> can see that the originate cmd sets the ORIGINATE_STATUS >>> variable before exiting. How can I get this value from >>> asterisk-java ? At this point I'm using the code from the >>> tutorial, like this: >>> OriginateAction originateAction; >>> ManagerResponse originateResponse; >>> >>> originateAction = new OriginateAction(); >>> originateAction.setChannel("SIP/John"); >>> originateAction.setContext("default"); >>> originateAction.setExten("1300"); >>> originateAction.setPriority(new Integer(1)); >>> originateAction.setTimeout(new Integer(30000)); >>> >>> managerConnection.login(); >>> originateResponse = managerConnection.sendAction(originateAction, 30000); >>> Thx for your help. >>> >>> E. >>> >>> >>> ------------------------------------------------------------------------------ >>> Everyone hates slow websites. So do we. >>> Make your web apps faster with AppDynamics >>> Download AppDynamics Lite for free today: >>> http://p.sf.net/sfu/appdyn_d2d_feb >>> >>> >>> _______________________________________________ >>> Asterisk-java-users mailing list >>> Ast...@li... <mailto:Ast...@li...> >>> https://lists.sourceforge.net/lists/listinfo/asterisk-java-users >> >> >> ------------------------------------------------------------------------------ >> Everyone hates slow websites. So do we. >> Make your web apps faster with AppDynamics >> Download AppDynamics Lite for free today: >> http://p.sf.net/sfu/appdyn_d2d_feb >> _______________________________________________ >> Asterisk-java-users mailing list >> Ast...@li... >> <mailto:Ast...@li...> >> https://lists.sourceforge.net/lists/listinfo/asterisk-java-users >> >> >> >> ------------------------------------------------------------------------------ >> Everyone hates slow websites. So do we. >> Make your web apps faster with AppDynamics >> Download AppDynamics Lite for free today: >> http://p.sf.net/sfu/appdyn_d2d_feb >> _______________________________________________ >> Asterisk-java-users mailing list >> Ast...@li... >> <mailto:Ast...@li...> >> https://lists.sourceforge.net/lists/listinfo/asterisk-java-users >> >> >> >> >> ------------------------------------------------------------------------------ >> Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester >> Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the >> endpoint security space. For insight on selecting the right partner to >> tackle endpoint security challenges, access the full report. >> http://p.sf.net/sfu/symantec-dev2dev >> >> >> _______________________________________________ >> Asterisk-java-users mailing list >> Ast...@li... <mailto:Ast...@li...> >> https://lists.sourceforge.net/lists/listinfo/asterisk-java-users > > > ------------------------------------------------------------------------------ > Symantec Endpoint Protection 12 positioned as A LEADER in The > Forrester > Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" > in the > endpoint security space. For insight on selecting the right partner to > tackle endpoint security challenges, access the full report. > http://p.sf.net/sfu/symantec-dev2dev > _______________________________________________ > Asterisk-java-users mailing list > Ast...@li... > <mailto:Ast...@li...> > https://lists.sourceforge.net/lists/listinfo/asterisk-java-users > > > > > -- > ???? NOW! > Moshiach is coming very soon, prepare yourself! > ??? ?????? ?????? ?????? ??? ????? ????? ???! > > > ------------------------------------------------------------------------------ > Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester > Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the > endpoint security space. For insight on selecting the right partner to > tackle endpoint security challenges, access the full report. > http://p.sf.net/sfu/symantec-dev2dev > > > _______________________________________________ > Asterisk-java-users mailing list > Ast...@li... > https://lists.sourceforge.net/lists/listinfo/asterisk-java-users |