Telegram API и Telegram Bot API Как переслать сообщение с чужого канала в свой?
Задача получить сообщение из чужого канала и переслать его в свой.
Bot API не позволяет парсить чужие каналы, поэтому для получения сообщения из канала я использую TLSharp. Получаю последнее сообщение в канале:
public async Task GetLastMessage(TLChannel channelFrom) < TLChannelMessages resp = (TLChannelMessages)await _client.GetHistoryAsync(new TLInputPeerChannel() < ChannelId = channelFrom.Id, AccessHash = channelFrom.AccessHash ?? 0, >, limit: 1000); TLMessage lastMessage = (TLMessage)resp.Messages?.Where(x => x is TLMessage).First(); return lastMessage; >
Метод возвращает переменную типа TLMessage , в это и есть сообщение. Провозился весь день, как либо распарсить его не смог. Нужно это сообщение отравить в свой канал с помощью Bot API. Обычные сообщения отправляю вот так: Текстовое сообщение:
TelegramBotClient client = new TelegramBotClient(ApiKey); await client.SendTextMessageAsync(MyChatId, "Hello World");
Сообщение с медиа:
var photos = post.Photo.Select(x => new InputMediaPhoto(x)).ToList(); botClient = new TelegramBotClient(TelegramToken); Message[] messages = await botClient.SendMediaGroupAsync( chatId: Channel, inputMedia: photos );
Как можно методу SendMediaGroupAsync передать TLMessage ? Спасибо
Настройка Telegram-бота на контроллере Wiren Board

Телеграмм-бот — это многофункциональный помощник на платформе Телеграм, который понимает команды, может обращаться в API вашего сайта или сервиса.
С помощью телеграм-бота вы можете управлять умным домом, получать состояние устройств или сделать систему напоминаний.
Подготовка
Настройка телеграм-бота на контроллере Wiren Board 6.7.2 с помощью Node-RED
Для настройки Telegram-бота на контроллере Wiren Board нам понадобится:
- установленный Node-RED и настроенный модуль WB Nodes,
- модуль node-red-contrib-telegrambot
- и созданный Telegram-бот.
Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу http://wb-ip-address:1880, например, http://192.168.42.1:1880.
В примерах мы будем создавать флоу (flows) — это блок-схемы процесса.
Создание бота
![]()
Процесс создания нового бота в мессенджере Telegram
Если у вас нет телеграм-бота, то создайте его:
- Установите клиент Telegram и зарегистрируйте аккаунт.
- Найдите в Telegram бота @BotFather и запустите его.
- Создайте нового бота и настройте его:
- введите команду /newbot ,
- задайте название бота,
- придумайте и напишите имя бота, оно должно заканчиваться на _bot .
- В сообщении об успешном создании нового бота:
- скопируйте API-токен для подключения к боту,
- нажмите на ссылку t.me/имя_вашего_бота , откроется диалог с ботом — запустите его командой /start
Всё, теперь мы готовы настраивать его на контроллере Wiren Board.
Установка модуля
![]()
Установка модуля node-red-contrib-telegrambot
Чтобы Node-RED смог работать с Telegram, установите модуль node-red-contrib-telegrambot :
- Зайдите в веб-интерфейс Node-RED.
- В правом верхнем углу вызовите меню.
- В открывшемся окне выберите вкладку Управление палитрой (Manager palette).
- Перейдите на вкладку Установка (Install), введите в поле поиска telegrambot и нажмите на клавиатуре Enter .
- Установите пакет с названием node-red-contrib-telegrambot.
- Закройте окно с настройками. Установка модуля завершена.
После установки, в левой панели появится секция telegram.
Создание ноды для бота
![]()
Создание ноды телеграм-бота
Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- В поле Bot нажмите на кнопку с карандашом, откроется окно Edit telegram bot node.
- В открывшемся окне заполните поля:
- Bot-Name — произвольное имя
- Token — API-токен, который вы получили при создании бота в мессенджере Telegram.
- Users — имена telegram-пользователей, которые смогут отправлять боту команды и получать данные.
- Update Mode — выберите Pooling
- Poll Interval — установите 1000.
- Сохраните настройки нажатием кнопки Done.
- Вы вернётесь в окно Edit sender node, в котором нажмите Cancel.
Создание ноды бота завершено, теперь мы можем использовать её для соединения с telegram-ботом.
Пересылка принятых сообщений

Флоу пересылки сообщения

