Keen_VivaGiga Posted November 20, 2021 Share Posted November 20, 2021 Есть затея - прикрутить к Астериску уведомления на Телеграм. Для этого необходима возможность через командную строку отправлять сообщения в Телеграм. Для решения была изучена статья готовых решений https://forum.keenetic.com/topic/112-управление-роутером-по-telegram/ При этом мне не очень понравилась идея возможности "обратной связи с роутером" (безопасность/паранойя) сколько понравились отсылки на: https://bitbucket.org/padavan/rt-n56u/wiki/RU/Отправка сообщений в Telegram (правда здесь не под Entware заточка) И уже ближе к интересному пот этот подробный пост (по данной причине привожу его целиком): В 06.01.2017 в 12:15, pitersidr сказал: Краткая инструкция: Для автоматизаций и распарсивания далее по вкусу))) 1. Написать в телеграмм пользователю @BotFather /newbot - создать бота, попросит придумать имя и ник (ник должен содержать слово "bot") /token - получить <API_ID> 2. Написать любоее сообщение своему боту, создать чат 3. По ссылке "https://api.telegram.org/bot<API_ID>/getUpdates" узнать <CHAT_ID> в поле "chat":"id": ХХХХХХХХ" 4. Самые простые способы Отправить сообщение: wget -O - --no-check-certificate "https://api.telegram.org/bott<API_ID>/sendMessage?chat_id=<CHAT_ID>&text=Привет мир" Отправить фото (должно быть доступно по ссылке интернета): wget -O - --no-check-certificate "https://api.telegram.org/bot<API_ID>/sendphoto?chat_id=<CHAT_ID>&photo=http://XXXXXXXXX.jpg" Получить отправленные боту сообщения: из ссылки в пункте 2 wget -O - --no-check-certificate "https://api.telegram.org/bot<API_ID>/getUpdates" Получить отправленную боту картинку: <file_path> - также можно узнать из ссылки в пункте 2 wget -O - --no-check-certificate "https://api.telegram.org/file/bot<API_ID>/<file_path>" <file_path> - также можно узнать из ссылки в пункте 2 Собственно именно на вызове wget у меня сейчас проблемы. В частности вызов wget -O - --no-check-certificate "https://api.telegram.org/bott<API_ID>/sendMessage?chat_id=<CHAT_ID>&text=Привет мир" Сообщает об ошибке: wget: not an http or ftp url: https://api.telegram.org/ На такую ошибку интернет говорит, что "Убедитесь, что ваш wget бинарный файл скомпилирован с поддержкой SSL." Учитывая то, что я устанавливал wget командой opkg install wget, то скомпилировать вроде как не получится (возможно я не прав) Подскажите пожалуйста, как отправить сообщение в Телеграм из командной строки? (роутер keenetic Giga) В скрытом тексте помещаю ссылки на связанные темы, которые так и не получили ответа Скрытый текст В 15.03.2021 в 09:14, Muwahhid сказал: https://forum.keenetic.com/topic/10994-уведомления-в-телеграм-о-входе-по-ssh/ В 27.07.2020 в 07:15, Андрей Шибанов сказал: https://forum.keenetic.com/topic/9392-telegram-бот-на-питоне/ Конечно больше всего надежд на подсказку от Модератора: В 04.01.2018 в 18:55, Александр Рыжов сказал: https://forum.keenetic.com/topic/112-управление-роутером-по-telegram/ PS А ещё не ясно как на этом форуме тегать пользователей по никнейму. Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 Вот если правильно ограничить слова поиска, можно найти ответ: В 27.06.2021 в 22:27, TheBB сказал: opkg install wget-ssl При этом ссылка даётся на https://forum.keenetic.com/topic/5639-wget-gnu-wget-downloading-files-on-the-protocols-http-https-ftp-and-ftps/?tab=comments#comment-64927 в которой wget-ssl вообще не упоминается. Проверяю решение. Версию теперь показывает: # wget -V GNU Wget 1.21.1 built on linux-gnu. (ранее ругалось, что не знает приставку -V) Ну и само тестирование: ~ # wget -O - --no-check-certificate 'https://api.telegram.org/bot(вырезано)/sendMessage?chat_id=(вырезано)&text=test' --2021-11-20 11:58:53-- https://api.telegram.org/bot(вырезано)/sendMessage?chat_id=(вырезано)&text=test Resolving api.telegram.org... 149.Х.Х.Х, 2001:ХХХ:ХХХ:ХХХ:5:100:0:a, 2001:ХХХ:ХХХ:ХХХ:1:100:0:a, ... Connecting to api.telegram.org|149.ХХХ.ХХХ.ХХХ|:443... connected. WARNING: cannot verify api.telegram.org's certificate, issued by 'CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com\\, Inc.,L=Scottsdale,ST=Arizona,C=US': Self-signed certificate encountered. HTTP request sent, awaiting response... 403 Forbidden 2021-11-20 11:58:53 ERROR 403: Forbidden. Проблема с wget + https решена, однако сервер телеграм не хочет общаться с кинетиком. Кто-то в курсе причины? Quote Link to comment Share on other sites More sharing options...
emptysh3ll Posted November 20, 2021 Share Posted November 20, 2021 (edited) Добрый день! Делайте отправку через curl (сначала надо его установить из репозитория) - всё будет работать, создайте .sh файл, дайте ему права на исполнение и попробуйте, примерно следующего содержания конструкция у вас должна получиться: #!/opt/bin/sh CHAT_ID="ваш_id" TEXT="$1" BOT_AUTH_TOKEN="ваш_токен" curl -sS -i --max-time 30 \ --header 'Content-Type: application/json' \ --request 'POST' \ --data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \ "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1 Edited November 20, 2021 by emptysh3ll 1 Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 36 минут назад, emptysh3ll сказал: Делайте отправку через curl Для таких же как и я начинающих описываю подробно действия: 1) Устанавливаю # opkg install curl 2) Проверяю # curl -V curl 7.78.0 (mipsel-openwrt-linux-gnu) libcurl/7.78.0 OpenSSL/1.1.1k zlib/1.2.11 Release-Date: 2021-07-21 Protocols: file ftp ftps http https imap imaps mqtt pop3 pop3s rtsp smtp smtps tftp Features: alt-svc HSTS HTTPS-proxy IPv6 Largefile libz SSL 3) создаю файл (создавал копированием в привычном мне mc путём копирования существовавшего при установке callback-802.sh) /opt/etc/asterisk/scripts # ls callback-802.sh telega.sh Права не трогал - они на файле-образце стояли нормально. 4) ЗАПУСКАЮ /opt/etc/asterisk/scripts # ./telega.sh Hello HTTP/1.1 403 Forbidden Server: nginx/1.18.0 Date: Sat, 20 Nov 2021 11:51:31 GMT Content-Type: application/json Content-Length: 88 Connection: keep-alive Strict-Transport-Security: max-age=31536000; includeSubDomains; preload Access-Control-Allow-Origin: * Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection {"ok":false,"error_code":403,"description":"Forbidden: bot can't send messages to bots"}/opt/etc/asterisk/scripts # Уже чуть больше информации: "description":"Forbidden: bot can't send messages to bots" Это я не верно прописал идентификаторы?: 47 минут назад, emptysh3ll сказал: CHAT_ID="ваш_id" TEXT="$1" BOT_AUTH_TOKEN="ваш_токен" Или в чём-то другом проблема? Quote Link to comment Share on other sites More sharing options...
emptysh3ll Posted November 20, 2021 Share Posted November 20, 2021 5 минут назад, Keen_VivaGiga сказал: Уже чуть больше информации: "description":"Forbidden: bot can't send messages to bots" А вы кому сообщение-то пытаетесь отправить? В поле CHAT_ID должен быть ваш идентификатор пользователя в телеге (а не бота), узнать его можно написав сообщение соответствующему боту, например @my_id_bot Сейчас ради интереса вписал в скрипт ID бота, при отправке выдало такую же ошибку как и у вас. 1 Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 1 час назад, emptysh3ll сказал: @my_id_bot Спасибо!!!! Именно этого знания мне не хватало. Написал этому боту, и в ответ получил идентификатор, который вставил в CHAT_ID="ваш_id". И в ответ на вызов /opt/etc/asterisk/scripts # ./telega.sh Hello я получил (кроме сообщания на телефон) в шеле подробную информацию о заголовках и в конце: {"ok":true,"result":{"message_id":20,"from":{"id":123,"is_bot":true,"first_name":"@tbot6","username":"bot"},"chat":{"id":123,"first_name":"\u004339","type":"private"},"date":1637910936,"text":"Hello"}} Пробовал добавить во второй строке telega.sh строку ECHO OFF, но эту команду линукс похоже не воспринимает. Гугл говорит , что правильнее set echo off, но результата желаемого не получается. Решил глянуть мануал к Curl, и удивился, что в предложенных параметрах и так установлен бесшумный режим в виде -sS Скрытый текст -s/--silent Silent mode. Don't show progress meter or error messages. Makes Curl mute. If this option is used twice, the second will again disable silent mode. -S/--show-error When used with -s it makes curl show error message if it fails. If this option is used twice, the second will again disable show error. И только описание второго параметра (-i) приблизило к желаемому: Скрытый текст -i/--include (HTTP) Include the HTTP-header in the output. The HTTP-header includes things like server-name, date of the document, HTTP-version and more... If this option is used twice, the second will again disable header include. Убрав -i вывод уменьшился до {"ok":tru................llo"}} Теперь думаю как и его убрать. Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 нашел. не знаю правильно или нет, но работает: -o /dev/null curl -sS -o /dev/null \ --max-time 30 \ --header 'Content-Type: application/json' \ --request 'POST' \ --data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \ "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1 Да, такая конструкция не способствует отладке, зато вызов теперь проходит в полной "тишине" /opt/etc/asterisk/scripts # ./telega.sh "Helloiвапорлвоп олпвра плjdпр" /opt/etc/asterisk/scripts # Всем спасибо за помощь. 1 Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 Собственно конструкция с которой начал, после исправления тоже работает # wget -O - --no-check-certificate "https://api.telegram.org/bot(вырезано)/sendMessage?chat_id=(вырезано)&text=Привет мир" --2021-11-20 18:03:28-- https://api.telegram.org/bot(вырезано)/sendMessage?chat_id=(вырезано)&text=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80 Resolving api.telegram.org... 149.ХХХ.ХХХ.ХХХ, 2001:ХХХ:ХХХ:ХХХ:5:100:0:a, 2001::ХХХ:ХХХ:ХХХ:3:100:0:a, ... Connecting to api.telegram.org|149.ХХХ.ХХХ.ХХХ|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 319 [application/json] Saving to: 'STDOUT' - 0%[ ] 0 --.-KB/s {"ok":true,"result":{"message_id":27,"from":{"id":123,"is_bot":true,"first_name":"@tbot6","username":"Mbot"},"chat":{"id":123,"first_name":"(вырезано)0\u0439","type":"priv- 100%[============================================>] 319 --.-KB/s in 0s 2021-11-20 18:03:29 (11.2 MB/s) - written to stdout [319/319] 1 Quote Link to comment Share on other sites More sharing options...
Keen_VivaGiga Posted November 20, 2021 Author Share Posted November 20, 2021 Если кто-то будет пробегать в поиске информации по FreeBSD , то там скрипт запускается так #sh /PATH/telega.sh "Hel ра плjdпр" А в диалплане так: exten => sms,n,Set(ivar=at_${STRFTIME(${EPOCH},,%Y%m%d-%H:%M:%S)}_SMS_${DONGLENUMBER}_:_${BASE64_DECODE(${SMS_BASE64})})}) exten => sms,n,System(sh /usr/local/etc/asterisk/scripts/telega.sh " ${ivar} ") Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.