Ir al contenido

Fusionar contactos duplicados

Los contactos se duplican fácil: una persona escribe desde dos números, te manda un email, o vino dos veces por canales distintos. Brote detecta estos duplicados y te permite unirlos.

Brote agrupa contactos por:

  • Teléfono exacto (mejor señal, casi siempre indica misma persona)
  • Email exacto (case-insensitive)
  • visitor_id del widget (mismo browser que volvió en sesiones distintas)
  • Nombre normalizado (lowercase, sin acentos, sin espacios extras) — pero solo cuando el contacto tiene phone o email. Sin esos datos (visitantes anónimos del widget), Brote NO usa el nombre para detectar duplicados.

Si el mismo grupo aparece por dos criterios distintos (ej: phone + name), solo se muestra el match más confiable: phone > email > visitor_id > name.

Cuando alguien escribe por el widget embebido (sin dejar nombre ni contacto), Brote lo guarda como "Visitante web" con un visitor_id UUID generado en su browser. Estos contactos no son duplicados entre sí aunque compartan el nombre — son personas distintas.

Brote los reconoce porque están en la blacklist ANONYMOUS_NAMES (Visitante web, Web visitor, Anonymous, Sin nombre, etc) y los excluye del match por nombre.

Si quieres convertir un visitante anónimo en un contacto identificado, edítalo desde el panel lateral del inbox y agregale phone o email. Cuando el cliente vuelva y deje sus datos, Brote no lo confunde con otros visitantes anónimos.

  1. Ve a Settings → Contactos → sección “Duplicados detectados”.
  2. Para cada grupo, te muestra los contactos con su lifecycle stage, datos de contacto y fecha de creación.
  3. Click “Quedarse con este” en el ganador → Brote fusiona los demás contra él.

El ganador (to_id) queda intacto en sus campos completos. Los perdedores (from_id):

  • Conversaciones, tickets, notas, tareas, tags, custom fields y pagos se reasignan al ganador.
  • Historia de lifecycle se conserva — todos los cambios de etapa de cada contacto pasan al ganador.
  • Campos vacíos del ganador se rellenan con datos del perdedor (ej: el ganador no tenía email, el perdedor sí → el ganador queda con ese email).
  • Tags y notas se mergean (la unión de ambos sets).
  • Metadata del ganador prima — el perdedor queda guardado en metadata.merged_from para auditoría.
  • Finalmente, el perdedor se borra.

Mismo cliente con dos teléfonos: pasaron de un Movistar a un Entel y ahora hay 2 contactos. Brote no los detecta automáticamente porque los números son distintos — vas a tener que hacer el merge manual desde la vista de detalle.

Cliente escribió por WhatsApp y por Instagram: te quedan dos contactos en canales distintos. Si comparten email o nombre exacto, Brote los detecta; si no, también hay que mergear manual.

Cliente con full name en mayúscula y otro en minúscula: Brote normaliza nombres, así que estos los agrupa solos.

El historial de cada merge queda en metadata.merged_from[] del contacto ganador (un array con los UUIDs perdidos) + metadata.merged_at (timestamp). Útil si auditas cuántos duplicados resolviste este mes.