freeswitch如何播放语音验证码(esl方式)

1.首先注册网关,gateway,具体不再说

2.在conf\dialplan\default.xml,添加


 
   
       
         
       
       
 
     
       

 
 
       
       
 
     

   
 



3.java esl登场



public class EventEslInboundTest {
 private static final Logger log      = LoggerFactory.getLogger(EventEslInboundTest.class);
private static String       host     = "127.0.0.1";
private static int          port     = 8021;
private static String       password = "ClueCon";
 
 
public static void inBand(){

 
        final Client client = new Client();
        try
        {
            client.connect( host, port, password, 10 );
            
          //  client.connect( "10.0.0.85", port, password, 10 );
        }
        catch ( InboundConnectionFailure e )
        {
            log.error( "Connect failed", e );
            return;
        }        
 
        //注册事件处理程序
        client.addEventListener( new IEslEventListener()
        {
            public void eventReceived( EslEvent event )
            {
            //System.out.println("Event received [{}]" + event.getEventHeaders());
                //记录接听次数和时间
                if(event.getEventName().equals("CHANNEL_ANSWER")){
                  //your code here
                }
                if(event.getEventName().equals("CHANNEL_BRIDGE")){
                  //your code here
                }
 
                if(event.getEventName().equals("CHANNEL_DESTROY")){
                      //
                }
 
                if(event.getEventName().equals("CHANNEL_HANGUP_COMPLETE")){
                    //挂断
                 
                }
 
            }
            public void backgroundJobResultReceived( EslEvent event )
            {
                String uuid= event.getEventHeaders().get("Job-UUID");
            log.info("Background job result received+:"+event.getEventName()+"/"+event.getEventHeaders());// +"/"+JoinString(event.getEventHeaders())+"/"+JoinString(event.getEventBodyLines()));
           
            }
 
        } );
 
        //定义事件日志输出格式,但是java esl 目前只支持plain格式    ,http://wiki.freeswitch.org/wiki/Event_Socket
        //2012-12-25 19:20:30  [ main:426 ] - [ ERROR ]  java.lang.IllegalStateException: Only 'plain' event format is supported at present
        client.setEventSubscriptions("plain", "all");
       /* String uuid= client.sendAsyncApiCommand("originate", "user/1002 &park()");
       System.out.println("============++=="+uuid); 
        Execute e = new Execute(client, uuid);
       try {
//exe.transfer("1002");
      e.say("en", "1234", "name_spelled", "intered");
    } catch (ExecuteException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    } */


//        client.setEventSubscriptions( "xml", "CHANNEL_DESTROY" );
//        client.setEventSubscriptions( "json", "CHANNEL_CREATE");
 
        //不区分大小写,对事件进行过滤,只关注需要的事件
      /*  client.addEventFilter("Event-Name", "CHANNEL_CREATE");
        client.addEventFilter("Event-Name", "CHANNEL_HANGUP");
        client.addEventFilter("Event-Name", "CHANNEL_HANGUP_COMPLETE");
        client.addEventFilter("Event-Name", "CHANNEL_ANSWER");
        client.addEventFilter("Event-Name", "CHANNEL_DESTROY");
        client.addEventFilter("Event-Name", "CHANNEL_BRIDGE");
        client.addEventFilter("Event-Name", "CHANNEL_ORIGINATE");
        client.addEventFilter("Event-Name", "CHANNEL_OUTGOING");*/
 
// 可以取消前面的订阅定义,重新定义新的事件订阅
//        client.cancelEventSubscriptions();
//        client.setEventSubscriptions( "plain", "all" );
//        client.addEventFilter( "Event-Name", "heartbeat" );
//        client.addEventFilter( "Event-Name", "channel_create" );
//        client.addEventFilter( "Event-Name", "background_job" );
 
       EslMessage response = client.sendSyncApiCommand("originate", "{ignore_early_media=true}sofia/gateway/mygatew/xxx  7777 xml default 'zz'");
    //  String AsyncApiCommand =  client.sendAsyncApiCommand("originate", "sofia/gateway/mygatew/015674873480 12396 xml default 'zz'");
    //  System.out.println("AsyncApiCommand="+AsyncApiCommand); 
      System.out.println("aaaaaaaaaaaaaaaaa");
       // EslMessage response = client.sendSyncApiCommand("status", "");
         Pattern Regex = Pattern.compile("OK\\s([\\w\\-]+)",
                Pattern.CANON_EQ); 
 
 
        System.out.println("body_string"+response.toString());
 
        for ( String bodyLine : response.getBodyLines() )
        {
            System.out.println(bodyLine);
        Matcher RegexMatcher = Regex.matcher(bodyLine);
            if(RegexMatcher.find()){
                String uuuid=RegexMatcher.group(1);
                if(!uuuid.isEmpty()){
                    //your codes here
                System.out.println("++++++++++++"+uuuid);
                 
                }
 
            }
        }
        
        
       // client.close();
}


public static void main(String[] args) {
inBand();
}
}

       EslMessage response = client.sendSyncApiCommand("originate", "{ignore_early_media=true}sofia/gateway/mygatew/xxx  7777 xml default 'zz'");


xxx指的是你的手机号码,注意ignore_early_media=true}必须添加,否则语音不完整,也可以在conf\dialplan\default.xml,       answer改为  wait_for_answer,二者选其一

4.测试完毕


你可能感兴趣的:(FreeSwitch)