Найти в Дзене
Шпаргалки Эникея

Мониторинг доступности внутреннего номера Asterisk

Как узнать, что внутренний номер телефонии не доступен? Получение сообщений об этом в автоматическом режиме

Всем привет

после развертывания Asterisk'a встает вопрос - а с чего звонить?

обычно это SIP-телефоны, но в условиях ограниченного бюджета - используют софтофоны, например, ПК, смартфоны.

Если ПК по проводной сети не "отваливается", то с софтофонами на смартах - немного иначе. При переходе по сотам оператора сотовой связи SIP-софтофон, зашитый, например, в стандартную звонилку более менее актуальных Samsung, Xiaomi, Honor регистрируется в нашем сервере телефонии через раз и "принудительно" зарегистрировать его там - чаще всего означает звонок на другой номер.

Игра с Keep-Alive автоматически/всегда, например, в Xiaomi- не помогла, поэтому было решено смастерить небольшой костыль.

Проверить доступность телефона из баша можно следующей командой

asterisk -rx "pjsip show endpoint XXX" | grep "Avail"

где XXX - ваш внутренний номер (сам ведь Asterisk настроили уже давно, да?) :)

выдаст примерно следующее

Contact: XXX/sip:XXX@aaa.bbb.ccc.ddd:53646;x-ast-orig- 36c235c384 Avail 353.384

где XXX - номер, aaa.bbb.ccc.ddd - айпи софтофона, далее идет идентификатор сессии, доступность и время

при недоступности - не выдаст ничего

устанавливаем пакет для отправки почты

sudo apt install ssmtp

пилим конфиг для почтовика

sudo nano /etc/ssmtp/ssmtp.conf

Пример конфига

hostname=localhost FromLineOverride=YES AuthUser= ваш_аккаунт@yandex.ru AuthPass= ваш_пароль_от_аккаунта mailhub=smtp.yandex.ru:465 rewriteDomain=yandex.ru UseTLS=YES

Пилим скрипт

#!//bin/bash
function main {
currenttime=$(date '+%H%M%S')
if [ "$currenttime" -ge '082500' ] && [ "$currenttime" -le '164000' ]
then
astercheck=$(asterisk -rx "pjsip show endpoint XYZ" | grep "Avail")
if test -z "$astercheck"
then
echo "\Телефон не доступен"
echo -e "Subject: SIP-телефон не доступен\n\n наберите внутренний номер админа" | ssmtp -v -s user@company.ru
sleep 30m
else
sleep 10m
echo "\Телефон доступен"
fi
fi
}
while true;
do
echo "it's ok"
main
done
echo "end"

С 8:25 по 16:40 он проверяет доступность номера раз в 10 минут, в случае недоступности - раз в полчаса отправляет почту юзеру, чтобы он подключился к телефонии

Пилим службу

sudo nano /etc/systemd/system/asteriskcheksecretar.service

код службы

[Unit]
Description=asteriskcheksecretar
After=network.target
[Service]
Type=simple
ExecStart=/путь до скрипта/asteriskcheksecretar.sh
[Install]
WantedBy=multi-user.target

сохраняем

перезагружаем демонов и запускаем нашу службу

systemctl daemon-reload
systemctl start asteriskcheksecretar.service
systemctl enable asteriskcheksecretar.service

Проверяем работоспособность

systemctl status asteriskcheksecretar.service

При недоступности телефона - выдаст лог отправки письма на почту юзера, при желании - туда возможно прикрутить и оповещение на AD-шный ПК поверх всех окон :)

Всем спасибо за внимание, подписывайтесь, комментируйте, дополняйте неточности

#ит #автоматизация #скрипты #