Asterisk ARI
ARI - это интерфейс для более простой интеграции с другими решениями
Rest API: позволяет вашим приложениям запрашивать данные и выполнять команды
WebSocket Event Interface Позволяет вашим приложениям ловить события происходящие на Asterisk используя JSON для того, чтобы ловить ответы
В этой статье создадим простейшее приложение Аля Hello World
1) Включение ARI на FreePBX
Для начала включим HTTP сервер для работы с Asterisk ARI
Settings-Advanced Settings -> Enable the mini-HTTP Server
Для работы с пользователями Asterisk ARI, которые создаются для чистого asterisk в файле
во FreePBX существует специальный модуль Asterisk REST Interface Users Module
Установим его в секции Admin-Module Admin, предварительно установив Asterisk API модуль
Создадим пользователя по которым будем подключаться к API
Settings->Asterisk Interface Users->Add User
Почему-то пришлось именно перезагрузить FreePBX и Asterisk
Проверим, что пользователь ARI добавился в Asterisk
r/o? Username
---- --------
No ariuser
Проверить работу встроенного http сервера можно командой:
Prefix:
Server: Asterisk/13.10.0
Server Enabled and Bound to 0.0.0.0:8088
Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/static/... => Asterisk HTTP Static Delivery
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket
Enabled Redirects:
None.
Включим Asterisk Rest Interface в интерфейсе FreePBX 14
Более детально о работе Asterisk Rest Interface можно почитать
Asterisk REST Interface Users Module User Guide
2) Я люблю java, поэтому проверять буду используя библиотеку asterisk ARI java ari4java. Подробнее
Подключить библиотеку ari4java в maven проект оказалось не сильной простой задачей.
надо сначала добавить репозитарий bintray jcenter в settings.xml настроек мавена
<settings xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd'
xmlns='http://maven.apache.org/SETTINGS/1.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<localRepository>D:/java/Maven/MavenLocalRepo</localRepository>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-lenz-maven</id>
<name>bintray</name>
<url>http://dl.bintray.com/lenz/maven</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>bintray-lenz-maven</id>
<name>bintray-plugins</name>
<url>http://dl.bintray.com/lenz/maven</url>
</pluginRepository>
</pluginRepositories>
<id>bintray</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>bintray</activeProfile>
</activePro
</settings></div>
Затем в pom.xml, чтобы добавить ari4java в зависимости:
<groupId>ch.loway.oss.ari4java</groupId>
<artifactId>ari4java</artifactId>
<version>0.4.0</version>
</dependency>
Простейший скрипт
import ch.loway.oss.ari4java.AriFactory;
import ch.loway.oss.ari4java.AriVersion;
import ch.loway.oss.ari4java.generated.AsteriskInfo;
import ch.loway.oss.ari4java.generated.Channel;
import ch.loway.oss.ari4java.generated.Endpoint;
import java.util.List;
/**
* This is a sample printig current system information.
*
* @author lenz
*/
public class HelloAriWorld {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Hello ARI world!");
try {
ARI ari = AriFactory.nettyHttp("http://192.168.88.252:8088/","ariuser", "FreePBX ari user passowrd",AriVersion.ARI_1_5_0);
AsteriskInfo info = ari.asterisk().getInfo("");
List<Channel> channels = ari.channels().list();
List<Endpoint> endpoints = ari.endpoints().list();
for (Endpoint endpoint : endpoints) {
System.out.println("Ресурс " + endpoint.getResource());
System.out.println("Технология " + endpoint.getTechnology());
System.out.println("Состояние " + endpoint.getState());
}
System.out.println("There are " + channels.size() + " active channels now.");
System.out.println( "System up since " + info.getStatus().getStartup_time() );
System.out.println("OS: " + info.getBuild().getOs());
System.out.println("Ядро: " + info.getBuild().getKernel());
System.out.println("Архитектура: " + info.getBuild().getMachine());
System.out.println("Последний reload: " + info.getStatus().getLast_reload_time());
System.out.println("Версия Астериска" + info.getSystem().getVersion());
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Также для удобства работы с Asterisk REST ARI методами создали страницу http://ari.asterisk.org/
Это Swagger для REST API. Не забудьте ввести в поле api_key: ariuser:password