Уведомления о входящих в Asterisk звонках на Telegram

Справочник системного администратора

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

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

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

Первым делом вам понадобится создать собственного телеграм-бота, как сделать это я описывал в этой статье.

Когда у вас есть токен бота и ID чата, в который бот будет присылать вам уведомления, можно создать скрипт. Поместим его в директорию: /var/www/html/.

Все действия я буду делать с помощью редактора mcedit, который входит в комплект удобного файлового менеджера для Linux. Установить его можно командой:

sudo apt-get install mc

Создаем файл будущего скрипта: mcedit /var/www/html/telegram.sh

И вставляем в него следующий код (комбинацией Shift+Insert):

#!/bin/sh
API_TOKEN='000000000:XXXXXXXXX' # токен вашего бота
CHAT_ID='12345678' # ID чата, в который вы будете получать уведомления
MSG="$1 $2 $3"
if [ -z "$CHAT_ID" ]; then
echo 'Please, define CHAT_ID first! See "chat":{"id":xxxxxxx string below:'
/usr/bin/wget -qO - https://api.telegram.org/bot$API_TOKEN/getUpdates
exit 1
fi
/usr/bin/wget -O /dev/null -q "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=$MSG" 2>&1
if [ $? -eq 0 ]; then
echo 'Message sent successfully.'
else
echo 'Error while sending message!'
exit 1
fi

Нажимаем F10, сохраняем изменения и выходим из редактора, далее сразу предоставим скрипту права на выполнение:

chmod +x /var/www/html/telegram.sh

Теперь нам нужно отредактировать параметры вашего внутреннего номера (экстеншена), при звонке на который вы хотите получать уведомления. В Asterisk все параметры экстеншенов прописываются в файле /etc/asterisk/extensions_additional.conf, но внести в него изменения не получится, поскольку FreePBX все равно перезапишет его потом своей конфигурацией. Для внесения каких либо изменений в конфигурацию экстеншенов, в FreePBX предусмотрен файл /etc/asterisk/extensions_override_freepbx.conf, он имеет более высокий приоритет по отношению к extensions_additional.conf, доступен для редактирования и по умолчанию он пустой.

Но для начала нам необходимо из файла extensions_additional.conf взять исходную конфигурацию вашего экстеншена, которую мы затем вставим в extensions_override_freepbx.conf с некоторыми изменениями.

Открываем файл extensions_additional.conf:

mcedit /etc/asterisk/extensions_additional.conf

Далее на необходимо найти следующий блок, который будет соответствовать вашему внутреннему номеру (в моем примере номер 113).

Теперь нужно вверху редактора нажать Edit и выбрать Copy to clipfile, для сохранения выделенного текста в буфер обмена.

Выходим из файла по F10 и открываем файл extensions_override_freepbx.conf для редактирования:

mcedit /etc/asterisk/extensions_override_freepbx.conf

В самом верху обязательно указываем [ext-local], далее вставляем наш скопированный фрагмент, делаем новую строку после первого параметра и прописываем в нее параметры взаимодействия с созданным скриптом:

exten => 000,n,System(/var/www/html/telegram.sh ${CALLERID(name)} ${CALLERID(num)} ) ;

Вместо 000 пропишите номер вашего экстеншена, должно получиться вот так:

Сохраняем файл и перезапускаем астериск.

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

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

Вставьте в extensions_override_freepbx.conf заголовок [ext-group], далее строку include => ext-group-custom и уже после нее ставляете блок с параметрами группы, где после строки первого параметра так же необходимо вставить строку для взаимодействия со скриптом.

Должно получиться примерно так:

Сохраняемся и перезапускаем астериск. Готово.