Actualizar estado de la conversación
Utiliza la API toggle_status para cambiar el estado de una conversación concreta. El servidor valida si el estado de destino es válido según la matriz de transición de estados STATUS_TRANSITIONS.
Método de solicitud
POST
Endpoint
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status
Autenticación
Para obtener más información, consulta la descripción del método de autenticación en Información general de la API.
Solicitud
Ejemplo de solicitud
curl -X POST 'https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status' \
-H 'Content-Type: application/json' \
-H 'Authorization: Basic base64(api_key:api_secret)' \
-d '{
"status": "resolved",
"snoozed_until": 1715000000
}'
Encabezados de la solicitud
| Field | Type | Description |
|---|---|---|
| Authorization | string | Utiliza Authorization: Basic base64(API Key:API Secret) para la autenticación. Ve a la página de claves API para obtener la API Key y la API Secret; después, únelas con dos puntos y codifica el resultado en Base64. |
| Content-Type | application/json | Tipo de contenido. Utiliza application/json para mensajes de texto sin formato. |
Parámetros de ruta
| Field | Type | Required | Description |
|---|---|---|---|
| conversation_id | string | Yes | ID de la conversación. |
Parámetros del cuerpo de la solicitud
| Field | Type | Required | Description |
|---|---|---|---|
| status | string | Yes | Estado de destino. Consulta los valores enumerados a continuación. |
| snoozed_until | integer | No | Solo surte efecto cuando status=snoozed. Marca temporal UNIX (en segundos). Si se omite, la conversación se aplaza de forma indefinida. |
| sender_type | string | No | Solo para identificación interna en el servidor. Cuando quien llama es AgentBot, el estado actual es pending y el estado de destino es open, se activa el flujo bot_handoff! y se envía el evento CONVERSATION_BOT_HANDOFF. |
Valores enumerados de status
| Value | Meaning |
|---|---|
| open | En curso |
| resolved | Resuelta |
| pending | Pendiente de gestión por bot/agente |
| snoozed | Aplazada |
| closed | Cerrada (archivada) |
Matriz de transición de estados (STATUS_TRANSITIONS)
| Current Status | Allowed Target Status |
|---|---|
| open | open, resolved, pending, snoozed |
| resolved | resolved, open, pending, snoozed, closed |
| pending | pending, open, resolved, snoozed |
| snoozed | snoozed, open, resolved, pending |
| closed | closed, open |
Restricciones clave
resolvedes el único estado previo válido para pasar aclosed:open,pendingysnoozedno pueden establecerse directamente comoclosed; primero deben pasar aresolvedantes de archivarse.closedsolo puede volver aopen: las conversaciones archivadas no pueden pasar directamente a otros estados activos comoresolved,pendingosnoozed.- Establecer el mismo estado es idempotente: si el estado de destino es igual al estado actual, se omite la validación y se devuelve el éxito directamente. No se activa ninguna devolución de llamada.
- La validación se implementa en la capa de modelo ActiveRecord mediante
validate :status_transition_allowed, if: :will_save_change_to_status?, y se aplica a todas las rutassave!,update!ystatus=+save.
Respuesta
Respuesta correcta
HTTP 200:
{
"meta": {},
"payload": {
"success": true,
"conversation_id": 45,
"current_status": "resolved",
"snoozed_until": null
}
}
Parámetros de respuesta
| Field | Type | Description |
|---|---|---|
| success | boolean | Valor devuelto por save; true si la actualización del estado se realiza correctamente. |
| conversation_id | integer | El display_id de la conversación (ID visible para la cuenta). |
| current_status | string | El estado de la conversación después de la actualización. |
| snoozed_until | integer / null | La marca temporal de vencimiento del aplazamiento actualmente efectiva; siempre es null cuando el estado no es snoozed. |
Respuestas de error
| HTTP Status Code | Trigger Condition |
|---|---|
| 401 | Sin autenticar o autenticación fallida |
| 403 | El usuario actual no tiene acceso a la bandeja de entrada a la que pertenece la conversación |
| 404 | No se puede encontrar ninguna conversación con el display_id correspondiente en la cuenta actual |
| 422 | status no es un valor enumerado válido, snoozed_until no se puede analizar o el estado de destino infringe la matriz STATUS_TRANSITIONS |
Estructura de la respuesta 422
Infringe la matriz de transición de estados (proviene de la validación en la capa del modelo y RequestExceptionHandler la representa como full_messages):
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
Valor enumerado de estado desconocido (proviene de CustomExceptions::Conversation::InvalidStatus):
{
"message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}
snoozed_until no válido (proviene de CustomExceptions::Conversation::InvalidSnoozedUntil):
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}










