Jump to content

Recommended Posts

Posted

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

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

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

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 А ещё не ясно как на этом форуме тегать пользователей по никнейму.

 

 

Posted

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

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

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

 

 

 

Posted (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 by emptysh3ll
  • Upvote 1
Posted
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="ваш_токен"

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

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

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

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

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

  • Thanks 1
Posted
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"}}

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

 

Posted

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

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

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

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

 

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...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.