Reputation: 480
I am trying to send messages from a custum asterisk plugin to my application.
After some effort, I can send stasis message from my plugin, but I don't know how to handle them in java. (I use ari4java project).
On the plugin I send my message with two different methods :
stasis_publish("StasisTest", msg);
// or
int result = stasis_app_send("StasisTest", inte);
I can get the message in the plugin, so I suppose there are sent to the application.
First my extension.conf
exten => 3000,1,NoOp(test ARI)
same => n,Answer()
same => n,StasisTest()
On the java side, I don't know where the message can be received, I have supposed there are handled by AriCallback or 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");
}
}
I register to the ARI (that's working fine):
ari = AriFactory.nettyHttp(url, username, password, AriVersion.ARI_1_7_0);
And I try to get the message notification :
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);
}
When I am making a call on [3000], I get the following output :
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]
I suppose no one of this message are mine message, how can I get back this stasis message ? Are they send to the ARI ? If not, what kind of message can I send between ARI and my plugin ?
Upvotes: 0
Views: 1770
Reputation: 525
I used your example s a jumping off point for my own project, here's what I've come up with so far:
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");
}
}
Upvotes: 2