Keen_VivaGiga Posted November 20, 2021 Posted November 20, 2021 Есть затея - прикрутить к Астериску уведомления на Телеграм. Для этого необходима возможность через командную строку отправлять сообщения в Телеграм. Для решения была изучена статья готовых решений https://forum.keenetic.ru/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.ru/topic/10994-уведомления-в-телеграм-о-входе-по-ssh/ В 27.07.2020 в 07:15, Андрей Шибанов сказал: https://forum.keenetic.ru/topic/9392-telegram-бот-на-питоне/ Конечно больше всего надежд на подсказку от Модератора: В 04.01.2018 в 18:55, Александр Рыжов сказал: https://forum.keenetic.ru/topic/112-управление-роутером-по-telegram/ PS А ещё не ясно как на этом форуме тегать пользователей по никнейму. Quote
Keen_VivaGiga Posted November 20, 2021 Author Posted November 20, 2021 Вот если правильно ограничить слова поиска, можно найти ответ: В 27.06.2021 в 22:27, TheBB сказал: opkg install wget-ssl При этом ссылка даётся на https://forum.keenetic.ru/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
emptysh3ll Posted November 20, 2021 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
Keen_VivaGiga Posted November 20, 2021 Author 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
emptysh3ll Posted November 20, 2021 Posted November 20, 2021 5 минут назад, Keen_VivaGiga сказал: Уже чуть больше информации: "description":"Forbidden: bot can't send messages to bots" А вы кому сообщение-то пытаетесь отправить? В поле CHAT_ID должен быть ваш идентификатор пользователя в телеге (а не бота), узнать его можно написав сообщение соответствующему боту, например @my_id_bot Сейчас ради интереса вписал в скрипт ID бота, при отправке выдало такую же ошибку как и у вас. 1 Quote
Keen_VivaGiga Posted November 20, 2021 Author 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
Keen_VivaGiga Posted November 20, 2021 Author 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
Keen_VivaGiga Posted November 20, 2021 Author 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
Keen_VivaGiga Posted November 20, 2021 Author 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
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.