修改etc/asterisk/manager.conf
read = agi,system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = agi,system,call,agent,user,config,command,reporting,originate
修改
etc/asterisk/extensions.conf
[test]
exten =>_2.,1,AGI(agi:async)
脚本服务程序
import java.io.IOException; import org.asteriskjava.manager.AuthenticationFailedException; import org.asteriskjava.manager.ManagerConnection; import org.asteriskjava.manager.ManagerConnectionFactory; import org.asteriskjava.manager.ManagerEventListener; import org.asteriskjava.manager.TimeoutException; import org.asteriskjava.manager.action.*; import org.asteriskjava.manager.event.*; import org.asteriskjava.manager.response.ManagerResponse; public class HelloEvents implements ManagerEventListener { private ManagerConnection managerConnection; private ManagerConnection managerConnection1; public HelloEvents() throws IOException { ManagerConnectionFactory factory = new ManagerConnectionFactory( "ip", "uid", "pwd"); this.managerConnection = factory.createManagerConnection(); this.managerConnection1 = factory.createManagerConnection(); } public void run() throws IOException, AuthenticationFailedException, TimeoutException, InterruptedException { // register for events managerConnection.addEventListener(this); // connect to Asterisk and log in managerConnection.login(); managerConnection1.login(); // request channel state //managerConnection.sendAction(new StatusAction()); // wait 10 seconds for events to come in while(true){ Thread.sleep(10000); } // and finally log off and disconnect // managerConnection.logoff(); } int actionid=0; public void onManagerEvent(ManagerEvent event) { actionid++; // just print received events System.out.println("=============================="); System.out.println(event.getClass().getName()); if (event.getClass().equals(DtmfEvent.class)) { DtmfEvent dtmfEvent=(DtmfEvent)event; if (dtmfEvent.isEnd()) System.out.println(dtmfEvent); }else if (event.getClass().equals(PeerStatusEvent.class)) { System.out.println((PeerStatusEvent)event); }else if (event.getClass().equals(AgiExecEvent.class)) { System.out.println((AgiExecEvent)event); }else if (event.getClass().equals(AsyncAgiEvent.class)){ AsyncAgiEvent agiEvent=(AsyncAgiEvent)event; System.out.println(event); try { AgiAction agiAction=new AgiAction(); agiAction.setActionId("MyAction_"+actionid); agiAction.setCommandId("MyCommandId_"+actionid); agiAction.setChannel(agiEvent.getChannel()); if (agiEvent.getSubEvent().equals("Start")){ System.out.println("==============ANSWER==============="); agiAction.setCommand("ANSWER"); ManagerResponse response=managerConnection1.sendAction(agiAction); System.out.println(response); }else{ if (!agiEvent.getSubEvent().equals("End")){ //agiAction.setCommand("SAY NUMBER 1234 \"1*#\""); //agiAction.setCommand("STREAM FILE hello-world \"1*#\""); agiAction.setCommand("EXEC AGI \"agi://218.249.75.164/callin.agi\""); ManagerResponse response=managerConnection1.sendAction(agiAction); System.out.println(response); } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // connect to Asterisk and log in //managerConnection.login(); // send the originate action and wait for a maximum of 30 seconds for Asterisk // to send a reply //originateResponse = managerConnection.sendAction(originateAction, 30000); } public static void main(String[] args) throws Exception { HelloEvents helloEvents; helloEvents = new HelloEvents(); helloEvents.run(); } }