Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

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

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

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

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

 

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

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

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

 

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

 

 

Опубликовано

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

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

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

 

 

 

Опубликовано (изменено)

Добрый день!

 

Делайте отправку через 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

Изменено пользователем emptysh3ll
Опубликовано
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="ваш_токен"

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

Опубликовано
5 минут назад, Keen_VivaGiga сказал:

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

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

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

Опубликовано
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"}}

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

 

Опубликовано

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

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

 

Опубликовано

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

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

 

Опубликовано

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

 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.