Общение с ботом в чате мессенджера Telegram. Бот отправил обратно принятое сообщение
Добавьте ноду, которая будет принимать сообщения, отправленные в чат с ботом:
- Перетяните в рабочую область ноду receiver.
- Дважды кликните на ней — откроется окно Edit receiver node.
- Выберите в поле Bot созданную раньше ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
Добавьте ноду, которая будет отправлять сообщения в чат с ботом:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- Выберите в поле Bot ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
Дальше нам нужно добавить логику обработки входящих сообщений. Настройте пересылку входящих сообщений обратно в чат:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage должна быть написана строка
return msg;
После настройки всех трёх нод, соедините их между собой:
- Верхний выход ноды receiver соедините с входом функции.
- Выход функции соедините с входом ноды sender.
После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку Deploy в правой верхней части веб-интерфейса Node-RED.
Теперь перейдите в чат к боту и отправьте ему произвольное сообщение, если бот прислал это же сообщение вам в ответ, то всё настроено правильно и можно переходить к более сложным задачам.
Запрос информации с датчиков контроллера
![]()
Флоу отправки температуры процессора по запросу пользователя. Темно-зелёная нода msg.payload — это вывод отладочных сообщений в debug-консоль

Общение с ботом в чате мессенджера Telegram. Бот в ответ на команду прислал температуру процессора, но не среагировал на другие сообщения
Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин WB Nodes.
Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду /cputemp .
Перед созданием нового флоу очистите рабочее поле — это исключит ложные срабатывания на команду из чата. При очистке все настройки соединения с контроллером и телеграм-ботом сохранятся.
ChatId
![]()
Функция, которая сохраняет chatId
ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать.
В предыдущем примере chatId был в принятом сообщении, которое мы пересылали — поэтому указывать его не было нужно. Сейчас мы будем формировать своё сообщение, поэтому нам нужно знать — кто запросил данные.
Так как chatId есть в любом принятом сообщении, то мы можем его сохранить в момент получения команды, а потом подставить при формировании ответа.
Сохраните chatId в глобальной переменной флоу:
- Добавьте ноду приёма сообщений:
- Перетяните в рабочую область ноду receiver.
- Дважды кликните на ней — откроется окно Edit receiver node.
- Выберите в поле Bot созданную раньше ноду бота.
- Задайте в поле Name имя Save chatId.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Добавьте ноду, которая будет сохранять chatId:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage удалите содержимое поля ввода и введите строку:
flow.set("chatId",msg.payload.chatId);
Обработка команды

