目录
一、简介
AMI (Asterisk Manager Interface)。是Asterisk的管理接口。通过此接口,可以实现对Asterisk系统的监控和控制。
参见官网:https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=4817239
参见AMI教程:http://asterisk-java.org/tutorial/
Asterisk其他相关总结文档:
二、访问形式
AMI提供两种方式的访问,TCP形式的和HTTP形式的, 而HTTP形式的又可以分普通连接和TLS连接两种。manager.conf配置文件中有若干AMI的配置,如果使用HTTP形式的接口,还需要配置http.conf文件中的相关配置。
三、AMI接口分类
AMI提供的的接口分为Event和Action。
1、Event为从Asterisk服务单向向AMI CLIENT发送的事件通知。
2、Action为AMI CLIENT发送请求,然后Asterisk给予回复。Action也允许先返回若干Event再返回Action Response的情况。
四、AMI接口整理
Asterisk AMI接口源码下载地址:http://download.csdn.net/detail/manageruser/9912291
Asterisk AMI在线手册下载地址:http://download.csdn.net/download/manageruser/9912321
package AMIapiBase;
import java.io.IOException;
import org.asteriskjava.manager.TimeoutException;
import org.asteriskjava.manager.action.CommandAction;
import org.asteriskjava.manager.action.ConfbridgeKickAction;
import org.asteriskjava.manager.action.ConfbridgeListAction;
import org.asteriskjava.manager.action.ConfbridgeMuteAction;
import org.asteriskjava.manager.action.ConfbridgeUnmuteAction;
import org.asteriskjava.manager.action.DbDelAction;
import org.asteriskjava.manager.action.DbGetAction;
import org.asteriskjava.manager.action.DbPutAction;
import org.asteriskjava.manager.action.ExtensionStateAction;
import org.asteriskjava.manager.action.GetConfigAction;
import org.asteriskjava.manager.action.GetVarAction;
import org.asteriskjava.manager.action.HangupAction;
import org.asteriskjava.manager.action.MonitorAction;
import org.asteriskjava.manager.action.OriginateAction;
import org.asteriskjava.manager.action.UpdateConfigAction;
import org.asteriskjava.manager.response.ManagerResponse;
public class AMIApp {
public AMIApp(){}
public ManagerResponse AMIAPP_CallExtension(String channel,String exten)
throws IllegalArgumentException, IllegalStateException, IOException, TimeoutException{
//实例化命令响应对象
ManagerResponse response = new ManagerResponse();
//实例化Originate命令对象
OriginateAction originate = new OriginateAction();
originate.setActionId(ConnectAMI.getActionID("call")); // 设置actionid
originate.setChannel("SIP/"+channel); // 设置主叫分机
originate.setContext("internal"); // 设置路由器
originate.setExten(exten); // 设置被叫分机
originate.setPriority(new Integer(1)); // 设置进入dialplan优先级
originate.setTimeout(new Long(30000)); // 设置呼叫超时
originate.setCallerId(exten);
originate.setAsync(true); // 设置异步才会有结果返回
response = ConnectAMI.getConnect().sendAction(originate);
return response;
}
// 挂断某个通道
public Manager