Módulo Contact
src/app/modules/contact/
Gestiona los contactos externos del CRM (clientes que inician conversaciones).
Modelo — Contact
| Campo | Tipo | Descripción |
|---|---|---|
_id | ObjectId | ID de MongoDB |
tenantId | ObjectId → Tenant | Tenant propietario |
externalId | string | ID en el sistema origen (ej: WhatsApp ID) |
username | string | Nombre del contacto |
email | string | Email (opcional) |
phone | string | Teléfono (opcional) |
isBlocked | boolean | Si está bloqueado, no puede enviar mensajes |
labels | ObjectId[] → Label | Etiquetas asignadas |
createdAt | Date | — |
updatedAt | Date | — |
Endpoints
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
GET | /api/v1/contacts | @Auth() | Lista contactos paginada |
GET | /api/v1/contacts/:id | @Auth() | Obtiene un contacto |
POST | /api/v1/contacts | @Auth() | Crea contacto |
PATCH | /api/v1/contacts/:id | @Auth() | Actualiza contacto |
DELETE | /api/v1/contacts/:id | @Auth() | Elimina contacto |
POST | /api/v1/contacts/:id/labels | @Auth() | Asigna etiquetas al contacto |
DTOs
CreateContactDto
{
tenantId: string
externalId: string
username: string
email?: string
phone?: string
}
AssignLabelsDto
{
labelIds: string[] // array de UUIDs de Labels
}
Relaciones
- ChatGateway — verifica
isBlockedantes de permitir que el contacto envíe mensajes - TicketModule — cada ticket está asociado a un contacto
- LabelModule — los labels del contacto son referencias a
Label