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:
AI Assistant
2025-11-25 11:58:29 +03:00
parent c9a2b95983
commit 82f4bf818b
2 changed files with 143 additions and 8 deletions

View File

@@ -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 || 'Неверный код');