Как получать сообщения в групповых чатах с помощью telegram bot api
Мой бот Telegram получает сообщения, отправленные пользователем на мой бот в приватных чатах, но не получает сообщения, отправленные пользователями в групповых чатах. Любые параметры / API для получения сообщений группового чата также.
6 ответов
Поговорите с @botfather и отключите режим конфиденциальности.
Последовательность внутри чата BotFather:
Вы: / setprivacy
BotFather: Выберите бота, чтобы изменить настройки групповых сообщений.
Вы: @your_name_bot
BotFather: 'Enable' - ваш бот будет получать только сообщения, которые либо начинаются с символа '/', либо упоминают бота по имени пользователя.
"Отключить" - ваш бот будет получать все сообщения, которые люди отправляют в группы.
Текущий статус: ВКЛЮЧЕНО
Вы: Отключить
BotFather: Удачи! Новый статус: ОТКЛЮЧЕН. /Помогите
По умолчанию бот будет получать только сообщения, адресованные ему любым пользователем напрямую через публикацию /command@YourBot any message you send
. После этого он будет доступен через вызов API getUpdates. В браузере это будет:
https://api.telegram.org/botToken/getupdates
Найдите соответствующее сообщение в выходном JSON и возьмите chatId. Это позволит вам ответить:
https://api.telegram.org/botToken/sendmessage?chat_id=123456788&text=My Answer
если вы добавили своего бота до отключения режима конфиденциальности, вы должны удалить бота из группы и добавить его снова
Вы можете получить доступ ко всем доступным настройкам всех своих ботов, отправив /mybots
к Botfather
. Выберите бота, затем Настройки бота и Конфиденциальность группы.. Если он отключен (по умолчанию), вы можете нажать " Выключить".
Теперь можно получить историю чата, используя GetUpdates
. Это можно сделать через HTTP API или фреймворки. Например, в C# (.NET Core) вот так:
var bot = new TelegramBotClient(ApiToken);
var updates = bot.GetUpdatesAsync().Result;
foreach(var update in updates) {
Console.WriteLine($"{update.ChannelPost.Date} {update.ChannelPost.Text}");
}
Но имейте в виду, что эта функция имеет своего рода идеальную прямую секретность. Таким образом, вы получаете только те сообщения, которые были отправленыпосле отключения групповой конфиденциальности. В результатеGetUpdates
результат пуст, пока не будет опубликовано какое-то сообщение.