Перейти до основного вмісту

Оновлення учасника чату

Оновлення учасника чату — це подія Bot API, яка повідомляє про зміну статусу людини в чаті: приєднання, вихід, бан, підвищення до адміністратора. Воно приходить як обʼєкт ChatMemberUpdated зі старим і новим статусом учасника, часом зміни та, для приєднання за запрошувальним посиланням, самим посиланням. Telegram не надсилає його за замовчуванням, тож бот має запросити тип оновлення chat_member і бути адміністратором чату.

Що містить оновлення

Обʼєкт ChatMemberUpdated містить чат, користувача, який виконав дію, дату зміни в Unix-часі, попередній запис учасника та новий запис учасника. Два необовʼязкові поля описують, як людина прийшла: invite_link називає ChatInviteLink, яким вона скористалась, а via_join_request має значення true, коли адміністратор схвалив прямий запит на вступ. Запис учасника має один із шести типів: власник, адміністратор, учасник, обмежений, той, що вийшов, і заблокований. Приєднання — це перехід зі статусу «вийшов» або від відсутності запису до статусу «учасник». Порівняння старого й нового статусу дозволяє відрізнити приєднання від підвищення чи виключення.

Воно вимкнене, доки його не запросити

Коли бот реєструє вебхук або опитує getUpdates із порожнім списком allowed_updates, Telegram надсилає всі типи оновлень, крім chat_member, message_reaction і message_reaction_count. Щоб отримувати chat_member, бот має явно вказати chat_member в allowed_updates і бути адміністратором чату. Бот, який зареєстрував вебхук до того, як запросив цей тип, нічого не отримує й не бачить помилки, тож ознака відсутньої підписки — нульова кількість приєднань, схожа на тихий тиждень. Повʼязане оновлення my_chat_member повідомляє про зміну статусу самого бота, наприклад коли його додали адміністратором або видалили.

Як це використовує Autogram

Autogram підписує свій вебхук Telegram на оновлення message, my_chat_member і chat_member. Він читає chat_member, щоб відносити приєднання до іменованих запрошувальних посилань. Він ігнорує кожне оновлення без invite_link — це приєднання через публічний username каналу, виходи, виключення та підвищення — і відкидає оновлення для чатів, які жоден користувач Autogram не підключив. Людину він вважає присутньою, коли новий статус — member, administrator або creator. Час приєднання він бере з поля date оновлення, а не з моменту отримання запиту, тож оновлення, яке Telegram повторно доставив після збою, все одно показує, коли людина справді приєдналась.

Обмеження, які варто врахувати

Оновлення повідомляє про зміни з моменту підписки й не несе історії. Telegram не відтворює приєднання, що сталися до підписки, тож звіт про джерела завжди починається з дати підписки. Вебхук має швидко відповідати на кожне оновлення успішним HTTP-статусом, бо Telegram повторює невдалу доставку, а повільний обробник перетворює одне приєднання на кілька запитів. Обробляйте кожне оновлення ідемпотентно, адже повторно доставлене оновлення виглядає так само, як перше.

Застосуйте ці поняття на практиці

Автоматизуйте публікацію в Telegram за допомогою ШІ-контенту, оцінки якості та розумного планування.