Telegram api sendmessage не работает
Бесплатный чек-лист
по настройке RouterOS
на 28 пунктов
управление с телеги
На днях сдружил свои железки с телеграм, научился запускать скрипты и получать вывод..Подскажите, есть ли возможность отправлять именно команды (как в терминале) и получать ответ например в переменную? ну а дальше думаю смогу уже прикрутить и к телеге Я реализовал управление с андройд-смарфтона виджетами termux. Но работает только в пределах локальной сети, так как нет белого айпи.
• Кому интересно управление микротиками с помощью телеграмм, решил написать простенький мануальчик. Я и сам недавно только научился, протестировал, а теперь вот делюсь опытом, еще и телеграмм апиай официально разблокировали, так что вообще красота..
Управление сводится к отправке в группу телеграмм команды для определенного тика (в команде присутствует имя, необходимого для запуска скрипта), микрот в свою очередь по шедулеру выполняет чтение поступившей для него команды, и запускает заранее созданный скрипт.
Скриптов можно придумать сколько угодно на все случаи жизни, вот несколько примеров с описанием и содержимым:
telega_test
ping
log_print
wol_my_pc - включает комп, который подключен напрямую к данному микротику и мак адрес которого прописан в скрипте
для активации отправляем: /mikrotik wol_my_pc
wol_my_pc (поменяйте название интерфейса и мак адрес на свои)
telega_clean - скрипт очистки глобальной переменной content, часто помогает при отказе работы главного скрипта, в очищенном виде переменная content содержит <"ok":true,"result":[]>данный скрипт запускается вручную, либо по шедулеру (например раз в час)
Необходимо узнать токен бота и айди чата для использования скриптов.
Прошивка микротика v6.46.3 или выше. Если у вас ниже, то гарантии нет что будет работать.
Для корректной работы не одного, а нескольких тиков в одной группе телеграмм, перед каждой командой пишется название тика (Identity) которому адресована команда либо "all", чтобы команда выполнилась на всех тиках. Чтобы не держать в голове все имена и команды, можно добавить шаблоны в свою группу телеграмм через бота BotFather, для этого пишем ему (БотФазеру) команду:
выбираете своего бота и пишите список команд по шаблону: tik1_wol_my_pc - tik1 my pc ontik1_telega_test - proverka svyazi tik1
tik1_log_print_10 - last logs
tik1_ping - ping addr or ip
tik2_log_print_10 - last logs
tik2_wol_my_pc - tik2 my pc on
tik3_log_print_10 - last logs
tik4_log_print_10 - last logs
all_log_print_10 - last logs
Буквы обязательно все латинские и маленькие, а также левая часть (сама команда) не содержит пробелов.
Теперь, нажав на кнопку "/" в своём чате с ботом, всегда можно посмотреть, какие команды (скрипты) и на каких устройствах нам доступны.
Бота создали, группу создали, добавили туда бота, токен бота записали, айди чата группы записали, скрипты подготовили, теперь создаем скрипт, например с именем - Telegram
это будет основной скрипт для чтения телеграмм на наличие новых команд
Запихиваем в него содержимое (не забывая поменять айдишки в первых двух строках на свои):
Как получить int64 из SendMessage
SendMesaage возращает только integer, а как сделать чтобы возращалось int64 .
А вообще для начала попробуйте просто повторить гайд без ошибок, а потом только добавлять свои функции в бота. alecss131, спасибо за Ваш ответ. Попробовал сделать все по гайду, ошибка все же осталась. У меня такое ощущение, что я как-то не правильно настроил среду, либо причина в чем-то другом xoraxax, пишу на этот формум, после того, как облазил весь интернет, но не получается найти то, что надо, либо не помогают советы. Но спасибо, что пытались помочь
Возможно, я не очень понимаю то, что описано в этих ссылках.
proger10, Папку .m2 трогать не стоит, там находится всего на всего твой локальный мавен репозиторий, при новой сборке мавен все заново перекачает. А вообще если в classpath находится 2 одинаковые библиотеки то будет использована та что левее (первее) указана.Я по тому гайду написал и собрал проект, скомпилировался без ошибок, но при запуске получаю такие ошибки, имхо это изза того что я без токена запускаю бота.
Попробуйте моего бота собрать и запустить. Для сборки\запуска написал пару батников. build.bat собирает (нужен установленный мавен) а rub.bat запускает. Бот из гайда немного изменен, токен ему надо передавать параметром запуска (а так же возможно использование прокси, заккоментировал использование прокси), токен добавите в конец первой строчки через пробел без кавычек и прочего в файл run.bat. Проект для java 8 и собирается без ide, если не будет ошибок то можете импортировать проект в свою ide (я пользуюсь эклипсом и туда импортируется без проблем)
alecss131, спасибо за Ваш ответ.
Заново создал проект, сделал еще раз все по гайду, проект собирался, но запускался с ошибкой, что не выставлена цель запуска mavena. Нашел в интернете, что в качестве параметра в консоли нужно прописать clean install. После чего maven наконец-то не выдал никаких ошибок.
Но теперь я не пойму как запустить его так, чтобы все-таки бот отвечал на что-то. Функцию с ответом на команду прилагаю:
Я скорее даже не могу понять саму технику работы Maven. Вот я запустил, отработало, что это значит? То, что бот теперь должен работать по новому коду? Или это просто локальная проверка на ошибки и бот пока ничего не знает про него? Как ему сказать об изменениях? Как его запустить.
Конечно,если что, я пытаюсь все это найти в интернете, но пока каша в голове.
Что бы начать создавать бота необходимо его зарегистрировать в системе Telegram.
Для этого необходимо установить на телефон само приложение (либо воспользоваться веб версией клиента ) и добавить в контакты бота BotFather через чат с ним можно управлять своими ботами.
Сначала вводится команда /newbot Затем система предложит ввести имя для бота, если имя систему устроит она предложит указать пользовательское имя для бота с обязательным окончанием имени на bot или _bot, если все продет успешно то система вам выдать уникальный идентификатор бота, который затем можно будет использовать для работы. Он примерно такого вида 12345678:AAHOjf*****ROYb03utz*********. Более подробно можно почитать тут.
- URL query string
- application/x-www-form-urlencoded
- application/json (кроме загрузки файлов)
- multipart/form-data (для загрузки файлов)
Если запрос выполнен удачно то в ответ система вернет json объект
Где поле ok будет равно true.
Поскольку раньше мне не доводилось работать с synapse то пришлось обратиться к интернету, там нашлась подборка статей по работе с данной библиотекой.
После скачивания всего и вся я создал простой проект приложения в среде delphi.
Затем данные объект можно использовать для работы с запросами.
В качестве первого запроса я решил получить информацию о боте.
Выполняется это посредством запроса.
В коде это выглядело так
В качестве результата сервис возвращает JSON обьект, который распарсивается при помощи объекта ISuperObject.
В запрос передаются параметры
Делается это так примерно. Поскольку у меня бот тестовый то я особо с кодом не заморачивался.
В качестве параметров передаются
Не обязательно перечислять все параметры в запросе можно использовать лишь chat_id и text
Код получился такой
Поскольку запрос передавался методом get то пришлось обработать отправляемый текст функцией urlencode стянутой с просторов интернета
Сам запрос отправки фото такой.
В качестве параметров передаются
Но вот такой корявенький код получился
Разделитель для передаваемых параметров запроса
Отправка всего остального происходит аналогично вышеуказанному способу. Дальше я особо не стал заморачиваться с ботом, поскольку программу минимум я выполнил. А остальное будет дополняться по мере потребностей.
Хоть и с большим запозданием, публикую шпаргалку по telegram bot api, может, будет полезна.
Прикладываю официальную документацию, и готовый набор методов для работы с telegram. Обработку тестировал на 8.3.15.1747.
В тексте я буду давать ссылки на вторую документацию т.к. для ее просмотра не нужны премудрости для обхода блокировок.
В клиенте telegram ищем бота BotFather
Далее отправляем ему команды
/start
/newbot
Представление имени моего бота
unikalnoe_imya_bot
После этого бот выдаст нам данные для подключения, а именно токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
Скринами
Соединение
В документации написано:
Код создания соединения :
Прокси
Есть огромное количество сайтов предоставляющий список таких бесплатных прокси, я использую getMe
Я специально буду повторять блоки кода, дабы Вы копировали сразу рабочий вариант, конечно это все нужно обернуть в функции и процедуры
Метод getMe вернет в теле ответа JSON структуру
"ok":true - Означает, что авторизация прошла успешно и Ваш токен валидный.
Short polling - это классическая схема, когда отправляя запрос мы сразу получаем результат его выполнения.
т.е. вы заводите РС с обработанными update_id и каждый раз анализируете - обработан полученный id или нет. Можно завести константу с последним обработанным update_id и сравнивать ее на < или > с полученным
Для работы в такой схеме необходимо договориться с сервером - какой таймаут считать допустимым, для этого у метода
Для переключения режима обмена на вебхуки существует метод InlineKeyboardMarkup
Загрузка полученных файлов
Для этого существует GET-метод
Ответ сервиса getFile
При этом запросе сервер ответит, что все Ок
Показ привью отправленной ссылки можно отключить с помощью параметра disable_web_page_preview
Для этого нужно к запросу добавить строку &disable_web_page_preview=true
Кнопки (клавиатуры)
У метода sendMessage есть еще один очень интересный параметр - reply_markup, который отвечает за быстрые ответы.
Кнопка - это объект InlineKeyboardButton, у которого только одно обязательное поле - text
Есть еще ряд полей, основное из которых - callback_data. Это данные, которые будут отправлены после нажатия кнопки пользователем. Сюда можно записывать идентификаторы из 1С (документа или справочника), числа и т.д. для последующей обработки.
Второй полезный параметр - url, в котором указывается ссылка, которая будет открыта при нажатии на кнопку
Пример JSON-описания клавиатуры
KeyboardButton с основным полем text, данный объект можно не использовать и сразу формировать массив строк.
Еще один важный параметр клавиатуры, но не обязательным, является resize_keyboard, который отвечает за "авто высоту" кнопок.
По умолчанию данный параметр установлен в false и клавиатура растягивается на высоту основной клавиатуры, что выглядит громоздко (см. скрин в примере).
Еще один опциональный параметр - one_time_keyboard, который при установке в true скрывает клавиатуру после нажатия кнопки.
ReplyKeyboardHide - Своего рода команда управления видимостью для клавиатуры
Отправка контактов
Метод похож на sendMessage за исключением нескольких обязательных полей:
phone_number - строковое представление телефонного номера
first_name - Имя контакта
Отправка документов (файлов)
За отправку файлов отвечает POST-метод
Со строковыми значениями вопросов не возникает - делаем СтрЗаменить и все, но есть еще и содержимое файла, которое нужно в итоговый запрос подсунуть.
Для решения этой проблемы у 1С есть метод ОбъединитьФайлы, который объединяет переданный в него массив файлов в один.
Разделим шаблон на части - певая это текст до %СодержимоеФайла%, а вторая это текст после %СодержимоеФайла%. Запишем эти 2 текста в файлы и используем ОбъединитьФайлы подсунув между текстовиками отправляемый файл.
Читайте также: