feat: Send form approval data to webhook without waiting for response
Simplified approach: - Removed backend endpoint /approve (will use direct webhook) - Updated saveFormData to send data directly to n8n webhook - Fire-and-forget approach: no waiting for response - Show success message 'Ваше заявление отправлено!' after SMS verification - Uses webhook URL: https://n8n.clientright.pro/webhook/eebe58d4-0bcd-4d09-9d62-39868b110960 Flow: 1. User confirms form → SMS modal appears 2. SMS code sent automatically 3. User enters code → verified 4. Data sent to webhook (fire-and-forget) 5. Success message shown 6. Navigate to next step Files: - frontend/src/components/form/StepClaimConfirmation.tsx - backend/app/api/claims.py (removed /approve endpoint)
This commit is contained in:
@@ -92,12 +92,56 @@ export default function StepClaimConfirmation({
|
||||
setLoading(false);
|
||||
}, [claimPlanData]);
|
||||
|
||||
// Функция сохранения данных формы (TODO: реализовать сохранение)
|
||||
// Функция сохранения данных формы - отправка в webhook без ожидания ответа
|
||||
const saveFormData = useCallback(async (formData: any) => {
|
||||
console.log('💾 Сохраняем данные формы:', formData);
|
||||
// TODO: Реализовать сохранение данных в бэкенд/n8n
|
||||
// Здесь будет вызов API для сохранения отредактированных данных формы
|
||||
}, []);
|
||||
console.log('💾 Отправляем данные формы в webhook:', formData);
|
||||
|
||||
// Получаем данные из claimPlanData для формирования payload
|
||||
const claimId = claimPlanData?.claim_id || claimPlanData?.propertyName?.meta?.claim_id || '';
|
||||
const unifiedId = claimPlanData?.unified_id || claimPlanData?.propertyName?.meta?.unified_id || '';
|
||||
const sessionToken = claimPlanData?.session_token || '';
|
||||
const phone = claimPlanData?.propertyName?.applicant?.phone ||
|
||||
claimPlanData?.propertyName?.user?.mobile ||
|
||||
claimPlanData?.phone || '';
|
||||
|
||||
// Формируем payload для webhook
|
||||
const payload = {
|
||||
stage: 'form_approve',
|
||||
form_id: 'ticket_form',
|
||||
session_id: sessionToken,
|
||||
session_token: sessionToken,
|
||||
claim_id: claimId,
|
||||
unified_id: unifiedId,
|
||||
phone: phone,
|
||||
sms_verified: true, // Флаг что SMS код подтвержден
|
||||
|
||||
// Данные формы подтверждения
|
||||
form_data: formData,
|
||||
user: formData?.user || {},
|
||||
project: formData?.project || {},
|
||||
offenders: formData?.offenders || [],
|
||||
meta: formData?.meta || {},
|
||||
|
||||
// Оригинальные данные для сравнения (если есть)
|
||||
original_data: formData?.originalData || {},
|
||||
};
|
||||
|
||||
// Отправляем в webhook без ожидания ответа (fire-and-forget)
|
||||
// Используем fetch с keepalive для надежности, но не ждем ответа
|
||||
fetch('https://n8n.clientright.pro/webhook/eebe58d4-0bcd-4d09-9d62-39868b110960', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify(payload),
|
||||
keepalive: true, // Продолжить отправку даже если страница закрывается
|
||||
}).catch((error) => {
|
||||
// Тихо логируем ошибки, но не блокируем пользователя
|
||||
console.error('Ошибка отправки данных формы в webhook:', error);
|
||||
});
|
||||
|
||||
console.log('✅ Данные формы отправлены в webhook (fire-and-forget)');
|
||||
}, [claimPlanData]);
|
||||
|
||||
// Функция отправки SMS-кода
|
||||
const sendSMSCode = useCallback(async (phone: string) => {
|
||||
@@ -147,13 +191,18 @@ export default function StepClaimConfirmation({
|
||||
|
||||
if (response.ok) {
|
||||
message.success('Код подтвержден!');
|
||||
// Закрываем модалку и продолжаем с сохранением данных
|
||||
// Закрываем модалку
|
||||
setSmsModalVisible(false);
|
||||
setSmsCodeSent(false);
|
||||
smsForm.resetFields();
|
||||
|
||||
// Сохраняем данные и переходим дальше
|
||||
await saveFormData(pendingFormData);
|
||||
// Отправляем данные в webhook без ожидания ответа
|
||||
saveFormData(pendingFormData);
|
||||
|
||||
// Показываем сообщение об успешной отправке
|
||||
message.success('Ваше заявление отправлено!');
|
||||
|
||||
// Переходим дальше
|
||||
onNext();
|
||||
} else {
|
||||
message.error(result.detail || 'Неверный код');
|
||||
|
||||
Reference in New Issue
Block a user