Как выборочно отправить сообщение в определенный Telegram-канал через Java-бота?

«Как выборочно отправить сообщение в определенный Telegram-канал через Java-бота?» — вопрос из категории Other, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, используя Telegram Bot API. Для этого бот должен быть администратором целевого канала, а вызов метода отправки должен использовать уникальный идентификатор канала.

Ключевые шаги:

  1. Получить ID канала: ID канала обычно начинается с -100. Его можно получить, добавив бота в канал и отправив туда любое сообщение, а затем проверив update.getChannelPost().getChatId() в логах.
  2. Хранить список каналов: ID каналов для выбора можно хранить в базе данных, конфигурационном файле или Map<String, String> (название -> ID).
  3. Отправить сообщение:

Пример кода с использованием библиотеки telegrambots:

import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;

public class ChannelBot extends TelegramLongPollingBot {

    public void sendToSelectedChannel(String channelId, String text) {
        SendMessage message = new SendMessage();
        message.setChatId(channelId); // Например, "-1001234567890"
        message.setText(text);
        // Можно добавить разметку: message.setParseMode("HTML");

        try {
            execute(message);
        } catch (TelegramApiException e) {
            // Обработка ошибок (нет прав, неверный ID и т.д.)
            e.printStackTrace();
        }
    }

    // Методы getBotUsername() и getBotToken()...
}

Практический совет: Для управления списком каналов реализуйте простой сервис, который по ключу (например, названию компании) будет возвращать соответствующий channelId из хранилища.