NuevoAtiende 24
- ContactConversations acepta refreshKey; se recarga al enviar WhatsApp/correo - Mensajes de WhatsApp en verde (emerald) para diferenciarlos de los correos (azul)
NuevoAtiende 24
- attend-send-whatsapp: texto libre (ventana 24h) o plantilla; crea ticket y registra mensaje - Botón 'WhatsApp' en la ficha del contacto; aviso si no hay número conectado o fuera de ventana 24h
NuevoAtiende 24
CorregidoAtiende 24
Quita espacios y antepone +34; valida móvil/fijo español antes de insertar
NuevoAtiende 24
Inputs Desde/Hasta + limpiar; filtra por created_at
NuevoAtiende 24
attend-reply-email admite adjuntos; UI de adjuntar en el bloque Responder del modal
NuevoAtiende 24
- sendEmail (Brevo/Resend) admite attachments en base64 - attend-compose-email acepta adjuntos con tope ~9.5MB y los registra - Compositor: adjuntar archivos, lista con tamaño y quitar, tope ~7MB
NuevoAtiende 24
Botón '+ Nuevo' + modal (nombre/email/teléfono) que crea el contacto y lo selecciona
NuevoAtiende 24
- Edge function attend-compose-email: crea ticket email, envía con firma y registra evento - Botón 'Redactar correo' en Correos enviados + 'Enviar correo' desde la ficha de contacto - Modal compositor con buscador de con…
NuevoAtiende 24
NuevoAtiende 24
Sustituye el desplegable de tipo por pills con el color de cada tipo
NuevoAtiende 24
- Columna signature_text (texto plano editable); signature_html se genera al guardar - Editor 'Firma del correo' en Ajustes con auto-enlazado de URLs - Firma de Tecomed cargada (se añade a todas las respuestas)
NuevoAtiende 24
- Modal a 4xl en 2 columnas: mensaje+responder / metadatos por tarjetas - Bloque 'Responder' con envío por email al remitente (Enviar / Enviar y resolver) - Nueva edge function attend-reply-email: reutiliza o crea ticket…
NuevoAtiende 24
- Buscador de contactos (nombre/email/teléfono) con lista seleccionable - Reutiliza ContactConversations: correos recibidos+enviados, llamadas y WhatsApp en timeline - Enlace a la ficha del contacto
NuevoAtiende 24
- Excluye status='spam' de Correos recibidos - Botón 'Marcar como spam' en Recibidos - Pestaña Spam con 'No es spam' y 'Borrar', link a Ajustes → Spam
NuevoAtiende 24
- Columna deleted_at (borrado suave) en attend_inbound_emails - Checkboxes + seleccionar todo + botón Borrar en Correos recibidos - 4ª pestaña Borrados con Restaurar y Eliminar definitivamente
NuevoAtiende 24
NuevoAtiende 24
- Trigger attend_default_inbound_address: cada organización nueva recibe <slug>@phoneia.es con recepción activa - Backfill de empresas existentes sin dirección - Botón 'Generar dirección' en Atiende 24 → Ajustes + ayuda…
CorregidoAtiende 24
attend_settings no tiene columna id: el select fallaba (siempre "sin configurar") y el guardado insertaba duplicados. Se quita id y se guarda con upsert por organization_id.
NuevoReservas
NuevoReservas
Vista de mes con navegacion (‹ Hoy ›), reservas por día coloreadas por servicio, resaltado del día actual y +N más cuando hay muchas.
NuevoReservas
booking-create solo confirmaba al cliente. Ahora también envia un email de aviso al negocio (reply_to_email o email del admin) y crea una notificación in-app.
CorregidoReservas
La pagina publica /reserva?org=slug es anonima y no podía resolver la org (RLS solo permitia a authenticated su propia org), mostrando "Negocio no encontrado".
MejoraReservas
El helper sendEmail prefiere Brevo y usa Resend solo de alternativa; los emails de reserva ya funcionan con Brevo. Se sustituye el aviso desfasado.
MejoraInmobiliarias
NuevoInmobiliarias
CorregidoPlataforma
/demo (inmobiliaria) y /secretaria-ia/demo firman una sesión anonima nueva antes de su RPC, evitando que start_demo/start_secretaria_demo devuelvan por reentrancia la org de la demo probada antes.
MejoraCRM
MejoraCRM
Unifica "Defaults" (global) y "Configurar" (por campana) en un único modal con dos pestanas. Se quitan los dos botones antiguos.
NuevoCRM
Historial abre las conversaciones del contacto; Reactivacion permite anadirlo a una campana existente (crea reactivation_target en_cola, sin duplicar).
MejoraCRM
Cada campana es de un tipo y hereda los defaults de su canal; se quita el selector "canal por defecto" que no encajaba con el planteamiento de dos tipos.
MejoraCRM
MejoraCRM
MejoraWeb y marca
NuevoCRM
Pagina /app/actividad (bajo CRM): todas las conversaciones de todos los contactos en cronologico, filtrable por comercial y canal (+ solo lo mio). Cada item enlaza a la ficha del contacto. useComerciales expone meId.
NuevoPlataforma
Componente ContactConversations: línea de tiempo con llamadas (resumen, audio, transcripcion), mensajes de WhatsApp y correos, ordenados por fecha.
NuevoPlataforma
- /app/pipeline-leads/ajustes: bienvenida (canal/plantilla/agente/horario) + instrucciones IA de cualificacion propias (attend_settings.lead_ai_instructions).
NuevoCRM
Tabla assignment_rules + motor apply_assignment_rules (match por portal/zona/tipo, destino a un comercial o round-robin) + trigger AFTER INSERT en opportunities para leads de portal sin owner.
MejoraCRM
MejoraCRM
NuevoPlataforma
NuevoPlataforma
seed_secretaria_demo_extras crea 8 leads con portal + lead_stage por todas las etapas (nuevo → ganado + no contactable). Aplicado a la demo actual y a la persistente; futuras demos salen con el pipeline poblado.
NuevoPlataforma
Org no caducable + usuario de login fijo, sembrada; reset_showcase_demo() borra y recrea la org limpia cada noche (cron 04:15) conservando el login.
MejoraWeb y marca
NuevoPlataforma
- /app/rendimiento/: panel admin con cartera y actividad por comercial + sin asignar. - Respuestas rapidas (tabla quick_replies) en Mi bandeja: insertar y "guardar como rápida".
NuevoPlataforma
- Notificaciones (tabla + RLS + helper notify) y campana en el topbar (contador, marcar leidas, realtime). - Escalado de la secretaria genera notificación al responsable.
NuevoPlataforma
El demo de Secretaria IA es efímero (org por visita, se borra a la hora), así que se siembra en el origen: start_secretaria_demo activa multiagente y llama a seed_secretaria_demo_extras (secretaria personal con capacidad…
NuevoCRM
Nuevo módulo /app/documentos/: fichas (nombre, versión, categoría, inmueble opcional, fecha de alta) con varios adjuntos en Storage privado. Enlaces seguros con caducidad (7 días) por archivo o todos a la vez.
NuevoAtiende 24
Botón "Traducir" bajo cada mensaje del cliente en la bandeja, vía nueva edge function translate-text (Claude, JWT de usuario). Apoyo de lectura para el comercial cuando el mensaje llega en otro idioma.
NuevoAtiende 24
- Configurar: toggles responder auto / traducir al idioma / agendar / escalar (columnas nuevas en secretaria_agents).
CorregidoAtiende 24
attend_tickets.status es open/in_progress/awaiting_customer/resolved/closed/ escalated (no pending/waiting). Corrige etiquetas, colores y el filtro de abiertos en Mi bandeja y el KPI "requieren tu atención".
NuevoPlataforma
La sección de asientos y la columna "Secretaria IA" en Equipo ahora solo aparecen si modules.multiagente está activo, coherente con el menú Mi Secretaria.
NuevoCRM
Añade contacts.owner_id (migración) y un hook useComerciales + BulkAssignModal reutilizables. Selectores "Responsable" (solo admin) en: ficha de contacto, ficha de oportunidad y detalle de lead (reasignar).
NuevoAtiende 24
Nuevo menú "Mi Secretaria" (solo para comerciales con asiento; admin con selector de comercial): Resumen+KPIs, Mi bandeja (attend_tickets assigned_to), Citas y oportunidades (bookings.staff_id + opportunities.owner_id) y…
CorregidoWeb y marca
El Topbar dependía de su propia consulta con embed a organizations, que fallaba silenciosamente por la doble FK (organization_id + home_org_id) y dejaba el nombre en '—' y el avatar en '?'.
CorregidoWeb y marca
Al añadir profiles.home_org_id, el embed organizations(...) quedó ambiguo (dos FKs a organizations) y la consulta del perfil fallaba → topbar sin nombre. Se fija la FK profiles_organization_id_fkey.
CorregidoWeb y marca
En instancias demo el topbar mostraba "Visitante demo" genérico; ahora muestra "<empresa> · demo" para identificar de qué demo se trata.
NuevoCRM
- reactivation-tick: cron cada 5 min que procesa reintentos de todas las campañas activas (programado con cron_invoke_edge) - whatsapp-webhook: si un frío responde → estado 'interesado'; si la IA crea/avanza oportunidad…