Пользователь
0,0
рейтинг
30 апреля 2012 в 15:08

Разработка → Мониторинг состояния Asterisk с помощью MonAst из песочницы

Поиск удобного решения по мониторингу нескольких серверов Asterisk привел к замечательному инструменту:
Monast Logo

Осмотр возможностей


MonAst позиционируется разработчиками как инструмент мониторинга, который действует как панель оператора для Asterisk. Распространяется по лицензии BSD. Проект написан с использованием Python (демон для связи с Asterisk по AMI), PHP, JS (AJAX).

Из возможностей просмотра (в режиме real-time) — следующее:
  • Работа с несколькими серверами (с помощью переключения между ними)
  • Многопользовательский режим с указанием прав доступа
  • Отображение пользователей и пиров (SIP, IAX, DAHDI, Khomp, etc...)
  • Отображение активных каналов и вызовов (с именем канала и CallerID)
  • Каналы конференции (с отображением подключённых пользователей)
  • Припаркованные звонки (Parked Calls)
  • Очереди (с отображением статистики, участников и ожидающих клиентов)

Из возможностей выполнения операций:
  • Выполнение (инициация) вызовов
  • Трансфер вызовов
  • Сброс вызовов
  • Паркование вызовов
  • Прослушивание звонков (Spy Calls)
  • Приглашение участников в конференцию
  • Удаление участников конференции
  • Добавление пользователей (или пиров) как участника любой очереди
  • Удаление участников из очереди
  • Постановка и снятие с паузы участников очереди
  • Выполнение CLI команд

Как видно — список возможностей достаточно обширный.

Установка


Подопытной системой у нас будет чистая Ubuntu 10.10 с базовыми программами и обновлениями. MonAst не обязательно ставить на хосте с Asterisk. У меня, к примеру, MonAst стоит локально на ноутбуке — и я прекрасно мониторю все наши 6 серверов с Asterisk.
Прежде чем приступить к установке MonAst — пробежимся по требованиям.
Так как демон, с помощью которого происходит обмен между Asterisk и MonAst (посредством AMI — Asterisk Manager API) написан на Python, то первым делом проверяем его присутствие в системе:
it@ubuntu-test ~ $ python --version
Python 2.6.6

Если видим нечто подобное — значит все в порядке. Если по каким то причинам его нет — выполняем команду:
it@ubuntu-test ~ $ sudo apt-get update && sudo apt-get install python

Двигаемся дальше.
Так как все это будет отображатся через web-интерфейс, то нужно иметь установленный http сервер с поддержкой php, а так же php-pear. Если ранее данного комплекта не стояло — выполняем команду (дополнительно поставим mc — для удобства навигации и редактирования):
it@ubuntu-test ~ $ sudo apt-get install apache2 php5 php-pear mc

Ну и напоследок — установка зависимостей для обсуждаемого продукта. Этот список у нас невелик:
  1. Twisted Python 10.1+
  2. zope.interface 3.6+
  3. Starpy SVN-Trunk
  4. PHP PEAR Packages: (HTTP_Client)

Пакет zope.interface уже стоял в системе (был в наличии из коробки).
Ставим пакет HTTP_Client:
it@ubuntu-test:/usr/src$ sudo pear install HTTP_Client
WARNING: "pear/HTTP_Client" is deprecated in favor of "pear/HTTP_Request2"
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
WARNING: "pear/HTTP_Request" is deprecated in favor of "pear/HTTP_Request2"
WARNING: "pear/Net_URL" is deprecated in favor of "pear/Net_URL2"
downloading HTTP_Client-1.2.1.tgz ...
Starting to download HTTP_Client-1.2.1.tgz (10,202 bytes)
.....done: 10,202 bytes
downloading HTTP_Request-1.4.4.tgz ...
Starting to download HTTP_Request-1.4.4.tgz (17,109 bytes)
...done: 17,109 bytes
downloading Net_URL-1.0.15.tgz ...
Starting to download Net_URL-1.0.15.tgz (6,303 bytes)
...done: 6,303 bytes
downloading Net_Socket-1.0.10.tgz ...
Starting to download Net_Socket-1.0.10.tgz (5,429 bytes)
...done: 5,429 bytes
install ok: channel://pear.php.net/Net_URL-1.0.15
install ok: channel://pear.php.net/Net_Socket-1.0.10
install ok: channel://pear.php.net/HTTP_Request-1.4.4
install ok: channel://pear.php.net/HTTP_Client-1.2.1

