Все мы знаем что можно настроить модуль 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"
Автор: человек со стажем
Добрый день, Спасибо за статью, простое красивое решение, Сразу за работало (только пришлось добавить прокси)
У меня в Телеграм приходят уведомления только о звонке с внутренних номеров.
Если же городской вызов, переключенный через секретаря или по набору дополнительного номера в телеграм ничего не приходит.
Надо чем то еще дополнить /etc/asterisk/extensions_override_freepbx.conf