По следам прошедшей конференции AsterConf’2017 мы решили опубликовать несколько простых советов, которые оказались полезными участникам конференции.

Первый относится к использованию SQL запросов в системах, которые построены при помощи написания диалплана без применения графических оболочек вроде FreePBX. Для работы c SQL из диалплана чаще всего используют возможности модуля func_odbc. Однако часто оказывается неудобным то, что для каждого запрос а требуется редактирование отдельного файла. Ниже описание того, как этого избежать и задавать все запросы в диалплане.

Далее »

автор igorg

Совсем скоро должна появиться релизная версия Asterisk 15. В новой версии Asterisk Digium провели массивное изменение ядра системы, что вызвало отхождение от принципов нумерации и выпуска LTS релизов. Таким образом:

  • Asterisk 15 становится не-LTS релизом со сроком поддержки 2 года
  • Поддержка Asterisk 13 продляется до 2021 года

Основными нововведениями при этом являются:

  • Поддержка мульти-поточности в работе с RTP (в основном для WebRTC в chan_pjsip)
  • Внедрение API для абстракции при работе с SDP
  • Реализация спецификации BUDLE для передачи нескольких RTP потоков единым транспортом

Более подробный список изменений под катом.

Далее »

автор igorg

 

Браузеры идут вперед семимильными шагами, при этом складывается ситуация, когда обновление браузеров у клиента иногда требует обновления и инфраструктуры.

Мы с толкнулись с тем, что в нашей инфраструктуре не работают новые версии Chrome. Поиск по изменениям показал, что в в 52 версии Chrome перешли на использование только на использование ECDSA алгоритма при согласовании подключения DTLS. Но в версии openssl до 1.0.2 эти алгоритмы не поддерживаются. «Правильный» openssl на Ubuntu можно установить таким способом:

Проверить версию после установки:

После этого достаточно перезапустить freeswitch для работы с правильными версиями библиотеки openssl.

 

Оригинал: http://blog.iqtek.ru/?p=100

автор igorg

1280px-opus_bitratelatency_comparison-svg

Долгое время freeswitch обладал фактически эксклюзивной и первой реализацией кодека OPUS. Для Asterisk существовали решения на gihub, но они имели ряд недостатков — не имели возможности настройки через codecs.conf и не использовали информацию из SDP для своей работы.

Во время проведения Astercon 2016 было объявлено что для asterisk 13 и 14 выпущен официальный модуль кодека OPUS.

Далее »

автор igorg \\ теги: ,

Долгое время freeswitch обладал фактически эксклюзивной и первой реализацией кодека OPUS. Для Asterisk существовали решения на gihub, но они имели ряд недостатков — не имели возможности настройки через codecs.conf и не использовали информацию из SDP для своей работы.
Во время проведения As...

автор igorg \\ теги: ,

Я уже не первый год работаю с voipmonitor. Одна из основных метрик, которые рассчитывает voipmonitor — MOS на основе стандарта G.107, который учитывает сетевые параметры передаваемого RTP (потери пакетов, джиттер). Однако в сетях, где голос передается совместно в IP сетях и PSTN такой подход не даст адекватной оценки качества.

В voipmonitor начиная с 7 версии предусмотрено исполнение бинарного файла, который по сопоставлению эталонного звукового файла и файла, полученного из RTP, дает оценку по P.862 PESQ. Передо мной стояла задача сделать решение, которое позволит использовать другие решения для расчета MOS-подобных оценок.

Вот список шагов, необходимых для того, чтобы voipmonitor начал использовать настроенный mos-lqo бинарный файл:

  1. Необходимо настроить параметры mos_lqo_bin, mos_lqo и mos_lqo_ref в voipmonitor.conf. Если используется стандартный mos_lqo достаточно просто включить его использование mos_lqo=yes.
  2. Так как использование mos-lqo предполагает сравнение файла с эталоном, то оценки должны производиться только для узкого спектра вызовов, специально созданных какой-либо системой тестирования. для этого в БД в таблицы filter_ip и/ил filter_telnum добавляем записи, с указанием ip и маски в целочисленном виде, либо телефонный номер. Поле mos_lqo:
    • 0 — не производить вызов mos_lqo_bin
    • 1 — обрабатывать mos_lqo_bin RTP потоки у с указанный source IP
    • 2 — обрабатывать mos_lqo_bin RTP потоки у с указанный destination IP
    • 3 — обрабатывать и входящие и исходящие RTP с указанных IP адресов
  3. Вызов mos_lqo производится только если voipmonitor конвертирует RTP в WAV, поэтому в voipmonitor.conf необходимо указать опцию saveaudio=wav.

