Я уже не первый год работаю с 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 \\ теги: , , , , ,

ОЧень хорошо что традиция проводить конференции становится ежегодной. В этом году 22 августа в Москве состоится уже егодная конференция. На этот раз длительность — один день и копеечная стоимость участия. Официальный сайт мероприятия: http://asterconf.ru

Рекомендую посетить, хотя сам присутствовать и не смогу, вот часть программы:

  • Сергей Грушко «Внедрение систем IP-телефонии в организации»
  • Николай Шакин «CTI-приложения, как новая модель офисных коммуникаций»
  • Михаил Халимоненко «Поведенческий анализ операторов  и эффективный роутинг вызовов в колл-центре».
  • Александр Аникин «Релиз Asterisk 13 SIP-стэк. PJSIP Спешить ли с переходом?»
  • Анна Мжельская «Примеры интеграции Asteriskи 1С»
  • Александр Ключников «Asteriskmobile: интеграцияофисной IP-АТС и мобильного телефона»
  • Роман Козлов «Интеграция Asterisk и Service Desk (GLPI) для ускорения IT-отдела»
  • Олег Цяпа «Обеспечение качественной передачиголоса с помощью QoS.»

автор 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 \\ теги: ,

Сегодня занимались очень полезным и занимательным занятием — обновляли временные зоны на всех серверах, чтобы они не улетели в будущее в воскресенье 26 октября 2014 при переходе на зимнее время. Спасибо всем законодателям за полезно проведенное время на благо ВВП нашей страны.

На паре серверов у нас еще трудится Debian Lenny, пришлось собрать пакет самостоятельно, если вам нужно — можно скачать. Установка — dpkg -i

Для остальных поддерживаемых систем вполне работают штатные методы обновления ОС. Много полезных советов на Хабре.

автор 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

Всем читателям, я думаю, известно что asterisk сейчас это не просто АТС, а коммуникационная платформа. Основываясь на гибкости Asterisk построено уже множество продуктов, которые, как правило делятся на две категории и два подхода:

  1. Перенимаем гибкость астериска, строим мега-комбайн с большим набором опций настроек. Цена — большая сложность в освоении (как пример FreePBX).
  2. «Закрываем» открытый asterisk внутри продукта и делаем продукт готовым к употреблению с минимумом необходимых настроек. Обычно такие продукты не бесплатны и не являются открытыми в полном понимании этого слова (если брать пример АТС — Askozia).

Сегодня поговорим о call-центрах. Как пример первого подхода я могу привести продукт, с которым мы давно работаем — call-центр Vicidial (который имеет на редкость недружелюбный интерфейс). Примером второго подхода — call центр от компании из Санкт-Петербурга  - Линия24. Обзор этого продукта более года назад попросил написать Вадим Марков, с которым мы уже знакомы длительное время, кроме того некоторые из наших клиентов по нашей рекомендации купили и уже длительное время являются пользователями этого продукта. Набор ссылок для ознакомления:

Далее »

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

Пока работаю над завершением пары крупных разработок, вот пример с полей. Если у вас на сервере работавшем годы внезапно перестал работать поток:
  1. Поднятый на карте Digium
  2. Вы ничего не меняли
  3. На другой стороне ничего не меняли
  4. Индикация внешне в порядке

При этом в логах по pri debug span 1 что-то вроде:

PRI Span: 1 TEI=0 MDL-ERROR (G): T200 expired N200 times sending SABME in state 5 (Awaiting establishment)
PRI Span: 1 Changing from state 5 (Awaiting establishment) to 4 (TEI assigned)
PRI Span: 1 TEI=0 DL event: Q931_DL_EVENT_DL_RELEASE_IND (3)
PRI Span: 1 SAPI/TEI=0/0 Kick starting link
PRI Span: 1 TEI=0 Sending SABME
PRI Span: 1 Changing from state 4 (TEI assigned) to 5 (Awaiting establishment)
PRI Span: 1 TEI=0 Sending SABME
PRI Span: 1 TEI=0 Sending SABME
PRI Span: 1 TEI=0 Sending SABME
У вас сдохла плата, меняйте. :)

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

Бесспорно, самый популярный бесплатный web-интерфейс для АТС на базе asterisk — FreePBX. И в общем плюсом данного продукта являются является регулярные обновления продукта. Например, произошедшее не так давно (в глобально масштабе времени) обновление до версии 2.10 — это хорошо. Однако за большим количеством изменений, в том числе и в настройках авторы FreePBX не очень аккуратно реализовали миграцию настроек записи разговоров в модуле Extensions.

Если у вас перед обновлением было настроено достаточно большое количество записываемых внутренних номеров ( в моем случае около 400 внутренних номеров), ручная их корректировка станет кошмаром. После обновления настройки записи разговора становятся неактивными и записи разговоров не ведутся.

Дело в том, что ранее запись разговоров разделялась только на входящие и сходящие разговоры. В 2.10 добавились дополнительные градации и изменился формат хранения записей о настройках записи разговоров в astdb. Для того чтобы привести astdb к нужному вижу:

  1. Нужно удалить  старые записи вида AMPUSER/100/recording и содержания out=Always|in=Never
  2. Создать 6 новых записей в astdb

Эту задачу лучше автоматизировать, пример выкладываю. Постараюсь сделанные на коленки скрипты в дальнейшем выкладывать.

Скачать пример решения на PHP

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