По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
![img](/static/images/general/icons/voip_how-to.png)
Желание использовать данные с внешних сервисов это вполне обычная практика. Так как многие из этих сервисов доступны по HTTP(S) (REST API, например), то в этой статье мы хотим показать простой способ обращения к этим сервисам по cURL и обработку данных в случае, если сервер вернет JSON. Все взаимодействия будут выполняться из диалплана.
Простой cURL запрос
В диалплане Asterisk существует функция CURL, которая позволяет получить содержимое WEB или FTP страницы. Синтаксис запроса следующий:
CURL(url,post-data)
url - URL, к которому мы будем выполнять обращение;
post-data - по умолчанию будет выполнен GET – запрос. Если в данном параметре будут указаны различные значения, то будет выполнен POST запрос с указанными в переменной данными;
Например:
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest?num=84991234567)})
Здесь мы выполним GET запрос по указанному URL, а результат сохраним в переменной C_RESULT.
Использование HTTPS в запросах
Иногда, HTTPS запросы могут не срабатывать, так как удаленная сторона будет проверять наш SSL – сертификат. Если поставить параметр ssl_verifypeer=0, то такой проверки не будет:
same => n,Set(CURLOPT(ssl_verifypeer)=0)
Как воспользоваться этим в диалплане?
Легко. С помощью функции GotoIf мы можем определить действие, которое отработает на базе результата cURL:
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest?num=84991234567)})
same => n,GotoIf($["${C_RESULT}" = "1"]?res1:res2)
same => n(res1),Verbose(CURL Result = 1)
same => n,Hangup
same => n(res2),Verbose(CURL Result != 1)
same => n,Hangup
Указанный код отправит GET - запрос на rest, в котором в параметре num передаст номер звонящего (можно указать соответствующую переменную диалплана Asterisk). В случае, если результатом выполнения запроса будет 1, то мы перейдем к выполнению шага res1, а противоположном случае, res2.
res_json для обработки JSON ответов
На самом деле, для API, является обычной практикой возврат ответа в виде JSON. Поэтому, нам следует преобразовать эти данные перед обработкой их. Для этого мы воспользуемся модулем res_json из JSON библиотеки, который создан для расширения базовых возможностей диалплана с точки зрения обработки JSON.
Почитайте материал об установке данного модуля по этой ссылке.
exten => _X.,1,Set(C_RESULT=${CURL(//merionet.ru/rest.json)})
same => n,Set(result=${JSONELEMENT(C_RESULT, result/somefield)})
same => n,GotoIf($["${result}" = "1"]?res1:res2)
same => n(res1),Verbose(CURL Result = 1)
same => n,Hangup
same => n(res2),Verbose(CURL Result != 1)
same => n,Hangup
Для теста, создайте у себя на web – сервере файл rest.json со следующим содержанием:
{
"result": {
"somefield": 1
}
}
![img](/static/images/general/icons/networks_theory.png)
Перед тем как начать, почитайте материал про топологию сетей.
Обнаружение соседей позволяет плоскости управления узнать о топологии сети, но как узнать информацию о достижимых пунктах назначения? На рисунке 8 показано, как маршрутизатор D узнает о хостах A, B и C?
Существует два широких класса решений этой проблемы - реактивные и упреждающие, которые обсуждаются в следующих статьях.
Реактивное изучение
На рисунке 8 предположим, что хост A только что был включен, а сеть использует только динамическое обучение на основе передаваемого трафика данных. Как маршрутизатор D может узнать об этом недавно подключенном хосте? Одна из возможностей для A - просто начать отправлять пакеты. Например, если A вручную настроен на отправку всех пакетов по назначению, он не знает, как достичь к D, A должен отправить в хотя бы один пакет, чтобы D обнаружил его существование. Узнав A, D может кэшировать любую релевантную информацию на некоторое время - обычно до тех пор, пока A, кажется, отправляет трафик. Если A не отправляет трафик в течение некоторого времени, D может рассчитать запись для A в своем локальном кэше.
Этот процесс обнаружения достижимости, основанный на фактическом потоке трафика, является реактивным открытием. С точки зрения сложности, реактивное обнаружение торгует оптимальным потоком трафика против информации, известной и потенциально переносимой в плоскости управления.
Потребуется некоторое время, чтобы сработали механизмы реактивного обнаружения, то есть чтобы D узнал о существовании A, как только хост начнет посылать пакеты. Например, если хост F начинает посылать трафик в сторону а в тот момент, когда A включен, трафик может быть перенаправлен через сеть на D, но D не будет иметь информации, необходимой для пересылки трафика на канал, а следовательно, и на A. В течение времени между включением хоста A и обнаружением его существования пакеты будут отброшены-ситуация, которая будет казаться F в худшем случае сбоем сети и некоторым дополнительным джиттером (или, возможно, непредсказуемой реакцией по всей сети) в лучшем случае.
Кэшированные записи со временем должны быть отключены. Обычно для этого требуется сбалансировать ряд факторов, включая размер кэша, объем кэшируемой информации об устройстве и частоту использования записи кэша в течение некоторого прошедшего периода времени.
Время ожидания этой кэшированной информации и любой риск безопасности какого-либо другого устройства, использующего устаревшую информацию, являются основой для атаки. Например, если A перемещает свое соединение с D на E, информация, которую D узнал об A, останется в кэше D в течение некоторого времени. В течение этого времени, если другое устройство подключается к сети к D, оно может выдавать себя за A. Чем дольше действительна кэшированная информация, тем больше вероятность для выполнения этого типа атаки.
Упреждающее изучение
Некоторая информация о доступности может быть изучена заранее, что означает, что маршрутизатору не нужно ждать, пока подключенный хост начнет отправлять трафик, чтобы узнать об этом. Эта возможность имеет тенденцию быть важной в средах, где хосты могут быть очень мобильными; например, в структуре центра обработки данных, где виртуальные машины могут перемещаться между физическими устройствами, сохраняя свой адрес или другую идентифицирующую информацию, или в сетях, которые поддерживают беспроводные устройства, такие как мобильные телефоны. Здесь описаны четыре широко используемых способа упреждающего изучения информации о доступности:
Протокол обнаружения соседей может выполняться между граничными сетевыми узлами (или устройствами) и подключенными хостами. Информация, полученная из такого протокола обнаружения соседей, может затем использоваться для введения информации о доступности в плоскость управления. Хотя протоколы обнаружения соседей широко используются, информация, полученная через эти протоколы, не используется широко для внедрения информации о доступности в плоскость управления.
Информацию о доступности можно получить через конфигурацию устройства. Почти все сетевые устройства (например, маршрутизаторы) будут иметь доступные адреса, настроенные или обнаруженные на всех интерфейсах, обращенных к хосту. Затем сетевые устройства могут объявлять эти подключенные интерфейсы как достижимые места назначения. В этой ситуации доступным местом назначения является канал (или провод), сеть или подсеть, а не отдельные узлы. Это наиболее распространенный способ получения маршрутизаторами информации о доступности сетевого уровня.
Хосты могут зарегистрироваться в службе идентификации. В некоторых системах служба (централизованная или распределенная) отслеживает, где подключены хосты, включая такую информацию, как маршрутизатор первого прыжка, через который должен быть отправлен трафик, чтобы достичь их, сопоставление имени с адресом, услуги, которые каждый хост способен предоставить, услуги, которые каждый хост ищет и/или использует, и другую информацию. Службы идентификации распространены, хотя они не всегда хорошо видны сетевым инженерам. Такие системы очень распространены в высокомобильных средах, таких как беспроводные сети, ориентированные на потребителя.
Плоскость управления может извлекать информацию из системы управления адресами, если она развернута по всей сети. Однако это очень необычное решение. Большая часть взаимодействия между плоскостью управления и системами управления адресами будет осуществляться через локальную конфигурацию устройства; система управления адресами назначает адрес интерфейсу, а плоскость управления выбирает эту конфигурацию интерфейса для объявления в качестве достижимого назначения.
Объявление достижимости и топология
После изучения информации о топологии и доступности плоскость управления должна распространить эту информацию по сети. Хотя метод, используемый для объявления этой информации, в некоторой степени зависит от механизма, используемого для расчета путей без петель (поскольку какая информация требуется, где рассчитывать пути без петель, будет варьироваться в зависимости от того, как эти пути вычисляются), существуют некоторые общие проблемы и решения, которые будут применяться ко всем возможным системам. Основные проблемы заключаются в том, чтобы решить, когда объявлять о доступности и надежной передаче информации по сети.
Решение, когда объявлять достижимость и топологию
Когда плоскость управления должна объявлять информацию о топологии и доступности? Очевидным ответом может быть "когда это будет изучено", но очевидный ответ часто оказывается неправильным. Определение того, когда объявлять информацию, на самом деле включает в себя тщательный баланс между оптимальной производительностью сети и управлением объемом состояния плоскости управления. Рисунок 9 будет использован для иллюстрации.
Предположим, хосты A и F отправляют данные друг другу почти постоянно, но B, G и H вообще не отправляют трафик в течение некоторого длительного периода. В этой ситуации возникают два очевидных вопроса:
Хотя для маршрутизатора C может иметь смысл поддерживать информацию о доступности для B, почему D и E должны поддерживать эту информацию?
Почему маршрутизатор E должен поддерживать информацию о доступности хоста A?
С точки зрения сложности существует прямой компромисс между объемом информации, передаваемой и удерживаемой в плоскости управления, и способностью сети быстро принимать и пересылать трафик. Рассматривая первый вопрос, например, компромисс выглядит как способность C отправлять трафик из B в G при его получении по сравнению с C, поддерживающим меньше информации в своих таблицах пересылки, но требующимся для получения информации, необходимой для пересылки трафика через некоторый механизм при получении пакетов, которые должны быть переадресованы. Существует три общих решения этой проблемы.
Проактивная плоскость управления: плоскость управления может проактивно обнаруживать топологию, вычислять набор путей без петель через сеть и объявлять информацию о достижимости.
Упреждающее обнаружение топологии с реактивной достижимостью: плоскость управления может проактивно обнаруживать топологию и рассчитывать набор путей без петель. Однако плоскость управления может ждать, пока информация о доступности не потребуется для пересылки пакетов, прежде чем обнаруживать и / или объявлять о доступности.
Реактивная плоскость управления: плоскость управления может реактивно обнаруживать топологию, вычислять набор путей без петель через сеть (обычно для каждого пункта назначения) и объявлять информацию о доступности.
Если C изучает, сохраняет и распределяет информацию о доступности проактивно или в этой сети работает проактивная плоскость управления, то новые потоки трафика могут перенаправляться через сеть без каких-либо задержек. Если показанные устройства работают с реактивной плоскостью управления, C будет:
Подождите, пока первый пакет в потоке не направится к G (к примеру)
Откройте путь к G с помощью некоторого механизма
Установите путь локально
Начать пересылку трафика в сторону G
Тот же процесс должен быть выполнен в D для трафика, перенаправляемого к A от G и F (помните, что потоки почти всегда двунаправленные). Пока плоскость управления изучает путь к месту назначения, трафик (почти всегда) отбрасывается, потому что сетевые устройства не имеют никакой информации о пересылке для этого достижимого места назначения (с точки зрения сетевого устройства достижимый пункт назначения не существует). Время, необходимое для обнаружения и создания правильной информации о пересылке, может составлять от нескольких сотен миллисекунд до нескольких секунд. В это время хост и приложения не будут знать, будет ли соединение в конечном итоге установлено, или если место назначения просто недоступно.
Плоскости управления можно в целом разделить на:
Проактивные системы объявляют информацию о доступности по всей сети до того, как она понадобится. Другими словами, проактивные плоскости управления хранят информацию о доступности для каждого пункта назначения, установленного на каждом сетевом устройстве, независимо от того, используется эта информация или нет. Проактивные системы увеличивают количество состояний, которые передаются и хранятся на уровне управления, чтобы сделать сеть более прозрачной для хостов или, скорее, более оптимальной для краткосрочных и чувствительных ко времени потоков.
Реактивные системы ждут, пока информация о пересылке не потребуется для ее получения, или, скорее, они реагируют на события в плоскости данных для создания информации плоскости управления. Реактивные системы уменьшают количество состояний, передаваемых на уровне управления, делая сеть менее отзывчивой к приложениям и менее оптимальной для кратковременных или чувствительных ко времени потоков.
Как и все компромиссы в сетевой инженерии, описанные здесь два варианта, не являются исключительными. Можно реализовать плоскость управления, содержащую некоторые проактивные и некоторые реактивные элементы. Например, можно построить плоскость управления, которая имеет минимальные объемы информации о доступности, описывающей довольно неоптимальные пути через сеть, но которая может обнаруживать более оптимальные пути, если обнаруживается более длительный или чувствительный к качеству обслуживания поток.
Что почитать дальше? Советуем материал про реактивное и упреждающее распределение достижимости в сетях.
![img](/static/images/general/icons/voip_how-to.png)
Спешим рассказать тебе дорогой читатель о том, как установить бесплатный Open Source, который поможет в организации кол-центра (Call Center). Речь пойдёт о решении GoAutoDial. В дальнейшем, планируем дополнить цикл статей о нём обзором, настройкой и примерами использования.
/p>
Как заявляет разработчик на своём сайте, GoAutoDial – это open source продукт, сочетающий в себе функционал предиктивного дайлера и IVR/ACD система на базе ОС CentOS, предназначенная для организации работы кол-центра. В качестве, собственно, системы для совершения звонков, «под капотом» GoAutoDial находится Asterisk версии 1.8.
Установка
В зависимости от того, какую систему Вы используете (32 или 64-бит), скачайте http://www.goautodial.org/projects/goautodialce последнюю версию образа GoAutoDial CE 3.3 с сайта разработчика:
Запишите данный образ на диск или же загрузите на виртуальную машину и настройте свой сервер так, чтобы он загружался с диска с образом.
Перед дальнейшей установкой, убедитесь, что сервер подключен к сети. Запустите сервер с GoAutoDial и нажмите Enter, когда увидите следующее окно:
Далее Вам будет предложено ввести пароль для пользователя root:
После чего начнётся процесс установки. У нас он занял всего на всего 4 минуты. Однако, длительность установки будет зависеть от технических характеристик сервера.
Когда процесс установки завершится, Вы увидите вот такое окно и предложение выполнить перезагрузку сервера. Жмём на кнопку Reboot:
На данном этапе, следует вытащить установочный диск из дисковода сервера или виртуального дисковода, если Вы устанавливаете GoAutoDial на вирутальную машину.
После перезагрузки, вам будет предложено подключиться к консоли сервера, для этого введите реквизиты доступа пользователя root, которые вводили на начальном этапе установки. После успешной авторизации, Вы увидите сообщение, в котором будут указаны данные для подключения к web-интерфейсу GoAutoDial, его IP-адрес, который он получил по DHCP, а также логин и пароль администратора системы. На данном этапе, рекомендуется сделать полный апдейт сервера, для этого введите команду yum update -y
Но поскольку система у нас шла с CentOS 5, который уже EOL, то мы получим ошибки следующего вида:
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/
removing mirrorlist with no valid mirrors: /var/cache/yum/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
А чтобы от них избавиться, введите следующие команды:
Внимание! Если в процессе ввода команд возникнут ошибки No such file or directory, то просто создайте те директории, на которые он будет ругаться и повторите ввод команды. Если вы используете 32-битную систему, то замените часть командыx86_64 на i386
# echo "http://vault.centos.org/5.11/os/x86_64/" > /var/cache/yum/base/mirrorlist.txt
# echo "http://vault.centos.org/5.11/extras/x86_64/" > /var/cache/yum/extras/mirrorlist.txt
# echo "http://vault.centos.org/5.11/updates/x86_64/" > /var/cache/yum/updates/mirrorlist.txt
Далее вводим yum makecache и повторяем ввод yum update -y, который на этот раз должен удачно сработать и запустить обновление системы.
Чтобы установить статический IP адрес, сконфигурировать DNS, настроить Firewall и автоматический запуск сервисов, а также установить настройки часовых поясов, введите команду setup в консоли. Перед Вами откроется графический интерфейс следующего вида:
После любых изменений, выполненных в данном интерфейсе, рекомендуется выполнить перезапуск сервисов service mysqld restart и service httpd restart.
Наконец, можно открыть любой браузер и подключиться к web-интерфейсу администратора GoAutoDial. Для этого введите IP-адрес из сообщения после первого подключения к консоли или же, если вы установили статический IP-адрес, то введите его в адресную строку браузера.
Пароль и логин по умолчанию для подключения к web-интерфейсу администратора - admin/ goautodial.