Уведомления о звонке в телеграмм

в 16:22, , рубрики: asterisk

Все мы знаем что можно настроить модуль follow me и получить звонок на свой мобильный если нас нет на месте. Но что если Вы не любитель вбивать «где попало» свой мобильный, или вам не нравится, что входящие поступают уже с внешнего номера Вашей АТС или… да много еще чего. Например, вы стоите в другом конце кабинета, вам звонят, а вы думаете идти к телефону или потом перезвонить.

Появилась идея «при каждом входящем вызове на мой внутренний номер — отвеченном, не отвеченном — должно приходить сообщение в телеграм с номером и, если существует, именем звонящего.»

Приступим:

Имеем FrеePBX, открываем файл /etc/asterisk/extensions_additional.conf и ищем контекст:

[ext-local]
Находим настройки своего номера, в моем случае:
exten => 121,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/121/ringtimer)}" > "0"]?${DB(AMPUSER/121/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 121,n,Macro(exten-vm,novm,121,1,1,1)
exten => 121,n(dest),Set(__PICKUPMARK=)
exten => 121,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?ext-findmefollow,FM121,1)
exten => 121,n,GotoIf($["${DIALSTATUS}"="BUSY"]?ext-findmefollow,FM121,1)
exten => 121,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?ext-findmefollow,FM121,1)
exten => 121,n,Goto(${IVR_CONTEXT},return,1)
exten => 121,hint,SIP/121&Custom:DND121,CustomPresence:121

и копируем в «/etc/asterisk/extensions_override_freepbx.conf» в таком виде:

[ext-local]
exten => 121,1,Set(__RINGTIMER=${IF($["${DB(AMPUSER/121/ringtimer)}" > "0"]?${DB(AMPUSER/121/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 121,n,System(/var/www/html/sm.sh  ${CALLERID(name)} ${CALLERID(num)} ) ;
exten => 121,n,Macro(exten-vm,novm,121,1,1,1)
exten => 121,n(dest),Set(__PICKUPMARK=)
exten => 121,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?ext-findmefollow,FM121,1)
exten => 121,n,GotoIf($["${DIALSTATUS}"="BUSY"]?ext-findmefollow,FM121,1)
exten => 121,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?ext-findmefollow,FM121,1)
exten => 121,n,Goto(${IVR_CONTEXT},return,1)
exten => 121,hint,SIP/121&Custom:DND121,CustomPresence:121

Особое внимание стоит уделить добавленной строкее:

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

Она вызывает скрипт отправки сообщения в телеграмм с нужными параметрами,- именем и телефоном звонящего.

Код скрипта:

/var/www/html/sm.sh

#!/bin/sh

API_TOKEN='000000000:ЕУУУуУУУУУУ' # токен и пароль  бота
CHAT_ID='123456789' #ид чата , что бы узнать польуемся функцией TG getUpdates
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

Где взять ID и токены для бота и чата думаю не стоит рассказывать, инструкций полно.
не забываем дать права на выполнение:

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

Финальный штрих, после него проверяем и наслаждаемся:

 asterisk –rx "dialplan reload"

Автор: человек со стажем

Источник


  1. Андрей:

    Добрый день, Спасибо за статью, простое красивое решение, Сразу за работало (только пришлось добавить прокси)

    У меня в Телеграм приходят уведомления только о звонке с внутренних номеров.
    Если же городской вызов, переключенный через секретаря или по набору дополнительного номера в телеграм ничего не приходит.
    Надо чем то еще дополнить /etc/asterisk/extensions_override_freepbx.conf

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js