Как видим — в процессе установки говорит об устаревании пакета и предлагает поставить более новый:
it@ubuntu-test:/usr/src$ sudo pear install HTTP_Request2

Пакеты Twisted и StarPy будем ставить из исходников. Но при установке выявились еще зависимости, которые и исправляем (попутно перейдем в режим суперпользователя):
it@ubuntu-test:~$ sudo su
root@ubuntu-test:~$ cd /usr/src/
root@ubuntu-test:/usr/src# wget http://pypi.python.org/packages/source/T/Twisted/Twisted-12.0.0.tar.bz2#md5=cf49a8676c21c50faf1b42b528049471
root@ubuntu-test:/usr/src# wget http://downloads.sourceforge.net/project/starpy/starpy/1.0.0a13/starpy-1.0.0a13.tar.gz
root@ubuntu-test:/usr/src# tar -xvf Twisted-12.0.0.tar.bz2
root@ubuntu-test:/usr/src# tar -xvf starpy-1.0.0a13.tar.gz
root@ubuntu-test:/usr/src# apt-get install build-essential gcc-4.5 libssl-dev python-dev
root@ubuntu-test:/usr/src# cd Twisted-12.0.0
root@ubuntu-test:/usr/src/Twisted-12.0.0# python setup.py install

Если видим надпись «Finished processing dependencies for Twisted==12.0.0» — значит установка прошла успешно и переходим дальше. Если выскакивает ошибка — то скорее не хватает какого-то компонента. Проверте по списку — все ли зависимости установлены? Идем дальше:
root@ubuntu-test:/usr/src/Twisted-12.0.0# cd ..
root@ubuntu-test:/usr/src# cd starpy-1.0.0a13
root@ubuntu-test:/usr/src/starpy-1.0.0a13# python setup.py install
root@ubuntu-test:/usr/src/starpy-1.0.0a13# cd ..

Ну и самый главный виновник торжества. На момент написания актуальная версия — 3.0b4:
root@ubuntu-test:/usr/src# wget http://downloads.sourceforge.net/project/monast/Monast%20for%20Asterisk%201.4%2C%201.6%20and%201.8/3.0b4/monast-3.0b4.tar.gz
root@ubuntu-test:/usr/src# tar -xvf monast-3.0b4.tar.gz
root@ubuntu-test:/usr/src# cd monast-3.0b4
root@ubuntu-test:/usr/src/monast-3.0b4# ./install.sh

В процессе установки скрипт задаст пару вопросов относительно путей. Если предложенные им варианты устраивают — соглашаемся. Иначе прописываем свои данные. Я лишь изменил путь, куда ложатся .php файлы
MonAst HTML path [/var/www/html/monast]: /var/www/asterisk/monast/

Может показаться что на этом установка закончена. Но не тут то было. Стартовый скрипт /etc/init.d/monast ставится лишь для систем SuSE, RedHat, Debian, Gentoo, Slackware, FreeBSD. Но не Ubuntu и ей подобные. Потому копируем скрипт от Debian и добавляем его в автозагрузку:
root@ubuntu-test:/usr/src/monast-3.0b4# cp contrib/init.d/rc.debian.monast /etc/init.d/monast
root@ubuntu-test:/usr/src/monast-3.0b4# chmod 755 /etc/init.d/monast 
root@ubuntu-test:/usr/src/monast-3.0b4# update-rc.d monast defaults 91 60

Вот теперь установка у нас окончена. Можно переходить к настройке.

Настройка


Перво наперво нужно выполнить настройку самого Asterisk, дабы сабжевое ПО могло успешно подключится и обмениваться информацией. На сервере с Asterisk переходим по пути /etc/asterisk/ и правим файл manager.conf. Если серверов несколько — делаем подобные поправки на нужных.
root@asterisk ~ $ mcedit /etc/asterisk/manager.conf

; 
; AMI - The Asterisk Manager Interface 
; 

[general] 
enabled = yes		; Активируем AMI
port = 5038		; Порт, по которому к данному сервису будет подключаться MonAst
bindaddr = 0.0.0.0	; Прослушиваем все интерфейсы в системе для принятия подключения
displayconnects = yes	; Показывать в консоли Asterisk о факте подключения

