Moderar un Cliente
Un solo endpoint para el estado de moderación del cliente: declaras cómo quieres que quede y la API se encarga de los efectos.
PATCH https://api.platica.mx/v1/clients/{id}/moderation Parámetros de URL
| Parámetro | Tipo | Descripción | Requerido |
|---|---|---|---|
id | string | Puede ser el ID del cliente o su número de teléfono en formato E.164 sin + | ✓ |
Cuerpo de la solicitud
Debes enviar al menos uno de status, resetStrikes o clearHistory.
| Campo | Tipo | Descripción |
|---|---|---|
status | enum | blocked para bloquear, active para desbloquear |
reason | string | Motivo del bloqueo que queda registrado. Máximo 120 caracteres. Sólo aplica con status: "blocked". Por defecto: api_request |
resetStrikes | boolean | Pone los strikes en cero. Implícito cuando envías status: "active" |
clearHistory | boolean | Borra además el registro de la última falta |
Cómo se hace cada operación
Bloquear
{ "status": "blocked", "reason": "abuso_reportado" } Desbloquear
{ "status": "active" } Restablecer los strikes sin desbloquear
{ "resetStrikes": true } Desbloquear y borrar todo el historial de moderación
{ "status": "active", "clearHistory": true } Qué hace cada campo
status: "blocked"
- Deja al cliente en
status: "blocked", con lo que sus conversaciones futuras nacen marcadas como spam y los agentes las omiten. - Registra
moderation.blockedAt,moderation.blockedByymoderation.blockedReason. - Marca como
spamlas conversaciones que el cliente ya tenía abiertas, para que el bloqueo aplique de inmediato. Las que ya estaban enspam,finishedoexpiredno se tocan.
Sin el paso 3 el agente seguiría contestando los hilos que ya estaban en curso, porque el estado del cliente sólo se evalúa al abrir una conversación nueva. Por eso esta llamada puede emitir varios eventos conversation.status.updated además del client.updated.
status: "active"
- Deja al cliente en
status: "active"y limpia los camposmoderation.blocked*. - Pone los strikes en cero, aunque no lo hayas pedido. Si el contador se quedara donde estaba, la siguiente falta volvería a cruzar el límite y el cliente quedaría bloqueado de inmediato.
- Devuelve a
finishedlas conversaciones que estaban enspam.
resetStrikes y clearHistory
resetStrikes pone moderation.totalStrikes en cero y borra moderation.lastAction. clearHistory borra además moderation.lastFlaggedAt, lastSource, lastCategories, lastMatchedTerms y lastSeverity.
Ninguno de los dos cambia el status: un cliente bloqueado sigue bloqueado después de restablecerle los strikes. Úsalos para perdonar a un cliente que acumuló faltas pero todavía no fue bloqueado.
Respuesta
{
"status": "success",
"message": "Client moderation updated successfully",
"data": {
"id": "274fc73cb7d84a17955914fdc1a1f9d0",
"status": "active",
"strikesReset": true,
"clearedHistory": false,
"previousStrikes": 3,
"conversationsUpdated": 2
}
} | Campo | Descripción |
|---|---|
id | ID interno del cliente |
status | Estado con el que quedó el cliente |
strikesReset | Si los strikes se pusieron en cero |
clearedHistory | Si se borró el registro de la última falta |
previousStrikes | Strikes que tenía el cliente antes de la llamada |
conversationsUpdated | Cuántas conversaciones se sincronizaron. Siempre 0 si no enviaste status |
Webhooks
| Lo que enviaste | source del client.updated |
|---|---|
status: "blocked" | api.client.blocked |
status: "active" | api.client.unblocked |
Sólo resetStrikes / clearHistory | api.client.strikes_reset |
Cuando envías status recibes además un conversation.status.updated por cada conversación sincronizada.
Errores
| Código | Motivo |
|---|---|
400 | El cuerpo no pide nada, trae campos desconocidos, o falta workspace cuando la API key tiene acceso a varios |
404 | No existe un cliente con ese identificador |
PATCH /v1/clients/{id} con {"status": "blocked"} ejecuta este mismo camino. La diferencia es que ese endpoint sólo acepta el número de teléfono, mientras que éste también acepta el ID del cliente — necesario para contactos de webchat, Instagram o Telegram, que no tienen teléfono.