Настройка и написание оберток, позволило использовать вместо PESQ такие алгоритмы как AQuA и PVQA (который позволяет анализировать потери в качестве без наличия эталонного звукового файла).

автор igorg \\ теги: , , , , ,

В дополнение к описанным в официальном wiki проекта Kazoo требуются и некоторые другие пакеты. Полный список дополнительных пакетов для системы с уже установленным из RPM Kazoo выглядит так:

yum install libxslt zip unzip gcc libtool libstdc++-devel nc expat-devel libxml2-devel openssl-devel zlib-devel

автор igorg \\ теги: , ,

Для меня уже совершенно привычными являются интерфейсы на английском языке. Но большинству удобнее пользоваться великим и могучим. На одной из систем заметили что не срабытывает выбор языка во freepbx — просто при выборе языка перегружается интерфейс FreePBX, но язык интерфейса не меняется. Такая проблема может быть вызвана не работающим gettext модулем в php

1) Модуль может просто отсутствовать в системе

sudo apt-get install php-gettext

service apache2 restart

2) Проверьте что существует локаль ru_RU, именно ей, а не ru_RU.utf8 пытается воспользоваться FreePBX.

dpkg-reconfigure locales

service apache2 restart

автор igorg \\ теги: , ,

Vicidial — мощный opensource продукт для создание call-центров, обладающий, к сожалению, вполне ужасным интерфейсом.

По причине того, что имя звонящего передается в очень редких случаях, данная переменная при поступлении вызова в Vicidial сразу же используется для хранения идентификатора вызова. Чтобы сохранить имя для последующей обработки можно, например в контексте trunkinbound сделать запись такого вида и при необходимости получить имя из таблицы live_inbound_log:
exten => 1000000,1,AGI (agi-VDAD_inbound_calltime_check.agi,SomeIngroup-----NO-----${CALLERID (name)})
exten => 1000000,n,AGI (agi-DID_route.agi)
Интересующие вопросы относительно vicidial задавайте в комментариях.

автор igorg \\ теги: ,

Буквально заметка на полях. практически всегда приходится разделять исходящие вызовы по нескольким операторам и ограничивать внутренних абонентов. Поэтому важно правильно разделять исходящие вызовы в зависимости от номера. На всех устанавливаемых нами системах основные типы направлений примерно однотипны, курсивом комментарий:

1) Международные

  • 810XXXX. (международные номера не имеют фиксированной длинны, обычно такого формата достаточно для отделения международных направлений)
  • 833622XXXXX (Байконур)
  • 8840XXXXXXX (Абхазия)
  • 8[67]XXXXXXXXX (Казахстан)

2) Сотовые

  • 89XXXXXXXXX

Часто требуется разделить вызовы по региону или оператору, для этого мы используем собственное API для загрузки на АТС списка актуальных префиксов. Но вообще задача решается выборкой нужных операторов из базы Россвязи:  http://www.rossvyaz.ru/activity/num_resurs/registerNum/
Список сотовых номеров данного региона можно по-прежнему строить, а вот с выборкой по конкретному оператору сложнее:

  1. Операторы часто имеют различные наименования в разных регионах
  2. Хотя масштаб еще не большой, но MNP работает. Хотя и есть способы поиска реального оператора по номеру телефона.

4) Номера бесплатного доступа 8800

  • 8800[1-7]XXXXXX (Российские номера 8800)
  • 8804XXXXXXX (Тоже номера, на которые вызов бесплатен, остальные 880x номера запрещаем, так как там могут быть платные сервисы)

5) Номера в области

  • 8381[3-9]XXXXXX (на примере Омской области)

6) Городские номера

  • [2-9]XXXXX (шестизначная нумерация) или, например, [2-9]XXXXXX (для городов с семизначной нумерацией, можно уменьшить диапазон в зависимости от реально используемого) + предусмотреть варианты набора с кодом города
  • 849[589]XXXXXX (актуально в Москве)

5) Россия стационарные

  • 8[348]XXXXXXXXX (за исключением номеров из п.1)

Будучи педантичным, очень важно понимать какие номера бывают, по следующим причинам:

  1. Нужно начинать набор номера как только он был набран, чтобы пользователь по-возможности никогда не ждал таймаута или не был вынужден нажимать #;
  2. Нужно точно описать возможные варианты набираемых номеров, чтобы обезопасить себя от различных видов атак и злоупотреблений;
  3. Не давать пользователю набрать неправильный номер и стараться сразу сообщать об ошибке набора.

Надеюсь был полезен, если кому-то нужна информация о поиске реального оператора, обслуживающего номер, или, например есть желание использовать наше API — прошу в комментарии. Кстати была идея написать модуль для FreePBX, который бы учитывал сложные варианты (MNP, текущий регион) при вызове, но руки так и не дошли.

автор igorg