State machine — это схема, где бот помнит, на каком этапе диалога находится пользователь, и по-разному реагирует на его сообщения в зависимости от текущего состояния.
Пример: юзер выбрал "Купить" → бот переходит в state "payment_waiting" → теперь бот ждёт номер карты, а не команду /start. Если вернуть /start, бот вернёт юзера в начало, а не усложнит процесс платежа. Без state machine каждый update обрабатывается одинаково — бот путается в контексте.
Типичные состояния:
— idle (ожидание команды)
— collecting_data (сбор информации)
— payment_waiting (ожидание платежа)
— confirmation (подтверждение действия)
Зачем это нужно: юзер не перезагружает диалог случайно нажатой кнопкой, бот знает, что ему дальше просить, логика работает предсказуемо. Без неё получаешь каши из багов, где кнопки ведут в неправильные места, а состояние данных постоянно сбивается.
Реализуй state machine через словарь или базу: храни user_id → текущее state. При каждом update проверяй state, выполняй нужную логику, меняй state. Это не сложно, но экономит часы отладки. Начни с 3–4 состояний — разрастётся по мере роста функций.
Кустов о Telegram-ботах
@kustov_bot_funnels
State machine: как не потерять юзера в диалоге бота
Этот пост опубликован в Telegram-канале Кустов о Telegram-ботах. Подписаться можно по ссылке: @kustov_bot_funnels.