Так ещё раз: клиент завис, переоткрылся, отправляет такое же сообщение с другим UUID. Вставлять запись - дублировать данные. Не вставлять запись - надо знать, что это дубликат, на стороне бэкэнда.
Можно передавать с каждым следующим действием счетчик действий. Только после получения успешного ответа увеличивать счетчик на 1, в противном случае – оставлять тем же и воспроизводить действие. На сервере добавляем простую проверку, в рамках сесии, какой номер действия был последний, и если у нас payload прилетел с таким-же – возвращаем созданную сущность.
По-моему это один из стандартных механизмов при использовании wss, но можно и на обычный http REST перенести