Настройка получения данных с датчиков контроллера Wiren Board
В предыдущем примере бот реагировал на любое входящее сообщение — теперь мы научим его понимать команды:
- Добавьте реакцию на команду /cputemp :
- Перетяните в рабочую область ноду command.
- Дважды кликните на ней — откроется окно Edit command node.
- Выберите в поле Bot ноду нашего бота.
- Для отображения команды в меню бота в телеграм:
- Установите галочку для Register at telegram server.
- Введите описание команды в поле Description.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Добавьте запрос температуры процессора контроллера:
- Перетяните в рабочую область ноду get, она находится в разделе Wiren Board.
- Дважды кликните на ней — откроется окно Edit get node.
- Выберите в поле Server созданное на этапе настройки WB Nodes соединение с контроллером.
- В поле Channel откройте список каналов и найдите там CPU Temperature.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Теперь настройте формирование ответного сообщения:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage удалите содержимое поля ввода и введите строки:
msg.payload = chatId: flow.get("chatId"), type: 'message', content: msg.payload >; return msg;
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- Выберите в поле Bot ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- верхний выход ноды receiver соедините с нодой Save chatId;
- верхний выход ноды command соедините со входом ноды (WB)get;
- выход ноды (WB)get соедините со входом function, где формируется сообщение;
- выход ноды function соедините со входом ноды sender.
Настройка бота завершена.
Запрос данных в телеграм-чате с ботом
Теперь проверим работу нашего бота:
- Перейдите в мессенджер Telegram.
- Откройте чат с ботом.
- Введите команду /cputemp , бот должен прислать ответ:
/cputemp 61.414
Примеры флоу из статьи
Примеры — это JSON-файлы, которые нужно загрузить в среду Node-RED:
- Скачайте архив с примером на компьютер и распакуйте его.
- Выберите в меню Node-RED пункт Import и выберите импорт из JSON.
- Выберите распакованный на первом шаге файл.
- После импорта укажите в параметрах телеграм-бота свой API-Key и имя разрешённых пользователей.
- Пересылка принятых сообщений
- Запрос информации с датчиков контроллера
- Запрос информации с нескольких датчиков контроллера одновременно
Полезные ссылки
- Node-RED
- Отправка сообщений в Telegram с помощью wb-rules.
telegram bot на java, отправка сообщений по расписанию
Хочу отправлять себе сообщения по расписанию, к примеру каждый час, для этого пользуюсь ScheduledExecutorService , в итоге получил такую структуру (код сильно урезан, но картину передать должен): Класс Main :
public class Main < public static void main(String[] args) < App bot = new App(); TelegramBotsApi telegramBotsApi; try < telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class); telegramBotsApi.registerBot(bot); >catch (TelegramApiException e) < e.printStackTrace(); >ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new ParsingExchange(), 0, 1, TimeUnit.HOURS); > @Override public void onUpdateReceived(Update update) < execute(sendMessageController.createMessage(update, "Текст")); >>
Класс ParsingExchange c методом run :
public class ParsingExchange < @Override public void run() < Listusers = new ArrayList(); users.add("какие-то данные") > >
Проблема в том, что для отправки сообщения мне надо в run вызвать execute , а он есть только в классе Main (наследование от класса из библиотеки). И я не могу понять, как я должен вызвать execute из run , ведь они должны находиться в разных классах. P.S. метод run — обязательно переопределяемый метод в ScheduledExecutorService, этот метод и будет вызываться и выполняться по моему заданному графику.
Создание Telegram бота на PHP #3: примеры отправки сообщений с кнопками в Telegram
В новом уроке мы с вами рассмотрим отправку базовых запросов в Telegram. Я покажу вам как отправлять простые текстовые сообщения в Telegram, как отправлять кнопки и дополнительные клавиатуры.
Всю информацию по параметрам запросов мы будем брать из официальной документации Telegram.
Полный список всех записей курса находится на сайте или в публикациях на Хабр.
Все ответы от Telegram приходят в виде JSON строки. Для удобного отображения массива ответа в браузере, советую вам установить специальное расширение для браузера, которое называется JSON Viewer.
Отправка простых сообщений
Для отправки простых текстовых сообщений, нам необходимо воспользоваться методом sendMessage.
Ранее я показывал вам, как отправлять запросы с передачей параметров в URL, теперь для удобства я буду использовать запись параметров в массиве и с помощью функции http_build_query мы будем формировать строку с GET параметрами.
$token = "5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU"; $getQuery = array( "chat_id" => 1424625511, "text" => "Новое сообщение из формы", "parse_mode" => "html" ); $ch = curl_init("https://api.telegram.org/bot". $token ."/sendMessage?" . http_build_query($getQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $resultQuery = curl_exec($ch); curl_close($ch); echo $resultQuery;
Каждый запрос будет иметь переменную с записанным токеном, массив с параметрами запроса, код для создания запроса через Curl и вывод или запись полученной информации.
Отправка ответа на сообщение
Для отправки ответа на ранее созданное сообщения, вам необходимо в новом запросе sendMessage отправить дополнительный параметр reply_to_message_id, передав в него id сообщения, которое вы хотите прикрепить.
Полный запрос будет выглядеть так…
$token = "5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU"; $getQuery = array( "chat_id" => 1424625511, "text" => "Новое сообщение из формы", "parse_mode" => "html", "reply_to_message_id" => 7 ); $ch = curl_init("https://api.telegram.org/bot". $token ."/sendMessage?" . http_build_query($getQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $resultQuery = curl_exec($ch); curl_close($ch); echo $resultQuery;
Удаление сообщений из чата
Для удаления сообщений, вам нужно воспользоваться методом deleteMessage и знать id сообщения которое вы хотите удалить.
Пример кода для удаления сообщений выглядит так:
$token = "5340791844:AAEXXDduvInvQrlykV91USOQSevrPVU"; $getQuery = array( "chat_id" => 1424625511, "message_id" => 32456, ); $ch = curl_init("https://api.telegram.org/bot". $token ."/deleteMessage?" . http_build_query($getQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $resultQuery = curl_exec($ch); curl_close($ch); echo $resultQuery;
Отправка кнопок в чат
На данный момент, существует 3 вида кнопок в чате, в Telegram.
- Кнопки которые прикреплены к сообщению (inline_keyboard).
- Кнопки которые располагаются под строкой ввода сообщения, они называются клавиатурой (keyboard).
- Кнопки меню команд, которые чаще всего располагаются слева от строки ввода сообщения.
Для начала давайте рассмотрим как нам добавить кнопки которые будут прикреплены к сообщению.
Для отправки таких кнопок, нам нужно воспользоваться методом sendMessage и передать ему в качестве параметра reply_markup — массив со свойствами клавиатуры.
Данный массив выглядит следующим образом…
. 'reply_markup' => json_encode(array( 'inline_keyboard' => array( array( array( 'text' => 'Button 1', 'callback_data' => 'test_2', ), array( 'text' => 'Button 2', 'callback_data' => 'test_2', ), ) ), )), .
Разберём всё по порядку.
Первое важное правило — reply_markup принимает json, поэтому для создания кнопок, вам нужно конвертировать массив в JSON с помощью функции json_encode.
В массиве с параметрами кнопок, есть особые параметры. Эти параметры, так же, указаны в документации.

- С помощью параметра text вы можете передать текст кнопки.
- параметр url указывает ссылку, если вам нужно сделать кнопку для перехода на внешний ресурс.
- параметр callback_data указывает строку которая будет возвращена после нажатия на кнопку. Данную строку используют как команду.
Массив для кнопок имеет сложную многоуровневую систему. Первый уровень отвечает за общую запись параметров, второй уровень отвечает за ряд кнопок, третий уровень отвечает за параметры кнопки.
Таким образом, для создания 2 кнопок в одном ряду, мы будем использовать следующий код

. 'reply_markup' => json_encode(array( 'inline_keyboard' => array( array( array( 'text' => 'Button 1', 'callback_data' => 'test_2', ), array( 'text' => 'Button 2', 'callback_data' => 'test_2', ), ) ), )), .
Для создания 2 рядов по 2 кнопки используйте код .

. 'reply_markup' => json_encode(array( 'inline_keyboard' => array( array( array( 'text' => 'Button 1', 'callback_data' => 'test_2', ), array( 'text' => 'Button 2', 'callback_data' => 'test_2', ), ), array( array( 'text' => 'Button 3', 'callback_data' => 'test_3', ), array( 'text' => 'Button 4', 'callback_data' => 'test_4', ), ) ), )), .
И для создания одной кнопки в первом ряду и 2 — во втором, используйте следующий код.

. 'reply_markup' => json_encode(array( 'inline_keyboard' => array( array( array( 'text' => 'Button 2', 'callback_data' => 'test_2', ), ), array( array( 'text' => 'Button 3', 'callback_data' => 'test_3', ), array( 'text' => 'Button 4', 'callback_data' => 'test_4', ), ) ), )), .
Надеюсь, я смог объяснить данную тему доступно, если у вас будут вопросы, пишите их в нашем Telegram канале.
Отправка клавиатуры в чат
Аналогичные параметры имеет и массив для отправки клавиатуры в чат. Для создания клавиатуры пропишем следующий код.
. 'reply_markup' => json_encode(array( 'keyboard' => array( array( array( 'text' => 'Тестовая кнопка 1', 'url' => 'YOUR BUTTON URL', ), array( 'text' => 'Тестовая кнопка 2', 'url' => 'YOUR BUTTON URL', ), ) ), 'one_time_keyboard' => TRUE, 'resize_keyboard' => TRUE, )), .
Структура массивом для кнопок та же, но только есть отличие в названиях и количестве параметров.
Ключ inline_keyboard заменяется на keyboard.
А так же для клавиатуры добавляются 2 дополнительных параметра:
- one_time_keyboard — скрыть клавиатуру, как только она была использована. Клавиатура по-прежнему будет доступна, но клиенты будут автоматически отображать обычную, буквенную клавиатуру в чате — пользователь может нажать специальную кнопку в поле ввода, чтобы снова увидеть пользовательскую клавиатуру. Значение по умолчанию равно false.
- resize_keyboard — изменяет размер клавиатуры по вертикали для оптимальной подгонки (например, уменьшить клавиатуру, если есть только два ряда кнопок). По умолчанию установлено значение false, и в этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.
- В новом уроке мы с вами разобрали самый популярный метод для работы с Телеграм ботами — sendMessage. Данный метод позволяет отправлять текстовые сообщения с привязанными кнопками и клавиатурами.
- Научились удалять сообщения
- Разобрали какие бывают типы кнопок и научились создавать массивы для гибкой структуры вывода дополнительных клавиатур и кнопок.
В следующем уроке, я вам покажу как отправлять файлы и изображения в чат.