2015-05-11 18 views
0

我想從custum asterisk插件發送消息到我的應用程序。獲取/訂閱停滯消息(星號ARI)

經過一番努力,我可以從我的插件發送停滯消息,但我不知道如何在java中處理它們。 (我使用ari4java項目)。

在插件我把我的消息,兩種不同的方法:

stasis_publish("StasisTest", msg); 
// or 
int result = stasis_app_send("StasisTest", inte); 

我可以在插件的消息,所以我想有發送到應用程序。

首先我extension.conf

exten => 3000,1,NoOp(test ARI) 
same => n,Answer() 
same => n,StasisTest() 

在Java端,我不知道在哪裏可以收到消息,我都應該有被AriCallback或AriCallback處理:

private static class DummyCallBack implements AriCallback<Message> { 

     @Override 
     public void onSuccess(Message result) { 
      System.out.println(String.format("Dummy message callback receive [%s] with class [%s]", 
        result.getType(), 
        result.getClass())); 
     } 

     @Override 
     public void onFailure(RestException e) { 
      System.out.println("fail callback message"); 
     } 
    } 

    private static class AppDummyCallback implements AriCallback<ch.loway.oss.ari4java.generated.Application> { 

     @Override 
     public void onSuccess(ch.loway.oss.ari4java.generated.Application result) { 
      System.out.println(String.format("Dummy Application callback receive name [%s] with class [%s]", 
        result.getName(), 
        result.getClass())); 
     } 

     @Override 
     public void onFailure(RestException e) { 
      System.out.println("fail callback application"); 
     } 
    } 

我註冊到ARI(這工作正常):

ari = AriFactory.nettyHttp(url, username, password, AriVersion.ARI_1_7_0); 

我試着獲取消息通知:

public static AriApplication createAriApplication(final ARI ari, 
                 final String applicationName, 
                 final EndpointTypes endpointTypes, 
                 final AriCallback<Message> callback, 
                 final AriCallback<Application> appHandler 
                ) throws ARIException { 
    ActionEvents actionApplications = ari.getActionImpl(ActionEvents.class); 
     actionApplications.eventWebsocket(applicationName, callback); 

     ari.applications().subscribe(applicationName, endpointTypes.getEndpoint(), appHandler); 
     return new AriApplication(ari, applicationName, callback); 
    } 

public AriApplication(final ARI ari, 
          final String applicationName, 
          final AriCallback<Message> callback) throws ARIException { 
     this.ari = ari; 

     this.applicationName = applicationName; 
     ActionEvents actionEvents = ari.getActionImpl(ActionEvents.class); 
     actionEvents.eventWebsocket(applicationName, callback); 
    } 

當我在撥打電話[3000],我得到下面的輸出:

Dummy Application callback receive name [StasisTest] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.Application_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ApplicationReplaced_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.EndpointStateChange_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelCreated_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelStateChange_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelDialplan_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelDialplan_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelStateChange_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelDialplan_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelHangupRequest_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelVarset_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.ChannelDestroyed_impl_ari_1_7_0] 
Dummy message callback receive [null] with class [class ch.loway.oss.ari4java.generated.ari_1_7_0.models.EndpointStateChange_impl_ari_1_7_0] 

我想沒有這個消息的一個是我的消息,我怎麼能找回這個淤滯信息 ?他們是否發送給ARI?如果不是,我可以在ARI和我的插件之間發送什麼樣的消息?

回答

1

我用你的例子,是爲我自己的項目一個起跳點,這裏是我想出迄今:

private static class DummyCallBack implements AriCallback<Message> { 

    @Override 
    public void onSuccess(Message result) { 
     System.out.println(String.format("Dummy message callback receive [%s] with class [%s]", 
       result.getType(), 
       result.getClass())); 

     if (result instanceof StasisStart) 
     { 
      StasisStart stasisStart = (StasisStart)result; 
      System.out.println 
      (
       String.format("StasisStart - Channel: %s State: %s", stasisStart.getChannel().getId(), stasisStart.getChannel().getState()) 
      ); 

     } else if (result instanceof ChannelDtmfReceived) { 

      ChannelDtmfReceived channelDtmfReceived = (ChannelDtmfReceived)result; 
      System.out.println 
      (
       String.format("ChannelDtmfReceived received - Channel: %s Digit: %s", channelDtmfReceived.getChannel().getId(), channelDtmfReceived.getDigit()) 
      ); 

     } else if (result instanceof ChannelHangupRequest) { 

      ChannelHangupRequest channelHangupRequest = (ChannelHangupRequest)result; 

      System.out.println 
      (
       String.format("ChannelHangupRequest - Channel: %s", channelHangupRequest.getChannel().getId()) 
      ); 

     } else if (result instanceof StasisEnd) { 

      StasisEnd stasisEnd = (StasisEnd)result; 

      System.out.println 
      (
       String.format("Stasis End") 
      ); 
     } 

    } 

    @Override 
    public void onFailure(RestException e) { 
     System.out.println("fail callback message"); 
    } 
}