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.
| ID | Descripción |
|---|---|
:config:global | Configuración global (empresa, canales conectados) |
:config:client | Configuración por cliente |
:config:sale | Configuración del pipeline de ventas |
:config:catalog | Catálogo de productos |
:config:inbox | Configuración de bandeja (respuestas automáticas) |
:config:activity | Configuració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;};Enlace corto (link)
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
| Prefijo | Tipo |
|---|---|
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 |