Как получать данные о блокировке бота пользователем?

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".