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

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


faq:simple_tg_notify

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
faq:simple_tg_notify [2023/02/20 14:49]
Портнов Алексей
faq:simple_tg_notify [2023/06/06 13:29] (текущий)
Портнов Алексей [Пример на базе dialplan]
Строка 2: Строка 2:
  
 [[faq:​|Обратно к инструкциям]] [[faq:​|Обратно к инструкциям]]
 +
 +===== Пример на базе dialplan =====
  
  
Строка 20: Строка 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
Строка 34: Строка 36:
  
  
-<note tip>​Средставми curl можно выполнить запрос к любому сайту. К примеру можно отправить уведомление в slack:+<note tip>​Средставми ​**curl** можно выполнить запрос к любому сайту. К примеру можно отправить уведомление в **slack**:
  
 <​code>​ <​code>​
Строка 40: Строка 42:
 </​code>​ </​code>​
 </​note>​ </​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.1676904565.txt.gz · Последние изменения: 2023/02/20 14:49 — Портнов Алексей