По следам прошедшей конференции 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

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 \\ теги: ,

Для меня уже совершенно привычными являются интерфейсы на английском языке. Но большинству удобнее пользоваться великим и могучим. На одной из систем заметили что не срабытывает выбор языка во 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

Всем читателям, я думаю, известно что 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 \\ теги: , , ,