Telegram бот и Mini App могут получать данные (Update) в момент блокировки бота пользователем.
Graspil учитывает такие данные и имеет соответствующие отчеты. Это важные данные, которые влияют на другие отчеты, например, на процент отказов. Если вы не видите данные об уходах пользователей, то либо у вас их нет, либо у вас отключено получение таких данных.
В Telegram Bot API вам нужно включить получение данных типа my_chat_member. После этого Telegram начнет присылать соответствующие update при блокировке бота пользователем.
Если бот работает через метод getUpdates
Вам нужно обратить внимание на метод getUpdates, который получает Update из Telegram. В нем есть параметр allowed_updates, в нем перечисляются типы данных, которые будут возвращаться. Добавьте туда my_chat_member
или оставьте его пустым, чтобы получать все типы данных.
Если бот работает через метод Webhook
Чтобы узнать, какие типы данных сейчас получает ваш бот, воспользуйтесь методом getWebhookInfo. В параметре allowed_updates будут перечислены типы Update, которые присылает вам Telegram.
Чтобы изменить эти настройки, воспользуйтесь методом setWebhook. В параметре allowed_updates нужно перечислить данные, которые вы хотите получать от Telegram, то есть нужно перечислить все, что уже задано у бота, и добавить my_chat_member. Либо оставьте allowed_updates пустым, чтобы получать все типы данных.
Не забывайте правильно заполнить остальные параметры в запросе.
Тестирование
После внесения изменений проверьте работу бота. Убедитесь, что при блокировке и повторном запуске ваш бот работает корректно и не выдает ошибок.
Этих действий достаточно, чтобы graspil начал учитывать эти параметры.
Пример данных my_chat_member
{
"update_id": 123456,
"my_chat_member": {
"chat": {
"id": 123456,
"first_name": "You",
"last_name": "are",
"username": "cool",
"type": "private"
},
"from": {
"id": 123456,
"is_bot": false,
"first_name": "You",
"last_name": "are",
"username": "cool",
"language_code": "en",
"is_premium": true
},
"date": 1740227800,
"old_chat_member": {
"user": {
"id": 123,
"is_bot": true,
"first_name": "graspil_bot",
"username": "graspil_bot"
},
"status": "member"
},
"new_chat_member": {
"user": {
"id": 123,
"is_bot": true,
"first_name": "graspil_bot",
"username": "graspil_bot"
},
"status": "kicked",
"until_date": 0
}
}
}
Обратите внимание на параметры old_chat_member и new_chat_member. В них есть параметр status, в значении которого указан новый статус пользователя. В примере выше видно, что старый статус "member", а новый "kicked", то есть пользователь заблокировал бота.
Данные типа my_chat_member приходят в бот не только когда пользователь блокирует бота, но и когда он запускает его повторно. В этом случае ситуация со статусом будет противоположная: новый new_chat_member.status будет равен "member".