Call progress for dahdi calls in asterisk-java

I wanted to generate a call from a script, and deliver a voice message, through a DAHDI channel, to a pots line.
This class does it, it tells you in the end if the line was busy, if it was never answered or if the call succeeded.
This is, if you trust dahdi callprogress, which is really broken… this example works better for SIP calls.
import org.asteriskjava.live.AsteriskChannel;
import org.asteriskjava.live.DefaultAsteriskServer;
import org.asteriskjava.live.LiveException;
import org.asteriskjava.live.ManagerCommunicationExcept ion;
import org.asteriskjava.live.OriginateCallback;
import org.asteriskjava.manager.action. OriginateAction;
import org.asteriskjava.util.Log;
import org.asteriskjava.util.LogFactory;
public class AsteriskCall implements OriginateCallback {
private final Log logger = LogFactory.getLog(getClass());
private DefaultAsteriskServer asteriskServer = null;
private String strChannelStatus = “NoStatusYet”;
private String number=””;
private String message=””;
public AsteriskCall() {
this.asteriskServer = new DefaultAsteriskServer(“somewhere.org”,”admin”,”mypass”);
}
public OriginateAction setupOriginate(String number,String message) {
OriginateAction originateAction = new OriginateAction();
originateAction. setChannel(“DAHDI/1/”+number);
originateAction. setApplication(“Playback”);
originateAction. setData(message) ;
originateAction. setActionId(number);
originateAction. setAsync(Boolean.TRUE);
originateAction. setTimeout(new Integer(30000));
return originateAction;
}
public void originate() {
OriginateAction originateAction = this.setupOriginate(number,message);
// System.out.println(“————— Calling: “+originateAction.getChannel()+”, Sending:
“+originateAction.getData());
try {
this.asteriskServer.originateAsync(originateAction, this);
}
catch (ManagerCommunicationException e) {
logger.error(“ManagerCommunicationException”);
}
15/433
Boolean out=false;
String previousStatus=””;
while(!out) {
if
(this.strChannelStatus.equals(“Busy”)||this.strChannelStatus.equals(“Success”)||this.strChannelStatus.equals(“No
Answer”)||this.strChannelStatus. equals(“Failed”) ) {
out=true;
}
try {
String currentStatus=this.strChannelStatus;
if (!currentStatus.equals(previousStatus)){
logger.info(“Current Channel State: “+currentStatus) ;
previousStatus=currentStatus;
}
Thread.sleep(1000);
}
catch (InterruptedException e) {
logger.info(“Interrupted.”);
}
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info(“Final Verdict: “+this.strChannelStatus);
}
@Override
public void onBusy(AsteriskChannel channel) {
this.strChannelStatus = “Busy”;
}
@Override
public void onDialing(AsteriskChannel channel) {
this.strChannelStatus = “Dialing”;
}
@Override
public void onFailure(LiveException cause) {
this.strChannelStatus = “Failed”;
}
@Override
public void onNoAnswer(AsteriskChannel channel) {
this.strChannelStatus = “No Answer”;
}
@Override
public void onSuccess(AsteriskChannel channel) {
this.strChannelStatus = “Success”;
}
public void setNumber(String n){
16/433
number=n;
}
public void setMessage(String m){
message=m;
}
public static void main(String[] args) throws Exception {
if (args.length<2){
System.out.println(“Usage: Call <number> <message>”);
System.exit(1);
}
AsteriskCall call = new AsteriskCall();
call.setNumber(args[0]);
call.setMessage(args[1]);
call.originate() ;
}
}
17/433

Leave a Reply

Your email address will not be published. Required fields are marked *