Работа с Asterisk ARI

Сентябрь 8th, 2016 | от | asterisk

Сен
08

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

Включение ARI на FreePBX


Для работы с пользователями Asterisk ARI, которые создаются для чистого asterisk в файле

/etc/asterisk/ari.conf

во FreePBX существует специальный модуль Asterisk REST Interface Users Module
Установим его в секции Admin-Module Admin, предварительно установив Asterisk API модуль

Установка модулей FreePBX для работы с ARI

Установка модулей FreePBX для работы с ARI

Создадим пользователя по которым будем подключаться к API
Settings->Asterisk Interface Users->Add User

Добавление пользователя ARI FreePBX

Добавление пользователя ARI FreePBX

Почему-то пришлось именно перезагрузить FreePBX и Asterisk

fwconsole restart

Проверим, что пользователь ARI добавился в Asterisk

pbx*CLI> ari show users
r/o?  Username
----  --------
No    ariuser

Проверить работу встроенного http сервера можно командой:

http show status
HTTP Server Status:
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

Более детально о работе Asterisk Rest Interface можно почитать
Asterisk REST Interface Users Module User Guide

2) Я люблю java, поэтому проверять буду используя библиотеку asterisk ARI java ari4java. Подробнее

Подключить библиотеку ari4java в maven проект оказалось не сильной простой задачей.
надо сначала добавить репозитарий bintray jcenter в settings.xml настроек мавена

<div class="code"><?xml version="1.0" encoding="UTF-8" ?>
<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 в зависимости:

       <dependency>
            <groupId>ch.loway.oss.ari4java</groupId>
            <artifactId>ari4java</artifactId>
            <version>0.4.0</version>
           
        </dependency>

Простейший скрипт

import ch.loway.oss.ari4java.ARI;
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

Об авторе

Оставить комментарий