18.09.2018

asterisk freepbx wss webrtc issue

Команда для проверки установления TLS соединения, показывает информацию о сертификате и ошибки. 

openssl s_client -connect xxx.xxx.xxx.xxx:8089 -bugs

ошибка на астериске выдавала:

TLS non-recoverable I/O error occurred: error:00000005:lib(0):func(0):DH lib, System call EOF

Также в

Оказалось, просто истёк сертификат:

verify error:num=10:certificate has expired

но в через ssldump Этого не увидеть, там будет просто “S>C Alert” хотя абсолютно точно можно было посмотреть информацию о сертификате и понять это:

openssl x509 -in certificate.crt -text -noout

11.09.2018

Как Астериск распределяет входящие звонки:

link to original

link to original answer

Incoming SIP Connections When Asterisk receives an incoming SIP call, the SIP Channel Module

  • first tries to find a [user] section matching the caller name (From: username),
  • then tries to find a [peer] section matching the caller’s IP address.

If no matching user or peer is found, the call is sent to the context defined in the [general] section of sip.conf.sip.conf.

24.06.2018

скорость перерегистрации телефонов на asterisk issabel

через веб интерфес добавляешь в sip_general_custom.conf:

defaultexpiry=30
minexpiry=20
maxexpiry=40

таким образом если телефон настроен на 3600, то время будет уменьшено до 40 секунд.

25.04.2018

AWK ASTERISK CSV

Получить все звонки длительностью болье 3900 секунд.

awk ‘{FS=”,”; if ($16 > 3900) print $0}’ Master.csv > long

28.03.2018

Репликация таблиц в postgres 9.5 и выше

Для репликации таблиц в постгресе я использовал pglogical, который на первый взгляд может показаться не нужной надстройкой в вопросе репликации.
Однако, в процессе сравнения инструментов для репликации а, также при попытки реализовать её, я обнаружил, что pglogical очень простой способ реплицировать несколько таблиц в базе данных постгрес.

итак, описание установки исключительно полезное и находится здесь:

Моя задача состояла в том, что есть основная база данных постгрес к которой подключаются астериски, и используют ее для realtime, но не только, еще и скрипты на этих астерисках спрашивают при каждом звонке информацию о балансах, маршрутах, стоимости звонков.

А поскольку астерисков много а БД одна и еще находится далеко поэтому network latency > 120ms. поэтому я создал кеширующий несколько таблиц сервер. скорость репликации отличная, проблем не замечено.

27.11.2017

High load. Высокая нагрузка на сервер Астериск.

В рамках проекта с высокой нагрузкой нужно было решить проблему, описание которой звучит так: После 360 секунд вызовы переставали попадать в биллинг. Первонаперво была выяснена причина это отсутствие некоторых переменных, получаемых через AGI интерфейс php скриптом. При этом, если использовать AGI то такой проблемы не наблюдалось.
В нашем случае используется FASTAGI и связка ASterisk, xinetd, phpagi-fastagi.php, myscript.php.

Поиск решений занял несколько дней, потому, что нагрузка на сервер была высокой итак: 1. Обнаружили что mysript.php не получает значение переменной DIALSTATUS после выполнения команды DIAL. И поиск в интернете ничего не давал, пока я не набрел на собственно код phpagi библиотеки на sourceforge.net. (https://sourceforge.net/p/phpagi)
И в багтреке были прикреплены несколько вопросов именно по поводу переменной DIALSTATUS. Но комментиариев с решением под ними не было, а были они в “обсуждениях”, вот здесь: https://sourceforge.net/p/phpagi/discussion/366892/thread/5a4c09f0/

В двух словах, phpagi Общается с асетриском через потоки как будто пишет и читает из файла строки, и вот какое дело, иногда когда скрипт читает данные из потока он получает толи пустые строки толи что, и не может получить значение переменной, хотя по agi debug четко видно, переменная передается скрипту.

Было два решения которые предложила система, это а) повторить запрос переменной несколько раз, пример:
function get_var($agi_in, $value)
{
$temp = $agi_in->get_variable($value);
$temp = $agi_in->get_variable($value);
$temp = $agi_in->get_variable($value);
$temp = $temp;
$agi_in->verbose($value." :".$temp);
return $temp;
}

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

