📧 Sistema de Emails
Floutic utiliza un sistema de emails transaccionales completo gestionado desde el backend. Todos los emails se envían automáticamente en respuesta a eventos específicos del sistema.
🏗️ Arquitectura
Los emails transaccionales se gestionan desde el backend de FastAPI usando:
- Templates Jinja2 - Templates HTML versionados en código
- SMTP - Envío directo desde el backend
- Generación automática de texto plano - Para clientes sin soporte HTML
Los emails de marketing y campañas se gestionan desde GoHighLevel (complementarios, no críticos).
📋 Tipos de Emails por Rol
👥 Emails para Empresas
1. Bienvenida (welcome_company.html)
Cuándo se envía: Al registrarse y verificar el email como empresa.
Contenido:
- Mensaje de bienvenida personalizado
- Qué pueden esperar de Floutic
- Invitación a sesión Discovery (30-45 minutos)
- Preparación para la sesión Discovery
- Contacto:
soporte_empresas@floutic.com
Variables:
{{ username }}- Nombre de la empresa{{ kickoff_url }}- URL del calendario Discovery (opcional)
2. Match Confirmado (match_confirmed_company.html)
Cuándo se envía: Cuando se confirma un match con un experto.
Contenido:
- Presentación del experto asignado (nombre, perfil, experiencia)
- Canal de comunicación compartido
- Próximos pasos detallados:
- Presentarse en el canal con contexto del negocio
- Revisar hitos y prioridades de la sesión Discovery
- Acordar el primer hito a ejecutar
- Contacto directo para dudas
- Contacto:
soporte_empresas@floutic.com
Variables:
{{ company_name }}- Nombre de la empresa{{ expert_name }}- Nombre del experto{{ expert_role }}- Rol/especialidad del experto{{ expert_experience }}- Experiencia del experto{{ chat_url }}- URL del canal de chat{{ project_title }}- Título del proyecto (opcional)
3. Solicitud de Reseña (request_review.html)
Cuándo se envía: Automáticamente cuando un proyecto se completa.
Contenido:
- Agradecimiento por confiar en Floutic
- Solicitud de valoración interna rápida (1 minuto)
- Invitación a dejar reseña pública del experto
- Enlaces a formularios de feedback y reseña
- Contacto:
soporte_empresas@floutic.com
Variables:
{{ company_name }}- Nombre de la empresa{{ project_title }}- Título del proyecto{{ project_reference }}- Referencia del proyecto (ej: "#123 - Proyecto Test"){{ feedback_url }}- URL del formulario de feedback (opcional){{ review_url }}- URL para dejar reseña (se genera automáticamente si no se proporciona)
🎓 Emails para Expertos
1. Bienvenida (welcome_expert.html)
Cuándo se envía: Al registrarse y verificar el email como experto.
Contenido:
- Mensaje de bienvenida al ecosistema de expertos
- Qué pueden esperar de Floutic
- Próximos pasos:
- Completar perfil de experto
- Pasar verificación oficial (IDV, portfolio, certificaciones, entrevista técnica)
- Soporte y acompañamiento
- Contacto:
soporte_expertos@floutic.com
Variables:
{{ username }}- Nombre del experto{{ expert_profile_url }}- URL del perfil de experto
2. Match Confirmado (match_confirmed_expert.html)
Cuándo se envía: Cuando se confirma un match con un cliente.
Contenido:
- Información del cliente y proyecto
- Razón del match (experiencia relevante)
- Canal de comunicación compartido
- Próximos pasos detallados:
- Revisar alcance y hitos del proyecto
- Presentarse en el canal y resolver dudas
- Confirmar el primer hito
- Contactar Floutic si algo no encaja
- Buenas prácticas Floutic
- Información sobre facturación por hitos
- Contacto:
soporte_expertos@floutic.com
Variables:
{{ expert_name }}- Nombre del experto{{ client_name }}- Nombre del cliente{{ client_sector }}- Sector del cliente (opcional){{ project_summary }}- Resumen del proyecto{{ project_reference }}- Referencia Floutic{{ match_reason }}- Razón del match{{ chat_url }}- URL del canal de chat
🔄 Emails Comunes
1. Verificación de Email (verify_email.html)
Cuándo se envía: Al registrarse, antes de activar la cuenta.
Variables:
{{ username }}- Nombre del usuario{{ verification_url }}- URL de verificación (expira en 48 horas)
Notas de seguridad:
- El reenvío está limitado por tiempo (
EMAIL_VERIFICATION_RESEND_LIMIT_MINUTES) - Se registra la IP de solicitud para auditoría (headers de proxy con fallback)
2. Recuperación de Contraseña (password_reset.html)
Cuándo se envía: Cuando se solicita recuperación de contraseña.
Variables:
{{ username }}- Nombre del usuario{{ reset_url }}- URL de recuperación{{ expires_at }}- Fecha de expiración
3. Reseña Recibida (review_received.html)
Cuándo se envía: Cuando alguien deja una reseña.
Variables:
{{ reviewed_name }}- Nombre del usuario reseñado{{ reviewer_name }}- Nombre del revisor{{ rating }}- Calificación (1-5 estrellas){{ project_title }}- Título del proyecto{{ review_url }}- URL para ver la reseña
📧 Emails de Proyectos
Para Empresas
Nueva Aplicación (project_application.html)
Cuándo se envía: Cuando un experto aplica a un proyecto.
Variables:
{{ company_name }}- Nombre de la empresa{{ project_title }}- Título del proyecto{{ expert_name }}- Nombre del experto{{ project_url }}- URL del proyecto
Proyecto Aprobado/Rechazado (project_approved.html, project_rejected.html)
Cuándo se envía: Cuando un administrador aprueba o rechaza un proyecto.
Variables:
{{ company_name }}- Nombre de la empresa{{ project_title }}- Título del proyecto{{ status }}- Estado del proyecto{{ reason }}- Razón (opcional){{ project_url }}- URL del proyecto
Para Expertos
Experto Seleccionado (expert_selected.html)
Cuándo se envía: Cuando una empresa selecciona a un experto.
Variables:
{{ expert_name }}- Nombre del experto{{ project_title }}- Título del proyecto{{ company_name }}- Nombre de la empresa{{ project_url }}- URL del proyecto
Invitación a Proyecto (expert_invited.html)
Cuándo se envía: Cuando un administrador invita a un experto a un proyecto.
Variables:
{{ expert_name }}- Nombre del experto{{ project_title }}- Título del proyecto{{ project_budget }}- Presupuesto del proyecto{{ project_deadline }}- Fecha límite (opcional){{ project_url }}- URL del proyecto
📧 Emails de Hitos
Para Empresas
Hito Completado (milestone_completed.html)
Cuándo se envía: Cuando un experto completa un hito.
Variables:
{{ company_name }}- Nombre de la empresa{{ milestone_title }}- Título del hito{{ expert_name }}- Nombre del experto{{ project_title }}- Título del proyecto{{ milestone_url }}- URL del hito
Para Expertos
Hito Aprobado (milestone_approved.html)
Cuándo se envía: Cuando una empresa aprueba un hito.
Variables:
{{ expert_name }}- Nombre del experto{{ milestone_title }}- Título del hito{{ project_title }}- Título del proyecto{{ project_url }}- URL del proyecto
Hito Rechazado (milestone_rejected.html)
Cuándo se envía: Cuando una empresa rechaza un hito y solicita revisión.
Variables:
{{ expert_name }}- Nombre del experto{{ milestone_title }}- Título del hito{{ project_title }}- Título del proyecto{{ rejection_reason }}- Razón del rechazo (opcional){{ project_url }}- URL del proyecto
💰 Emails de Pagos
Para Expertos
Pago Liberado (payment_released.html)
Cuándo se envía: Cuando se libera un pago al experto.
Variables:
{{ expert_name }}- Nombre del experto{{ amount }}- Cantidad del pago{{ amount_formatted }}- Cantidad formateada{{ project_title }}- Título del proyecto{{ milestone_title }}- Título del hito (opcional){{ project_url }}- URL del proyecto
Pago Recibido (payment_received.html)
Cuándo se envía: Cuando un experto recibe un pago.
Variables:
{{ expert_name }}- Nombre del experto{{ amount }}- Cantidad del pago{{ project_title }}- Título del proyecto{{ payment_url }}- URL del pago
🔔 Otros Emails
Mensaje Recibido (message_received.html)
Cuándo se envía: Cuando llega un nuevo mensaje en el chat del proyecto.
Variables:
{{ recipient_name }}- Nombre del destinatario{{ sender_name }}- Nombre del remitente{{ project_title }}- Título del proyecto{{ preview }}- Vista previa del mensaje (opcional){{ project_url }}- URL del proyecto
Disputa (dispute_notification.html)
Cuándo se envía: Cuando se crea o resuelve una disputa.
Variables:
{{ recipient_name }}- Nombre del destinatario{{ project_title }}- Título del proyecto{{ message }}- Mensaje de la disputa{{ project_url }}- URL del proyecto
🔧 Configuración
Variables de Entorno
# SMTP Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
EMAIL_FROM_NAME=Floutic
EMAIL_FROM_ADDRESS=noreply@floutic.com
# Frontend URLs (para enlaces en emails)
FRONTEND_URL=https://app.floutic.com
# URLs de calendarios (opcionales)
COMPANY_KICKOFF_CALENDAR_URL=https://calendly.com/floutic/discovery
EXPERT_ONBOARDING_CALENDAR_URL=https://calendly.com/floutic/onboarding
Estructura de Templates
Todos los templates extienden de email_base.html que proporciona:
- Estructura HTML base
- Header con logo y tagline
- Footer con copyright
- Bloques personalizables:
{% block page_title %}- Título de la página{% block content %}- Contenido principal{% block contact_block %}- Bloque de contacto{% block signature_block %}- Firma personalizada
📝 Ejemplo de Uso
from app.services.email_service import email_service
# Enviar email de bienvenida
await email_service.send_welcome_email(
user_email="empresa@example.com",
username="Empresa Test",
role="empresa"
)
# Enviar email de solicitud de reseña
await email_service.send_review_request_email(
company_email="empresa@example.com",
company_name="Empresa Test",
project_title="Proyecto Automatización",
project_reference="#123 - Proyecto Automatización",
project_id=123,
expert_id=456
)
🧪 Testing
Todos los emails tienen tests unitarios en tests/unit/test_services.py que verifican:
- Renderizado correcto de templates
- Envío con parámetros correctos
- Generación automática de enlaces
- Contenido HTML y texto plano
📊 Métricas
Los emails se envían de forma asíncrona y los errores se registran en los logs. Para monitoreo:
- Revisar logs del backend para errores de envío
- Verificar configuración SMTP si hay problemas de entrega
- Los emails fallidos no bloquean el flujo principal (se registran como warnings)
🔗 Enlaces de Contacto
- Empresas:
soporte_empresas@floutic.com - Expertos:
soporte_expertos@floutic.com - General:
hola@floutic.com(en algunos emails legacy)