SIP-привет 👋

Телефонные решения на базе АТС Asterisk

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

Подстановочные знаки используются для сопоставления нескольких файлов в оболочке. Два основных символа подстановки - * и ?. * соответствует любому количеству символов, поэтому *.jpg будет расширен оболочкой до списка всех файлов с расширением .jpg. Важно понимать, что это расширение выполняется оболочкой перед передачей списка файлов любой команде, которую вы вызвали. Если у вас есть два файла с именами in.txt и out.txt и вы выполняете команду $ ls .txt, оболочка заменяет расширение с подстановочным знаком на список подходящих файлов, а затем вызывает команду, чтобы она выполнилась: $ ls in....

24 March 2025 · 2 min · Dmitriy Q

Краткий обзор API FreePBX

Несколько месяцев назад мне закидывали удочку как создавать экстен во FreePBX, я ковырял запрос создания, но он получался очень длинным. И тут несколько дней назад в чате Asterisk Russian Community кто-то интересовался как можно создать диапазон номеров, даже кое-кто утверждал что такое было, но порыскав я не нашёл, зато наткнулся на API FreePBX и даже в gist.gihtub.com одного из разработчиков FreePBX нашёл скрипт удаления экстена с АТС. Попросил в чате поправить его на диапазон и мне прислали в личку простенький, но рабочий вариант....

5 March 2025 · 2 min · Dmitriy Q

Умная маршрутизация вызовов

Чтобы разгрузить секретаря, на которого валится множество вызовов с голосового меню решил сделать умную маршрутизацию чтобы вызовы клиентов направлять на звонивших им операторов, в том числе полезно учитывая множество переадресаций на сотовые в компании. Решил зайдествовать func_odbc - добавляем в файл /etc/asterisk/func_odbc.conf: ; это уже должно быть там [general] dsn=asteriskcdrdb prefix=ODBC ;а это наша функция [MOBILE] writehandle=asteriskcdrdb synopsis=The function searches for the extension that last dialed this number. syntax=${CALLERID(number):-10} readsql=SELECT cnum FROM cdr WHERE dst like '%${ARG1}' ORDER BY calldate DESC LIMIT 1 Добавляем в /etc/asterisk/extensions_custom....

18 February 2025 · 1 min · Dmitriy Q

Краткое руководство по... захвату ошибок

Самое сложное в решении проблем с компьютерами - определить, в чем заключается проблема. Когда вы просите помощи на форуме или просто обращаетесь к профессору Google, очень важно приводить точные сообщения об ошибках. Если вы запускаете программу из терминала, то их можно увидеть, скопировать и вставить, но что делать, если вы не можете их увидеть или там слишком много информации? Вы можете скопировать вывод программы в файл следующим образом: $ someprogram 2>&1>file....

26 December 2024 · 1 min · Dmitriy Q

Профилактика усталости глаз с Safeeyes

Слишком много хорошего - это не та идиома, которая часто ассоциируется с вычислительными устройствами, но она подходит. Если вы проводите слишком много времени, уставившись в экран компьютера, то у вас может развиться ряд физиологических проблем, таких как плохая осанка, слабые ягодичные мышцы, слабый позвоночник и, что еще хуже (конспирологическая теории заговора? - ред.), вы будете напрягать глаза. К счастью, есть есть простое решение, по крайней мере, для ваших глаз. Safe Eyes - это замечательная утилита, помогающая предотвратить напряжение глаз, периодически заставляя вас делать перерыв....

26 December 2024 · 2 min · Dmitriy Q

Краткое руководство по... файловым ссылкам

В Linux широко используются ссылки на файлы. Это способ размещения одного и того же файла (или каталога) в двух или более местах или под разными именами. Вы можете просто скопировать файл в каждое место, но это имеет несколько недостатков: тратится место, и если оригинальный файл обновляется, то копия остается старой версией. Существует два типа ссылок: жесткие ссылки и символические ссылки, они же симлинки. Технически каждый файл является жесткой ссылкой, поскольку это связь между именем файла и структурой данных на диске, в которой хранится его содержимое....

25 December 2024 · 2 min · Dmitriy Q

Дневник сборки дистрибутива

Решил немного “интерактивить” и писать что-то вроде дневника по решению ошибок и добавлению функций в скрипт сборки. Скрипт собирает текущий релиз 20 версии Asterisk и 16 версии FreePBX. Публичный репозитарий Проект разработки 19.12.2024 Исправлена ошибка установки CDR Viewer MOD - были лишние пробелы после EOF в предыдущей функции и исправил ошибку с незапросом пароля для пользователя. Начал писать веб-оболочку для редактирования пользователей - добавление в .htpasswd работает, теперь надо продумать как добавлять пользователей и в конфиг CDR Viewer MOD....

18 December 2024 · 1 min · Dmitriy Q

Оценка качества обслуживания в Asterisk (альтернатива)

Альтернативное решение для оценки качества (на примере 200 очереди). В файл /etc/asterisk/queues_post_custom.conf вносим редакцию для 200 очереди чтобы получить номер ответившего агента (можно и проще, но не срабатывало с IAX): [200](+) setinterfacevar=yes Создаем таблицу service_survey в БД asteriskcdrdb для значений: CREATE TABLE `service_survey` ( `num` varchar(20) DEFAULT NULL, `operator` varchar(20) DEFAULT NULL, `queue` varchar(20) DEFAULT NULL, `valuation` varchar(20) DEFAULT NULL, `date` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; В func_odbc.conf добавляем функцию записи в базу: [qam] writehandle=asteriskcdrdb writesql=INSERT INTO service_survey (num,operator,queue,valuation,date) VALUES ('${ARG1}','${ARG2}','${ARG3}','${ARG4}',NOW()) Клепаем само меню в /etc/asterisk/extensions_custom....

25 November 2024 · 2 min · Dmitriy Q

Оценка качества обслуживания в Asterisk

Поступил заказ сделать модуль оценки работы оператора и качества оказания услуги. За основу взял статью merion networks. Всё делалось на FreePBX 15 и Asterisk 18. В файл /etc/asterisk/queues_post_custom.conf вносим редакцию для нужной очереди (например 500) чтобы получить номер ответившего агента (можно и проще, но не срабатывало с IAX): [500](+) setinterfacevar=yes Клепаем само меню в /etc/asterisk/extensions_custom.conf: [assessment] exten => _X.,1,Answer() same => n,Set(CHANNEL(language)=ru) same => n,Set(COUNT=1) same => n,Wait(1) same => n,Playback(custom/qam-intro) same => n,Set(TIMEOUT(digit)=1) same => n,NoOP(Count: ${COUNT}) same => n,GotoIf($["${COUNT}" = "1"]?...

22 November 2024 · 3 min · Dmitriy Q

Установка модулей во FreePBX не из репозитория

Сегодня разберем как установить модуль без доступа к репозиториям Sangoma или вообще без доступа в интернет. Заходим в модуль FreePBX Управление модулями -> Admin -> Module Admin. Вкладка Module Updates и жмём кнопку Upload Modules. Можно выбрать как загрузку из веба, так и с жесткого диска. Загрузка (с жесткого диска) - 2 пункт. Жмёте Обзор, выбираете файл со своего компьютера и по нажатию кнопки Upload (From Hard Disk) он загрузится, проверится и при успешной проверке на соответствие модулю установится....

13 November 2024 · 1 min · Dmitriy Q