Когда приходит сообщение, я проверяю контекст:
Код: Выделить всё
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