Инструменты пользователя

Инструменты сайта


faq:simple_tg_notify

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
faq:simple_tg_notify [2023/02/17 13:30]
Портнов Алексей
faq:simple_tg_notify [2023/06/06 13:29] (текущий)
Портнов Алексей [Пример на базе dialplan]
Строка 2: Строка 2:
  
 [[faq:​|Обратно к инструкциям]] [[faq:​|Обратно к инструкциям]]
 +
 +===== Пример на базе dialplan =====
 +
 +
 Для оповещения в телеграмм о всех пропущенных вызовах выполните следующие действия:​ Для оповещения в телеграмм о всех пропущенных вызовах выполните следующие действия:​
  
Строка 18: Строка 22:
     same => n,​Set(URL=https://​api.telegram.org/​bot${TOKEN}/​sendMessage)     same => n,​Set(URL=https://​api.telegram.org/​bot${TOKEN}/​sendMessage)
     same => n,​Set(TEXT=MISSED CALL from: ${CALLERID(name)},​ did: ${FROM_DID},​ callid: ${CHANNEL(callid)})     same => n,​Set(TEXT=MISSED CALL from: ${CALLERID(name)},​ did: ${FROM_DID},​ callid: ${CHANNEL(callid)})
-    same => n,NoOp(curl -s -X POST '​${URL}'​ -d chat_id='​${CHAT_ID}'​ -d text='​${TEXT}'​)+    same => n,SHELL(curl -s -X POST '​${URL}'​ -d chat_id='​${CHAT_ID}'​ -d text='​${TEXT}'​)
     same => n,​Set(MISSED=${SHELL(curl -s -X POST '​${URL}'​ -d chat_id='​${CHAT_ID}'​ -d text='​${TEXT}'​)})     same => n,​Set(MISSED=${SHELL(curl -s -X POST '​${URL}'​ -d chat_id='​${CHAT_ID}'​ -d text='​${TEXT}'​)})
     same => n,return     same => n,return
Строка 27: Строка 31:
  
 Добавьте к файлу **modules.conf** <​code>​load => func_shell.so</​code>​ Добавьте к файлу **modules.conf** <​code>​load => func_shell.so</​code>​
 +
 +<note tip>​[[https://​gist.github.com/​dideler/​85de4d64f66c1966788c1b2304b9caf1| Полезная статья]] по работе с ботом средствами **curl** </​note>​
 +
 +
 +
 +<note tip>​Средставми **curl** можно выполнить запрос к любому сайту. К примеру можно отправить уведомление в **slack**:
 +
 +<​code>​
 +same => n,​Set(MISSED=${SHELL(curl -X POST --data-urlencode "​payload={\"​channel\":​ \"#​cannel_name\",​ \"​username\":​ \"​bot_name\",​ \"​text\":​ \"​Пропущенный вызов от ${CALLERID(name)} по внешней линии: ${FROM_DID} в ${STRFTIME(${EPOCH},,​%H:​%M:​%S %d-%m-%Y)}\",​ \"​icon_emoji\":​ \":​sos:​\"​}"​ https://​hooks.slack.com/​services/​T76G7L0/​B01R/​VMPQUeAN)})
 +</​code>​
 +</​note>​
 +
 +===== Пример на базе PHP-AGI =====
 +
 +В разделе "​Приложения dialplan"​ следует добавить php скрипт:​
 +<​code><?​php
 +require_once '​Globals.php';​
 +use \GuzzleHttp\Client;​
 +
 +const API_KEY = '';​
 +const CHAT_ID = '';​
 +
 +$agi = new MikoPBX\Core\Asterisk\AGI();​
 +
 +$name = $agi->​get_variable('​CALLERID(name)',​ true);
 +$num  = $agi->​get_variable('​CALLERID(num)',​ true);
 +$did  = $agi->​get_variable('​$FROM_DID',​ true);
 +$id   = $agi->​get_variable('​CHANNEL(linkedid)',​ true);
 +$date = date('​Y.d.m H:​i:​s',​ str_replace('​mikopbx-',​ '',​ $id));
 +
 +$TEXT = "​Пропущенный вызов: $name, did: $did, callid: $num, id: $id, date: $date";​
 +$apiURL = '​https://​api.telegram.org/​bot'​ . API_KEY . '/';​
 +$client = new Client([
 +    '​base_uri'​ => $apiURL,
 +    '​timeout'​ => 1,
 +    '​http_errors'​ => false,
 +]);
 +try {
 +    $client->​post( '​sendMessage',​ ['​query'​ => ['​chat_id'​ => CHAT_ID, '​text'​ => $TEXT]] );
 +}catch (Throwable $e){
 +}</​code>​
 +В скрипте следует поправить значение "​**API_KEY**"​ и "​**CHAT_ID**"​. ​
 +Текст уведомления можно исправить в переменной "​$**TEXT**"​. \\
 +После сохранения скрипта из адресной строки браузера скопируйте имя скрипта "​**DIALPLAN-APP-FE099BCCEF4E6E291F2AE158E07F7F07**", ​
 +
 +В разделе "​[[:​custom-files|Кастомизация системных файлов]]"​ добавьте к файлу **/​etc/​asterisk/​extensions.conf** следующий код "​Добавить в конец файла"​
 +
 +<​code>​[add-trim-prefix-clid-custom]
 +exten => _.X!,​1,​Set(CHANNEL(hangup_handler_push)=hangup-ext-queues,​h,​1);​
 + same => n,return
 +[hangup-ext-queues]
 +exten => h,​1,​ExecIf($["​${M_DIALSTATUS}"​ = "​ANSWER"​]?​return)
 +    same => n,​AGI(DIALPLAN-APP-FE099BCCEF4E6E291F2AE158E07F7F07.php)
 +    same => n,return
 +</​code>​
 +
 +Вместо "​**DIALPLAN-APP-FE099BCCEF4E6E291F2AE158E07F7F07**"​ укажите имя своего скрипта. ​
  
 [[faq:​|Обратно к инструкциям]] [[faq:​|Обратно к инструкциям]]
  
faq/simple_tg_notify.1676640621.txt.gz · Последние изменения: 2023/02/17 13:30 — Портнов Алексей