Telegram: не повторять отправку при ошибке "chat not found"#113
Open
orkhv wants to merge 1 commit into
Open
Conversation
… отправку Пользователь может попасть в SHM без запуска бота (Telegram Login Widget, внешний API) — chat_id записан, но личного чата с ботом не существует. Каждая отправка падала с "Bad Request: chat not found", задачи в spool бесконечно повторялись. - http(): обработка ошибок API вынесена в set_profile_status_by_error(); 403 -> kicked (как раньше), 400 "chat not found" -> chat_not_found - send(): профили со статусом chat_not_found пропускаются до похода в API - profile(): сброс кэша user_tg_settings при смене профиля, иначе в цикле отправки по профилям статус читался от предыдущего профиля Статус восстанавливается в member при первом сообщении пользователя боту (auth), как и раньше. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Проблема
Пользователь может попасть в SHM без запуска бота: регистрация через Telegram Login Widget (
web_authсregister_if_not_exists), привязка телеграма через внешний API. В настройках появляются валидныеchat_id/user_id/status: member, но личного чата с ботом на стороне Telegram не существует — чат создаётся только когда пользователь сам нажимает Start.Каждая отправка такому пользователю падает с
400 Bad Request: chat not found, задачи в spool повторяются бесконечно, лог заполняется ошибками:Решение
Расширяет существующий механизм
403 -> kickedвhttp():http(): обработка ошибок API вынесена в методset_profile_status_by_error():403->kicked(как раньше),400+chat not found-> новый статусchat_not_found. Одна точка на все вызовы API (send, task_send, bot-команды).send(): профили со статусомchat_not_foundпропускаются до похода в API — рядом с существующей проверкойkicked/left.profile(): сброс кэшаuser_tg_settingsпри смене профиля. Без этого в цикле отправки по профилям статус читался от предыдущего профиля.Жизненный цикл статуса
Данные лечатся сами: битые записи помечаются при первой отправке, после запуска бота пользователем
auth()возвращаетmember— как и раньше. Миграция не нужна. Найти всех пользователей без чата можно запросом поstatus = 'chat_not_found'.🤖 Generated with Claude Code