webenabled = no 	; Выключаем встроенный в Asterisk static_http

allowmultiplelogin = yes	; Разрешаем вход вход под одним и тем же пользователем с разных мест.
timestampevents = yes		; Добавлять метку времени для событий

; debug = on	; Можно включить отладочный режим для сообщений AMI

[monast_user]                                                                                                                  
secret=qwerty123				; Пароль для подключения
deny=0.0.0.0/0.0.0.0				; Запрещаем подключение с любого адреса
permit=127.0.0.1/255.255.255.0		; И постепенно разрешаем нужные
permit=192.168.1.10/255.255.255.0		; Так разрешаем конкретный хост
permit=192.168.2.0/255.255.255.0		; А вот так можно разрешить подсеть
writetimeout=100				; Таймаут для посылки команд

; Разрешения для данного пользователя. Можно указать all, но так наглядней
read=system,call,log,verbose,command,agent,user,config,originate,reporting
write=system,call,log,verbose,command,agent,user,config,originate,reporting

После чего перезагрузим конфигурацию Asterisk для модуля manager:
root@asterisk$ asterisk -rx "manager reload"

На этом настройка Asterisk закончена. Переходим к конфигурации самого MonAst'а.
Файл с параметрами находится по пути /etc/monast.conf. Его и правим. Скажу наперед — сложностей в настройке не возникло, приведенные в файле комментарии четко описывают тот или иной параметр. Но для примера приведу свой пример файла
root@ubuntu-test:/usr/src/monast-3.0b4# cd /etc/
root@ubuntu-test:/etc# mcedit monast.conf

# Copyright (c) 2008-2011, Diego Aguirre
# All rights reserved.

##
## Global Section
##
[global]

# Bind client connetions on host:port
bind_host = 127.0.0.1		; Разрешаем подключения с локального хоста
bind_port = 5039		; Порт для подключения к демону.

# Use client autentication on browser 
auth_required = true		; Указываем сто аутентификация обязательна

## ===================================

##
## Servers Definitions
##

[server: Server1]		; Параметры для первого сервера
hostname = 192.168.1.1
hostport = 5038
username = monast_user
password = qwerty123

# Default user context
default_context = default

# Context to use in transfer calls
transfer_context = default

# Context and prefix for meetme
meetme_context = default
meetme_prefix  = 

[server: Server2]		; Параметры для второго сервера
hostname = 192.168.2.1
hostport = 5038
username = monast_user
password = qwerty123

# Default user context
default_context = default

# Context to use in transfer calls
transfer_context = default

# Context and prefix for meetme
meetme_context = default
meetme_prefix  = 

## ===================================

##
## Peers Definitions
##
[peers]
# sort peers (options: channel, callerid)
sortby = callerid

# default show/hide
default = show

# hide peer when default = show
;<Server Name>/SIP/user-1 = hide

# show peer when default = hide
;<Server Name>/SIP/user-2 = show

# always show peer.
;<Server Name>/SIP/user-3 = force

# force CallerID (only in forced mode)
;<Server Name>/SIP/user-4 = force,Diego Aguirre <5555>

# Create peer groups
;<Server Name>/@group/Group 1 = SIP/user-1,SIP/user-2
;<Server Name>/@group/Group 2 = SIP/user-3,SIP/user-4

## ===================================

##
## Meetmes / Conferences Definitions
##
[meetmes]
# default show/hide
default = hide

# hide meetme when default = show
;<Server Name>/1234 = hide

# show meetme when default = hide
;<Server Name>/1234 = show

# always show meetme
;<Server Name>/1234 = force

## ===================================

##
## Queues Definitions
##
[queues]
# defualt show/hide
default = hide

# show queue queue01
;<Server Name>/queue01 = show

# show queue queue02 with display name Support
;<Server Name>/queue02 = show,Support

# hide queue queue03
;<Server Name>/queue03 = hide

# Map Member name
;<Server Name>/@member/SIP/user-1 = Diego Aguirre <5555>

## ===================================

## Define users and roles to use on auth_required is set to true
## roles must be:
##                originate : user can originate, transfer, park and drop calls
##                agent     : user cans add, remove, pause and unpause members on queues
##                command   : user can execute asterisk cli commands
##                spy       : user can start a spy