function evaluate($command)
{
//clear the buffer
stream_set_blocking($this->in,0);
do {
$line = fgets($this->in);
} while ($line);
stream_set_blocking($this->in,1);

Всем пока.

10.06.2017

SIPP Тестирование Asterisk

Решил провести тестирование Астериска на предмет максимального количества звонков.
Сразу скажу, у меня Астериск 1.4 и я просто посылаю на эхотест его, примеры эхотеста в астериска в sip.conf есть.

Чтобы провести тестирование нагрузки нам понадобится sipp

  1. yum install sipp
  2. копируем в локальный каталог сценарий с uac_pcap.xml из документации sipp
  3. копируем pcap файлы для астериск в каталог pcap текущей папки
  4. подбираем нужные параметры для sipp и должно работать

Здесь я опишу только 4 пункт:

в моем случае конфигурация рабочая выглядит так:

sipp -sf uac_pcap.xml -r 1 -mi 111.111.111.111 -i 111.111.111.111 -s 1005 222.222.222.222 -trace_msg -rtp_echo -d 5000

где
111.111.111.111 – внешний интерфейс вашей машины
222.222.222.222 – адрес астериска
1005 – номер для эхотеста
-d 5000 – пауза в 5 секунд (опционально)
и все погнали, в моей конфигурации сети, без особых проблем астериск успевает обслужить 50 вызовов в секунду и примерно 500 одновременных соединений, потом начинаются ретрансмиты сообщений.

16.08.2015

SOX. WAV. ASTERISK. BATCH. Конвертнуть файлы для астериска.

Привет!

Дали wavки для заливки на астериск, если честно понятия не имею что там и как устроено в астере, но Астериск сам предлоагает сервис для конвертации WAV файлов во все нужные ему форматы. при помощи CLI “file convert”.

1. WAV нужно преобразовать в 8000 Khz и 1 канал, делается это командой: “sox input.wav -c 1 -b 8000 outout.wav”

лично я не смог потратить время с делать одной командой конвертацию файлов в каталоге поэтому поступил тупейшим образом: ls -a *.wav

скопировал результат в файлик, там произвел замену при помощи регулярных выражений например из строчки: 1.wav я получил

sox  1.wav -r 8000 -c 1 new/1.wav

и просто выполнил файлик… таким образом в каталоге new образовались уже готовые, для астериска файлы.

2.далее я создаю файлик с командами типа ” asterisk -x “file convert    transfering.wav           res/transfering.g729”

и все, в каталоге res получаются файлики с нужными кодеками. Астериск сам понимает в какой кодек надо перекинуть файл, если вы указывается расширение. В моем случае это g729.

Кодеки должны присутствовать и быть активными конечно.

Бай.

1.04.2015

Opensips. NAT. Port. Asterisk.

Почти день потратил на то чтобы понять почему при исходящем звонке нет звука.

Система такая:

Client A ( local IP) —> Router(TP-Link) —-> Opensips (NAT_HELPER) —-> Asterisk (1.8) (A2Billing) —–> Carrier

По SIP trace все гладко, порты, IP адреса, все подменяется просто отлично но аудио нет. Не слышно абонента.

Оказывается при выходе с TP-link media отправлялось не с 8000 порта, а с 1024. Чертов роутер меняет его по свему усмотрению, при это в SIP сообщение он не залезает, потому, что я отключил все “умные” функции связанные с SIP сообщениями на роутере, для чего? Для того, чтобы быть уверенным в том, что SIP сообщение отправленное мной, не претерпевает изменений.

Так вот, а Астериск получая медиа-трафик с порта 1024 слал его на 8000, т.к. в сообщении указан именно он. TP-Link разводил руками, че это мне на 8000 порт приходит трафик, я шлю только с 1024.  В общем, в астериске есть настройка nat в sip.conf значение comedia означает, что астериск будет слать трафик на фактический адрес, с которого приходит медиа. Это решает такие проблемы.