По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В 2013 году, вместе с бета – релизом Asterisk 12 астериск - комьюнити был представлен новый API, который получил гордое название - ARI (Asterisk REST Interface). Что это и как им пользоваться, если вы любите php - рассказываем в статье. Зачем Asterisk нужен новый API? Все мы привыкли, что Asterisk имеет два интерфейса: Asterisk Manager Interface (AMI) и Asterisk Gateway Interface (AGI). AMI это асинхронный интерфейс, который используется для управления вызовами, инициацией звонков и всем, что попадает под определение «call control». AGI, в свою очередь, предоставляет синхронный интерфейс манипуляции одним каналом, являясь своего рода «прослойкой» между диалпланом и внешними скриптами. Важно отметить, что на время выполнения, AGI блокирует поток. В связке, оба интерфейса неплохо справляются с задачами, связанными с различного рода манипуляциями с каналами и диалпланом Asterisk. Но разработка сложного и многоуровневого приложения может стать по настоящему трудной задачей для разработчика, в которой придется задействовать AGI и AMI одновременно. Именно в этот момент на помощь приходит ARI (Asterisk REST Interface). Отметим, что ARI не заменяет AGI или AMI. Новый интерфейс позволяет разработчикам заменить управление на уровне диалплана внешними приложениями (скриптами). Тем самым, ARI упрощает жизнь разработчикам бизнес – приложений, которые используют Asterisk в качестве коммуникационной платформы. ARI дает девелоперам высокоуровневый REST интерфейс, через который доступно управление базовыми операциями Asterisk, например, такими как каналы, мосты (бриджи), конечные устройства, управление медиа – потоками, записью разговоров и так далее. Информация об этих объектах передается в асинхронном режиме событиями JSON поверх WebSocket. Только представьте: раньше, чтобы овладеть подобным набором инструментов, вам необходимо было иметь навыки программирования на C и разработать свой собственный модуль и внедрить в Asterisk. С использованием ARI, приложения могут быть написаны на вашем любимом языке, будь то Python, Ruby, PHP или JavaScript! Для удобства, ниже мы привели библиотеки и ссылки на них для различных языков программирования: Библиотека Язык программирования Ресурс ari4java Java https://github.com/l3nz/ari4java ari-py Python https://github.com/asterisk/ari-py AsterNET.ARI C#/.NET https://asternetari.codeplex.com/ node-ari-client JavaScript (node) https://github.com/asterisk/node-ari-client phpari PHP http://www.phpari.org/ Подведем итог: новый интерфейс ARI дает новые возможности не только для Asterisk комьюнити, но и для разработчиков бизнес приложений. От слов к делу, переходим к настройке. Настройка phpari Поскольку ARI это технология, базирующаяся на WebSocket, первым делом необходимо внести некоторые настройки в файл http.conf, который находится в директории /etc/asterisk/: cd /etc/asterisk/ vim http.conf Приводим файл к следующему виду: [general] enabled = yes bindaddr = 127.0.0.1 Далее, «сетапим» файл ari.conf, открыв его командой vim ari.conf: [general] enabled = yes pretty = yes [имя_вашего_пользователя] type = user read_only = no password = пароль_для_пользователя В секции [имя_вашего_пользователя], укажите юзернейм, а в секции password его соответствующий пароль. Перегружаем Asterisk: asterisk –rv core restart now Теперь мы установим phpari. Установку будем производить с помощью composer: Если у вас не установлен composer, вы можете скачать его по этой ссылке. Открываем для редактирования файл composer.json и добавляем в него следующий код: { "require": { "php": ">=5.3.9", "educoder/pest": "1.0.0", "devristo/phpws": "dev-master", "greenfieldtech-nirs/phpari": "dev-master" } } После чего запускаем команду: composer install Необходимая библиотека будет загружена. Переходим в директорию /vendor/greenfieldtech-nirs/phpari и открываем для редактирования файл phpari.ini: cd /vendor/greenfieldtech-nirs/phpari vim phpari.ini Редактируем следующим образом: [general] debug=0 logfile=console ; #если хотите логировать ARI в консоль, то оставьте данное поле без изменений. Если хотите логировать в файл, то укажите полный путь к нему; [asterisk_ari] username= имя_вашего_пользователя password= пароль_для_пользователя host=IP_адрес_Asterisk port=8088 endpoint=/ari transport=ws ; #нешфированный транспорт, wss для шифрования; Отлично. Теперь давайте соберем простенький .php скрипт, который будет показывать активные каналы. Для этого, в директории, где у нас находится скачанная библиотека phpari и соответственно директория /vendor, создаем файл ari.php и наполяем его следующей конфигурацией: require_once "vendor/autoload.php"; $ariCon = new phpari(); print_r($ariCon->channels()->channel_list()); Сохраняем. Сделайте 1 активный вызов на вашем Asterisk (например, позвонив с софтфона на софтфон). Переходим в консоль, и даем команду на выполнение этого скрипта: php ari.php Если все сделано правильно, в консоли мы увидим JSON – ответ, в котором будут переданы параметры активного канала: context, exten, caller, accountcode и прочие. Как вызвать приложение? Вызвать приложение из диалплана очень просто. Для этого, необходимо использовать Stasis: exten => _XXXX,1,Stasis(ваше_приложение) Что именно умеет ARI? Кратко поговорим о том, какие именно операции умеет совершать ARI: Метод Путь Описание GET /channels/{channelId} Получить информацию о канале с channelId POST /channels/{channelId} Создать канал с указанным channelId DELETE /channels/{channelId} Удалить (Hang Up) канал POST /channels/{channelId}/continue Возврат в диалплан (выход из скрипта) POST /channels/{channelId}/continue Возврат в диалплан (выход из скрипта) POST /channels/{channelId}/answer Ответить на канал POST /channels/{channelId}/mute "Замьютить" канал DELETE /channels/{channelId}/mute "Снять мьют" с канала POST /channels/{channelId}/hold Поставить вызов на удержание DELETE /channels/{channelId}/hold Снять вызов с удержания POST /channels/{channelId}/play Воспроизвести медиа файл POST /channels/{channelId}/record Начать запись GET /bridges Лист всех активных мостов (бриджей) GET /bridges Лист всех активных мостов (бриджей) POST /bridges/{bridgeId}/addChannel Добавить канал к бриджу POST /bridges/{bridgeId}/removeChannel Удалить канал с бриджа GET /endpoints Список оконечных устройств GET /endpoints/{tech} Список оконечных устройств, которые функционируют по указанной технологии GET /endpoints/{tech}/{resource} Детальная информация по оконечному устройству GET /sounds Список звуков GET /sounds/{soundId} Список звуков
img
Да – да, CUCM умеет собирать CDR (Call Detail Record). А в статье мы покажем, как включить данный функционал, который по умолчанию, отключен. Включение CDR Подключаемся к интерфейсу Cisco Unified CM Administration: Переходим по пути System → Service Parameters и выбираем следующее: Server - 192.168.1.1 (Active), например. Тут мы выбираем ноду, на которой проведем работы. У вас, конечно, IP будет другой. А может и такой же :) Service - отметьте сервис Cisco CallManager (Active); Листаем на появившейся страницу параметры и находим сегмент System, в котором отмечаем вот что: CDR Enabled Flag * - True. Этим параметром мы говорим колл – менеджеру, создавать и хранить CDR – записи по каждому звонку, который пройдет через этот UCM; CDR Log Calls with Zero Duration Flag * - True. Включая этот параметр, мы говорим, чтобы сервер сохранял звонки, которые не состоялись, или длительность которых менее 1 секунды (это полезно для траблшутинга); Не забывайте сохранить изменения. Повторите данные процедуры для каждой ноды в кластере (если на этапе выбора в сегменте System → Service Parameters → Server у вас больше одного сервера). Дополнительная настройка После этого, давайте познакомимся с дополнительными параметрами. Для этого, в меню настройки нажмите на кнопку Advanced: Выставьте следующие параметры: Call Diagnostics Enabled - Enabled Only When CDR Enabled Flag is True. Параметр отвечает за включение так называемых Call Management Records (CMR), которые очень полезны при диагностике проблем и траблшутинге; Display FAC in CDR - True. Отображать ли Forced Authorization Code (FAC) в CDR записях. То есть, отображаться ли код доступа в CDR – записях. В целом, данный параметр зависит от ваших политик безопасности. Мы отображаем :); Show Line Group Member DN in finalCalledPartyNumber CDR Field - True. Если коротко – параметр в таком положении, будет показывать DN (directory number) человека, который ответил на звонок внутри группы, а не номер самой группы; Show Line Group Member Non Masked DN in finalCalledPartyNumber CDR Field: Required Field - по факту, почти тоже самое, что и выше; Переходим в интерфейс Cisco Unified Serviceability, переходим в раздел Tools → CDR Analysis and Reporting. Далее, во вкладке CDR можете воспользоваться поиском или выгрузкой данных. Enjoy :)
img
Эта серия статей подробно объясняет основные понятия, принципы и операции протокола маршрутизации RIP с примерами. Узнайте, как работает RIP (Routing Information Protocol) и как обновляет таблицу маршрутизации из широковещательного сообщения шаг за шагом. Маршрутизаторы используют таблицу маршрутизации для принятия решения о переадресации. Таблица маршрутизации содержит информацию о сетевых путях. Сетевой путь - это простой фрагмент информации, который говорит, какая сеть подключена к какому интерфейсу маршрутизатора. Всякий раз, когда маршрутизатор получает пакет данных, он ищет в таблице маршрутизации адрес назначения. Если маршрутизатор найдет запись сетевого пути для адреса назначения, он переадресует пакет из связанного интерфейса. Если маршрутизатор не найдет никакой записи для адреса назначения, он отбросит пакет. Существует два способа обновления таблицы маршрутизации: статический и динамический. В статическом методе мы должны обновить его вручную. В динамическом методе мы можем использовать протокол маршрутизации, который будет обновлять его автоматически. RIP - это самый простой протокол маршрутизации. В этой статье мы узнаем, как RIP обновляет таблицу маршрутизации. В протоколе RIP маршрутизаторы узнают о сетях назначения от соседних маршрутизаторов через процесс совместного использования. Маршрутизаторы, работающие по протоколу RIP, периодически транслируют настроенные сети со всех портов. Список маршрутизаторов обновит их таблицу маршрутизации на основе этой информации. Давайте посмотрим, как работает процесс RIP шаг за шагом. Следующий рисунок иллюстрирует простую сеть, работающую по протоколу маршрутизации RIP. Когда мы запускаем эту сеть, маршрутизаторы знают только о непосредственно подключенной сети. OFF1 знает, что сеть 10.0.0.0/8 подключена к порту F0/1, а сеть 192.168.1.252/30 подключена к порту S0/0. OFF2 знает, что сеть 192.168.1.252/30 подключена к порту S0/0, а сеть 192.168.1.248/30 подключена к порту S0/1. OFF3 знает, что сеть 20.0.0.0/8 подключена к порту F0/1, а сеть 192.168.1.248/30 подключена к порту S0/0. В отличие от статической маршрутизации, где мы должны настроить все маршруты вручную, в динамической маршрутизации все, что нам нужно сделать, это просто сообщить протоколу маршрутизации, какой маршрут мы хотим объявить. А остальное будет сделано автоматически, запустив динамический протокол. В нашей сети мы используем протокол маршрутизации RIP, поэтому он будет обрабатываться RIP. Иногда RIP также известен как маршрутизация прослушки. Потому что в этом протоколе маршрутизации маршрутизаторы изучают информацию о маршрутизации от непосредственно подключенных соседей, а эти соседи учатся от других соседних маршрутизаторов. Протокол RIP будет совместно использовать настроенные маршруты в сети через широковещательные передачи. Эти широковещательные передачи называются обновлениями маршрутизации. Прослушивающие маршрутизаторы обновят свою таблицу маршрутизации на основе этих обновлений. OFF1 будет слушать трансляцию из OFF2. От OFF2, он узнает об одной новой сети 192.168.1.248/30 OFF2 будет слушать две передачи с OFF1 и OFF3. Из OFF1 он узнает о 10.0.0.0/8 и от OFF3 он узнает о сети 20.0.0.0/8. OFF3 будет слушать трансляцию из OFF2. От OFF2 он узнает о сети 192.168.1.252. Маршрутизатор выполняет несколько измерений, обрабатывая и помещая новую информацию о маршруте в таблицу маршрутизации. Мы объясним их позже в этой статье. Если маршрутизатор обнаружит новый маршрут в обновлении, он поместит его в таблицу маршрутизации. Через 30 секунд (интервал времени по умолчанию между двумя обновлениями маршрутизации) все маршрутизаторы снова будут транслировать свои таблицы маршрутизации с обновленной информацией. В данный момент времени: OFF1 будет транслироваться для 10.0.0.0/8, 192.168.1.248/30 и 192.168.1.252/30. OFF2 будет транслировать для 10.0.0.0/8, 20.0.0.0/8, 192.168.1.248/30 и 192.168.1.252/30. OFF3 будет транслироваться для 20.0.0.0/8, 192.168.1.248/30 и 192.168.1.252/30. OFF1 узнает о сети 20.0.0.0/8 из трансляции OFF2. У OFF2 нет ничего, чтобы обновить из трансляции OFF1 и OFF2. OFF3 узнает о сети 10.0.0.0/8 из трансляции OFF2. Через 30 секунд маршрутизатор снова будет транслировать новую информацию о маршрутизации. На этот раз маршрутизаторам нечего обновлять. Эта стадия называется конвергенцией. Конвергенция Конвергенция - это термин, который относится к времени, затраченному всеми маршрутизаторами на понимание текущей топологии сети. Метрика протокола маршрутизации RIP У нас может быть два или более путей для целевой сети. В этой ситуации RIP использует измерение, называемое метрикой, чтобы определить наилучший путь для целевой сети. RIP использует подсчет прыжков как метрику. Прыжки - это количество маршрутизаторов, необходимое для достижения целевой сети. Например, в приведенной выше сети OFF1 есть два маршрута для достижения сети 20.0.0.0/8. Маршрут 1: - через OFF3 [на интерфейсе S0/1]. С прыжком - один. Маршрут 2: - через OFF2-OFF3 [на интерфейсе S0/0]. С прыжком - два. Итак, по какому маршруту OFF1 доберется до места назначения? Маршрут 1 имеет один прыжок, в то время как маршрут 2 имеет два прыжка. Маршрут 1 имеет меньшее количество переходов, поэтому он будет помещен в таблицу маршрутизации. Резюме Протокол маршрутизации RIP использует локальную широковещательную передачу для обмена информацией о маршрутизации. RIP транслирует обновления маршрутизации каждые 30 секунд, независимо от того, изменилось что-то в сети или нет. По истечении 30 секунд маршрутизаторы, работающие по протоколу RIP, будут транслировать информацию о своей маршрутизации на любые устройства, подключенные к их интерфейсам. Перед отправкой обновлений маршрутизации маршрутизатор добавляет метрику инициализации ко всем маршрутам, которые он имеет, и увеличивает метрику входящих маршрутов в объявлениях, чтобы маршрутизатор листинга мог узнать, как далеко находится сеть назначения. При отправке широковещательных передач RIP не заботится о том, кто слушает эти широковещательные обновления или нет. После отправки широковещательного сообщения RIP не заботится о том, получили ли соседи эти широковещательные обновления или нет. Когда маршрутизатор получает обновления маршрутизации, он сравнивает их с маршрутами, которые уже есть в его таблице маршрутизации. Если обновление содержит информацию о маршруте, которая недоступна в его таблице маршрутизации, маршрутизатор будет рассматривать этот маршрут как новый маршрут. Маршрутизатор добавит все новые маршруты в таблицу маршрутизации перед обновлением существующего. Если обновление содержит лучшую информацию для любого существующего маршрута, маршрутизатор заменит старую запись новым маршрутом. Если обновление содержит худшую информацию для любого существующего маршрута, маршрутизатор проигнорирует ее. Если обновление содержит точно такую же информацию о любом существующем маршруте, маршрутизатор сбросит таймер для этой записи в таблице маршрутизации Далее, почитайте нашу статью о функциях и терминологии RIP.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59