[user: admin]		; Мего-админ
secret  = SuperPuperDruper
roles   = originate,queue,command,spy 
servers = ALL

[user: manager]	; Пользователь с возможностью просмотра обеих (всех) серверов
secret  = password
roles   = originate
servers = ALL

[user: server1]		; Пользователь с возможностью просмотра одного (первого) серверов
secret  = 12345
roles   = originate
servers = Server1

[user: server2]		; Пользователь с возможностью просмотра и выполнения команд на одном (втором) сервере 
secret  = 54321
roles   = originate,command
servers = Server2

Сохраняем изменения и перезагружаем демон:
root@ubuntu-test:/etc# /etc/init.d/monast restart

Все. Можно подключаться и проверять. Открываем браузер и в строке адреса вбиваем: http://localhost/asterisk/monast/
Если ставили «auth_required = true» то вводим логин, пароль — и наслаждаемся рабочим инструментом :)
MonAst Mixed Pannels
Важное замечание. В режиме «без аутентификации» все, кто работают в панели оператора MonAst — имеют полные права, т.е. являются «суперпользователями». А как мы знаем «Оружие, данное в неумелые руки, может навредить». Будьте внимательны.
Так же в файле /var/www/asterisk/monast/lib/config.php находятся параметры адреса и порта, где работает демон monast.py, параметры отображение вкладок debug и cli, а так же некоторых не менее интересных параметров.
Обзор возможностей
Теперь же пробежимся по возможностям данного программного продукта.
После входа на web-интерфейс мы видим несколько вкладок. А если быть точнее:
  • Mixed Pannels — Вкладка с практически всем разделами сразу. Удобство заключается в том, что можно отобразить лишь нужные и, не переключаясь, видеть необходимую информацию в одном месте.
  • Peers/Users — Просмотр и управление достуными пирами и пользователями.
  • Meetme Rooms — Просмотр и управление конференциями
  • Channels/Calls — Просмотр и управление активными вызовами и поднятыми каналами.
  • Parked Calls — Просмотр и управление припаркованными вызовами
  • Queues — Просмотр и управление очередью звонков
  • Asterisk CLI — Командная строка Asterisk. Если у пользователя есть права выполнения команд в консоли, то именно здесь можно ввести нечто схожее с «core show version» :)

Разобраться в возможностях не составляет труда и, возможно, даже лучше будет если Вы сами пробежитесь и опробуете доступные функции — так вы четко будете понимать что и как работает. Но я все таки опишу парочку интересных из них :)
Originate call (инициирование вызова). Из названия функции ясно — можно соединить внутреннего абонента с каким либо номером (если он, номер, сможет обработаться Вашим dialplan'ом). Для выполнения функции нужно нажать правой кнопкой мыши (далее по тексту — пкм) на нужном аккаунте и выбрать соответствующий пункт. В появившемся окне вводим нужный номер и, вуаля — у выбранного человека звонит телефонный аппарат, он берет трубку и Asterisk соединяет его с выведенным нами номером. Так же можно перетащить мышкой один аккаунт на другой и, согласившись — инициировать соединение между ними.
Meetme Rooms (комната конференции). Перейдя в данный раздел можно управлять уже созданными конференциями, либо создать новую и пригласить туда определённых участников. Для создания своей конференции — переходим в соответствующий раздел, нажимаем «Create Dynamic Meetme» и в окне вводим запрашиваемую информацию. Нажали «Ок» — и процесс пошел-поехал :)
Spy (прослушивание вызова). Что она делает? Из названия можно понять — дает возможность подключится к выбранному разговору и прослушать речевой поток. Функция может быть полезна при использовании в call-центрах для контроля и проверки агентов. При этом в процессе разговора собеседники даже не подозревают о факте прослушивания. По крайней мере я, тестируя данную возможность, никакого сигнала или уведомления не слышал. Для того, чтобы пользователь панели имел право на прослушивание — нужно чтобы в поле roles его прав доступа присутствовало spy. Потому для того, чтоб ограничить использование данной функции с нехорошим умыслом — включайте аутентификацию для доступа к панели и давайте права на ее использование только доверенным для этого пользователям. Начальнику отдела, например :)

Заключение


