Бот Spring Boot Telegram: контекст имеет значение null, но чат не зарегистрирован для команд /skip и /cancelJAVA

Программисты JAVA общаются здесь
Anonymous
Бот Spring Boot Telegram: контекст имеет значение null, но чат не зарегистрирован для команд /skip и /cancel

Сообщение Anonymous »

У меня есть бот Telegram, созданный с помощью Spring Boot. Он использует маршрутизатор с картой ConversationContext для управления состоянием пользователя.
Когда приходит сообщение, я проверяю контекст:

Код: Выделить всё

if (context == null) {
context = createNewContext(chatId, message);
contexts.put(chatId, context);
chatService.registerTelegramChat(chatId);
}
Это отлично работает для большинства команд и даже для простых текстовых сообщений — чат регистрируется.
Однако для таких команд, как /skip и /cancel (когда они являются первой командой пользователя), чат НЕ регистрируется.
Журналы показывают, что контекст имеет значение null:
IS CONTEXT NULL true
Но затем я получаю исключение:
/>NoSuchFirstStateException: такого первого состояния для типа команды: /skip нет.
Поэтому похоже, что createNewContext() завершается с ошибкой до вызова RegisterTelegramChat().
Насколько я понимаю, /skip и /cancel не являются «первыми» командами, поэтому у них нет начального состояния.
Вопросы:
1. Как правильно обрабатывать такие команды, как /skip и /cancel, при отсутствии существующего контекста?

2. Следует ли отделить регистрацию в чате от инициализации контекста?

3. Лучше ли назначить состояние по умолчанию (например, UNKNOWN или IDLE) для неначальных команд?
Подробности архитектуры:

- Spring Boot

- Пользовательский маршрутизатор с реестром CommandHandler

- Перечисление ConversationState с «первыми» состояниями
Будем признательны за любые рекомендации по обработке состояний диалога в ботах Telegram.

Подробнее: https://stackoverflow.com/questions/799 ... for-skip-a

Вернуться в «JAVA»