Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
faq:simple_tg_notify [2023/02/17 13:30] Портнов Алексей создано |
faq:simple_tg_notify [2023/06/06 13:29] (текущий) Портнов Алексей [Пример на базе dialplan] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Оповещение о пропущенных ====== | ||
+ | |||
[[faq:|Обратно к инструкциям]] | [[faq:|Обратно к инструкциям]] | ||
+ | |||
+ | ===== Пример на базе dialplan ===== | ||
+ | |||
+ | |||
Для оповещения в телеграмм о всех пропущенных вызовах выполните следующие действия: | Для оповещения в телеграмм о всех пропущенных вызовах выполните следующие действия: | ||
Строка 16: | Строка 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 | ||
Строка 25: | Строка 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:|Обратно к инструкциям]] | ||