fix: Интеграция n8n webhook для создания контакта после SMS

- Step1Phone теперь вызывает n8n webhook после SMS верификации
- Webhook создаёт/находит контакт в CRM через CreateWebContact
- Возвращает: contact_id, claim_id, is_new_contact
- Данные сохраняются в formData для дальнейшей работы
- Исправлена нормализация телефона в sms_service (убираем +)
- Отключен rate limiting SMS для тестирования
- Backend подключён к внешнему Redis (crm.clientright.ru:6379)
- Добавлены поля contact_id, is_new_contact в FormData
- Frontend пересобран с новым кодом
This commit is contained in:
AI Assistant
2025-11-01 13:31:05 +03:00
parent 8c21450e4a
commit 89a182bc7b
4 changed files with 84 additions and 17 deletions

View File

@@ -121,13 +121,17 @@ class SMSService:
Returns:
str: Код верификации (для отладки) или None при ошибке
"""
# Нормализуем формат телефона (убираем + если есть)
phone = phone.replace("+", "").replace("-", "").replace(" ", "")
# Проверка rate limiting (не больше 1 SMS в минуту на номер)
# ВРЕМЕННО ОТКЛЮЧЕНО для тестирования
rate_limit_key = f"sms_rate:{phone}"
if await redis_service.exists(rate_limit_key):
ttl = await redis_service.client.ttl(f"{settings.redis_prefix}{rate_limit_key}")
logger.warning(f"Rate limit for {phone}, retry in {ttl} seconds")
return None
# if await redis_service.exists(rate_limit_key):
# ttl = await redis_service.client.ttl(f"{settings.redis_prefix}{rate_limit_key}")
# logger.warning(f"Rate limit for {phone}, retry in {ttl} seconds")
# return None
# Генерируем код
code = self.generate_code()
@@ -137,7 +141,8 @@ class SMSService:
await redis_service.set(verification_key, code, expire=600) # 10 минут
# Устанавливаем rate limit на 60 секунд
await redis_service.set(rate_limit_key, "1", expire=60)
# ВРЕМЕННО ОТКЛЮЧЕНО для тестирования - убрать задержку
# await redis_service.set(rate_limit_key, "1", expire=60)
# Формируем сообщение
message = f"Ваш код подтверждения: {code}. Действителен 10 минут."
@@ -164,20 +169,25 @@ class SMSService:
Returns:
bool: True если код верный
"""
# Нормализуем формат телефона (убираем + если есть)
phone = phone.replace("+", "").replace("-", "").replace(" ", "")
verification_key = f"sms_verify:{phone}"
stored_code = await redis_service.get(verification_key)
if not stored_code:
logger.warning(f"No verification code found for {phone}")
logger.warning(f"No verification code found for {phone} (key: {verification_key})")
return False
logger.info(f"🔍 Comparing codes: stored='{stored_code}' vs input='{code}' (types: {type(stored_code).__name__} vs {type(code).__name__})")
if stored_code == code:
# Удаляем код после успешной проверки
await redis_service.delete(verification_key)
logger.info(f"✅ Code verified for {phone}")
return True
else:
logger.warning(f"Invalid code for {phone}")
logger.warning(f"Invalid code for {phone}: expected '{stored_code}', got '{code}'")
return False