Сталкивался с похожей проблемой в разработке своего бота. Исправил эту проблему так:
Создал поле Map userMap; и Набор состояний отдельным классом State (можно реализовать через enum или иным удобным образом)
при обращении пользователя к боту вносил его в это поле, когда приходил новый запрос к боту - проверял есть ли пользователя в userMap. Если есть пользователь в списке - продолжить с его State, если нету - начать со стартового state
Код@Override
public void onUpdateReceived(Update update) {
if (update.hasMessage()) {
Message inMessage = update.getMessage();
long chatId = inMessage.getChatId();
botState = switchBot(inMessage.getFrom());
if (botState == State.main) {
if (inMessage.hasText()) {
...
} else if (botState == State.newOrder) {//заявка записаться
String positiveAnswer = "Спасибо, мы Вам перезвоним";
String messageAdminsText = "";
...
} else if (botState == State.dev) { //команды разработчика
if (inMessage.hasText() && inMessage.getFrom().getUserName().equals(Const.DEV)) {
...
Это не лучший способ, можно сделать лучше и через потоки, но я не стал сильно заморачиваться с этим