MonAst, как и альтернативные проекты с подобной функциональностью (FOP, Links и пр.) однозначно имеет право на существование и, соответственно, использование в рабочем процессе.
Простота использования, относительная лёгкость в установке и настройке, мониторинг нескольких серверов с одного места — все это, в большинстве случаев, будет более чем достаточно.

Ссылки




UPD: Исправил пару досадных ошибок по тексту.
Сергей Куранда @morello
карма
2,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (15)

  • 0
    Спасибо, как раз искал подобное
    • 0
      Рад, что обзор таки помог
  • 0
    Оч нужная статья! )
  • 0
    Под CentOS не завелось :(

    во-первых, python встал как python26 (вроде в скрипте поправил), но на последнем этапе пытается найти Twisted и выходит :(
    • +1
      Вот на скорую руку нашел относительно установки (обновления) Python 2.6 в CentOS.
      А по поводу Twisted — вы его из исходников ставили? Можно более расширенную информацию об ошибке (в процессе какой команды выходит и т.п.)
    • +1
      Под CentOS (более точнее — CentOS Linux release 6.0 (Final))
      При установке Twisted все проходит гладко:
      [root@develop Twisted-12.0.0]# python setup.py install
      ...
      Installed /usr/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg
      Processing dependencies for Twisted==12.0.0
      Searching for zope.interface==3.8.0
      Best match: zope.interface 3.8.0
      Processing zope.interface-3.8.0-py2.6-linux-i686.egg
      zope.interface 3.8.0 is already the active version in easy-install.pth

      Using /usr/lib/python2.6/site-packages/zope.interface-3.8.0-py2.6-linux-i686.egg
      Searching for distribute==0.6.10
      Best match: distribute 0.6.10
      Adding distribute 0.6.10 to easy-install.pth file
      Installing easy_install script to /usr/bin
      Installing easy_install-2.6 script to /usr/bin

      Using /usr/lib/python2.6/site-packages
      Finished processing dependencies for Twisted==12.0.0

      При установке StarPy все так же проходит гладко:
      [root@develop starpy-1.0.0a13]# python setup.py install
      running install
      running build
      running build_py
      running install_lib
      running install_data
      running install_egg_info
      Removing /usr/lib/python2.6/site-packages/starpy-1.0.0a12-py2.6.egg-info
      Writing /usr/lib/python2.6/site-packages/starpy-1.0.0a12-py2.6.egg-info

      Установка MonAst делалась командой (в обзоре обозначено так же):
      [root@develop monast-3.0b4]# ./install.sh

      Для верности — запустим monast.py:
      [root@develop pymon]# ./monast.py
      [Fri May 04 08:23:16 2012] NOTICE :: Initializing Monast AMI Interface...
      [Fri May 04 08:23:16 2012] NOTICE :: Parsing config file /etc/monast.conf
      [Fri May 04 08:23:16 2012] NOTICE :: Server KIEV_2 :: AMI Connected...
      [Fri May 04 08:23:16 2012] NOTICE :: Server KIEV_1 :: AMI Connected...

      Это я все к тому что на Ubuntu, Mint, CentOS — ставил лично и все запускалось. Если выдает ошибки на каком то этапе — то нужно смотреть что пропустили. Возможно у Вас не стоит какого-то пакета в системе, который у меня благополучно был установлен ранее.
  • 0
    У меня на Debian Squeeze тоже не становится.

    В соответствии с документацией MonAst'a я сначала пытаюсь запустить monast.py без ключа --daemon, просто чтобы убедиться в отсутствии ошибок.
    Выскакивает ошибка:

    root@myhost:/opt/monast# ./monast.py
    Monast ERROR: Module twisted not found.
    You need twisted matrix 10.1+ to run Monast. Get it from twistedmatrix.com/

    В свою очередь при попытке установить Twisted не выскакивает никаких ошибок, но и обозначенного Вами текста «Finished processing dependencies for Twisted==12.0.0» тоже нет:

    root@myhost:/usr/src/Twisted-12.0.0# python setup.py install
    running install
    running build
    running build_py
    running build_ext
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c conftest.c -o conftest.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c conftest.c -o conftest.o
    running build_scripts
    running install_lib
    running install_scripts
    changing mode of /usr/local/bin/mailmail to 755
    changing mode of /usr/local/bin/manhole to 755
    changing mode of /usr/local/bin/pyhtmlizer to 755
    changing mode of /usr/local/bin/twistd to 755
    changing mode of /usr/local/bin/cftp to 755
    changing mode of /usr/local/bin/tap2rpm to 755
    changing mode of /usr/local/bin/trial to 755
    changing mode of /usr/local/bin/tapconvert to 755
    changing mode of /usr/local/bin/lore to 755
    changing mode of /usr/local/bin/conch to 755
    changing mode of /usr/local/bin/ckeygen to 755
    changing mode of /usr/local/bin/tkconch to 755
    changing mode of /usr/local/bin/tap2deb to 755
    running install_data
    running install_egg_info
    Removing /usr/local/lib/python2.6/dist-packages/Twisted-12.0.0.egg-info
    Writing /usr/local/lib/python2.6/dist-packages/Twisted-12.0.0.egg-info

    • +1
      Судя по информации с сайта — Twisted в Debian доступен как пакет, а значит можно попробовать установить его командой "sudo aptitude install twisted python-twisted python-twisted-core". Так же не помешает предварительно выполнить "sudo aptitude update". К сожалению проверить возможности нету — под рукой есть только Mint, Gentoo и CentOS (на первой и последней ставил собственноручно и все завелось)
      • 0
        Я так и делал, после того как добавил нужное зеркало в sources.list
        Но в первый раз оно почему-то поставилось криво, из-за каких-то конфликтов.
        Во второй раз все поставилось нормально, и наконец заработало.
        Что могу сказать — это то, что я искал очень долго. Спасибо большое!
        • 0
          Да не за что. Спасибо скажите разработчикам :) я лишь нашел, ознакомился, установил, опробовал и поделился с сообществом. В результате очень облегчил себе работу отчасти анализа телефонной активности на нескольких серверах.
          • 0
            Не прибедняйтесь — Вы очень помогли этим обзором — разработчики молодцы, но не факт, что я сам нашел бы данный продукт.
  • 0
    Вот только Monast не выводит название очереди, и не сохраняет порядок Extensions внутри очереди как они указаны в freepbx. В Peer users не указывает заданное имя для extension, просто device
    • 0
      По поводу последнего — в каком случае не отображается имя для extension? В секции DAHDI выводит FXS Kewlstart 46, ISDN PRI 10, etc. В секции SIP выводит Full Caller ID — IT Department < 1132 >.
      • 0
        В Queues — отображается (но логично бы выводить и внутренний номер при наведении мыши), в Peers/Users — выводится только device без имени.
        По поводу очередей — очень не хватает расшифровки того что там показывает, очень всё это неинуитивно.
        — не видно где сейчас идёт исходящий звонок, а где входящий.
        — непонятно что делают звонки справа в Clients и почему в этот момент не всегда слева показывается ringing.
        — звонок принятый оператором (Answered) и номер звонящего — две отдельные несвязанные ячейки друг за другом, логичнее их объеденить одной рамкой а не двумя раздельными
        — не указан период, за который считаются Calls Taken, Completed.
        — нет average time talk, хотя у меня в 1.8.7 по queues show оно показывается в CLI
        — что такое In Use? Оператор звонит в этот момент? Но по правой клавише ничего не пишется чем он занят.
        — непонятно как пользоваться Spy. Что за цифру требует в этот момент окошко. Ввожу 1, Spy enabled но ничего не слышно из динамиков.

        Хочется более красивой расширенной статистики. Есть что-то похожее на asternic, но open source?
        • 0
          По поводу комнат конференций и очередей — у нас они не используются, потому на такие моменты не обращал внимания… но так или иначе — код Монаста открыт и успешно может быть доработан под свои нужды.
          Насчет Peers/Users — приведите скрин, пожалуйста. Попробуем выяснить в чем же причина.

          А по поводу Spy — в окне нужно ввести номер, который будет подключен для «прослушки». К примеру общаются клиент с менеджером, а супервизору (с внутренним номером 1020) необходимо прослушать разговор. Так вот имея необходимые права в Монасте он может ввести в окне Spy свой номер (1020), система наберет данный номер и подключит к выбранному разговору.
          >> Хочется более красивой расширенной статистики.
          Monast позиционирует как панель слежения за состоянием Asterisk в реальном времени и успешно с этой функцией справляется.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.