Jump to content

Entware & Telegram (Энтваре и Телеграм) на минималках. Проблема с wget


Recommended Posts

Есть затея - прикрутить к Астериску уведомления на Телеграм.

Для этого необходима возможность через командную строку отправлять сообщения в Телеграм.

Для решения была изучена статья готовых решений 

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 сказал:

 

В 27.07.2020 в 07:15, Андрей Шибанов сказал:

Конечно больше всего надежд на подсказку от Модератора:

В 04.01.2018 в 18:55, Александр Рыжов сказал:

 

PS А ещё не ясно как на этом форуме тегать пользователей по никнейму.

 

 

Link to comment
Share on other sites

Вот если правильно ограничить слова поиска, можно найти ответ:

В 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 решена, однако сервер телеграм не хочет общаться с кинетиком.

Кто-то в курсе причины?

 

 

 

Link to comment
Share on other sites

Добрый день!

 

Делайте отправку через 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 by emptysh3ll
  • Upvote 1
Link to comment
Share on other sites

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="ваш_токен"

Или в чём-то другом проблема? 
 

Link to comment
Share on other sites

5 минут назад, Keen_VivaGiga сказал:

Уже чуть больше информации: "description":"Forbidden: bot can't send messages to bots"
 

А вы кому сообщение-то пытаетесь отправить? :) В поле CHAT_ID должен быть ваш идентификатор пользователя в телеге (а не бота), узнать его можно написав сообщение соответствующему боту, например @my_id_bot

Сейчас ради интереса вписал в скрипт ID бота, при отправке выдало такую же ошибку как и у вас.

  • Thanks 1
Link to comment
Share on other sites

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"}}

Теперь думаю как и его убрать.

 

Link to comment
Share on other sites

нашел.  не знаю правильно или нет, но работает: -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 # 

Всем спасибо за помощь.

 

  • Upvote 1
Link to comment
Share on other sites

Собственно конструкция с которой начал, после исправления тоже работает

# 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]

 

  • Thanks 1
Link to comment
Share on other sites

Если кто-то будет пробегать в поиске информации по 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} ")

 

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...