Как получать сообщения в групповых чатах с помощью 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 результат пуст, пока не будет опубликовано какое-то сообщение.

Другие вопросы по тегам