Saltearse al contenido

Estructura de documentos

Modelo de datos

Parrot CRM usa un modelo de documentos basado en CouchDB. Cada dato en la plataforma se almacena como un documento con un _id, _rev, type y campos personalizados.

Tipos de documentos

Cliente (client)

Representa un contacto o empresa en tu base de datos.

type ClientDoc = {
_id: string; // Formato: "client:ULID"
_rev: string;
type: 'client';
name: string; // Nombre del cliente
email: string; // Email
phone: string; // Teléfono
type: string; // Tipo: empresa/particular
tags: string[]; // Etiquetas
inputs: string[]; // Canales de entrada (ej: [phone:+52...])
outputs: string[]; // Canales de salida
clientAddresses: string; // ID del documento de direcciones
created: number; // Timestamp
updated: number; // Timestamp
// Campos personalizados del usuario
[customField: string]: unknown;
};

Thread / Conversación (thread)

Una conversación entre un cliente y tu equipo, puede venir de múltiples canales.

type threadDoc = {
_id: string; // Formato: "thread:ULID"
_rev: string;
type: 'thread';
status: string; // Estado: open, closed, etc.
closed_by: string; // Usuario que cerró
closed_at: number;
reads: string[]; // IDs de usuarios que leyeron
tags: string[]; // Etiquetas
sources: string[]; // IDs de canales conectados
source_name: string; // Nombre del canal principal
inputs: string[]; // Inputs del cliente
output: string; // Último output
client: string; // ID del documento de cliente
subscribers: string[]; // Usuarios suscritos
created: number;
updated: number;
};

Mensaje (msg)

Un mensaje individual dentro de una conversación.

type messageDoc = {
_id: string; // Formato: "msg:ULID"
type: 'message';
thread: string; // ID del thread
source: string; // Canal (whatsapp, messenger, email)
source_id: string; // ID del canal
input: string; // Mensaje entrante
output: string; // Respuesta enviada
direction: 'in' | 'out';
status: string; // delivered, sent, failed
created: number;
updated: number;
};

Venta / Oportunidad (sale)

Una oportunidad de venta en el pipeline.

type SaleDoc = {
_id: string; // Formato: "sale:ULID"
type: 'sale';
status: string; // active, closed
session: string;
lead: string; // Lead asociado
client: string; // ID del cliente
thread: string; // ID del thread
userId: string; // Vendedor responsable
collapsed: boolean;
tags: string[];
pipeline: number; // Etapa del pipeline (índice)
budget: number; // Presupuesto estimado
name: string; // Nombre de la venta
attrs: Record<string, string>;
ip: string;
primary: boolean;
created: number;
updated: number;
};

Factura / Cotización (invoice)

Una cotización o recibo en PDF.

type invoiceDoc = {
_id: string; // Formato: "invoice:ULID"
clientId: string;
clientInfo: {
name: string;
phone: string;
email: string;
};
companyInfo: any;
invoiceDate: number;
invoiceNumber: string;
items: Array<{
item: string;
discount: number;
price: number;
quantity: number;
}>;
subtotalAmount: number;
thread: string;
totalAmount: number;
type: 'invoice' | 'receipt';
};

Macro / Respuesta rápida (macro)

Una respuesta rápida o nota reutilizable.

type NoteDoc = {
_id: string; // Formato: "macro:ULID"
type: 'macro';
category: string; // Categoría de la macro
title: string; // Título
content: string; // Contenido
stages: string[]; // Etapas del pipeline donde aplica
priority: number; // Prioridad (orden de aparición)
pinned: boolean; // Fijada en la lista
budget: number; // Presupuesto objetivo
owner: string; // Dueño (usuario)
created: number;
updated: number;
};

Prompt (prompt)

Configuración de ChatGPT para respuestas automáticas.

type PromptDoc = {
_id: string; // Formato: "prompt:ULID"
type: 'prompt';
name: string;
systemPrompt: string; // Prompt del sistema
userPrompt: string; // Prompt del usuario
conditions: string[]; // Condiciones de activación
enabled: boolean;
created: number;
updated: number;
};

Clasificador (classifier)

Configuración de clasificación de mensajes por IA.

type ClassifierDoc = {
_id: string; // Formato: "classifier:ULID"
type: 'classifier';
name: string;
categories: Array<{
name: string;
prompt: string;
}>;
confidenceThreshold: number;
enabled: boolean;
created: number;
updated: number;
};

Configuración (:config:*)

Documentos especiales de configuración del tenant.

IDDescripción
:config:globalConfiguración global (empresa, canales conectados)
:config:clientConfiguración por cliente
:config:saleConfiguración del pipeline de ventas
:config:catalogCatálogo de productos
:config:inboxConfiguración de bandeja (respuestas automáticas)
:config:activityConfiguración de actividades

Log (log)

Registro de cambios para el stream log.

type LogDoc = {
_id: string; // Formato: "log:ULID"
type: 'log';
stream_name: string; // Canal del log (ej: "thread-thread:xxx")
event_type: string; // Tipo de evento (ej: "thread.update")
data: Record<string, string>;
at: number; // Timestamp Unix
};

Notificación (notification)

Notificaciones del sistema para el equipo.

type NotificationDoc = {
_id: string; // Formato: "notification:ULID"
event: string;
type: string;
created: number;
fromUser: string;
toUser: string;
relatedId: string;
thread: string;
threadSourceName: string;
};

Enlaces cortos generados por el sistema.

type LinkDoc = {
_id: string; // Formato: "link:ULID"
type: 'link';
href: string; // URL destino
alias: string; // Alias corto
client: string;
thread: string;
created: number;
updated: number;
};

Mercado Libre (mercadolibre)

Documento de configuración de Mercado Libre.

type MeliDoc = {
_id: string; // Formato: "mercadolibre"
type: 'mercadolibre';
status: 'active' | 'inactive';
updated: number;
};

Broadcast (broadcast)

Mensaje masivo enviado.

type Broadcast = {
_id: string; // Formato: "broadcast:ULID"
type: 'broadcast';
recipients: Array<{
name: string;
_id: string;
method: string;
}>;
subject: string;
content: string;
created: number;
updated: number;
};

Plantilla WhatsApp (wabatemplate)

Plantillas de mensajes de WhatsApp Business aprobadas por Meta.

type wabaTemplate = {
_id: string; // Formato: "wabatemplate:ULID"
status: string; // APPROVED, PENDING, REJECTED
category: string; // MARKETING, UTILITY, AUTHENTICATION
name: string;
components: any[];
language: string;
};

Convenciones de naming

PrefijoTipo
client:Cliente
thread:Conversación
msg:Mensaje
sale:Venta
invoice:Factura
macro:Macro/Respuesta rápida
prompt:Prompt IA
classifier:Clasificador
notification:Notificación
log:Log
link:Enlace corto
wabatemplate:Plantilla WhatsApp
meli-order:Pedido Mercado Libre
meli-item:Item Mercado Libre
user:Usuario
:config:Configuración