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:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user