Actualizar el estado de la conversación
Utiliza la API toggle_status para cambiar el estado de una conversación específica. 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
URL de la solicitud
https://livedesk-api.engagelab.com/api/v2/accounts/conversations/{conversation_id}/toggle_status
Autenticación
Para obtener más información, consulta las instrucciones de autenticación en API Overview.
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
}'
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
}'
Este bloque de código se muestra en una ventana flotante
Encabezados de la solicitud
| Campo | Tipo | Descripción |
|---|---|---|
| Authorization | string | Autenticación mediante Authorization: Basic base64(API Key:API Secret). Ve a la página de API Keys para obtener la API key y el API secret, sepáralos con dos puntos y codifica el resultado en Base64. |
| Content-Type | application/json | Tipo de contenido. Utiliza application/json para mensajes de texto normales. |
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| conversation_id | string | Sí | ID de la conversación. |
Parámetros del cuerpo de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| status | string | Sí | Estado de destino. Consulta los valores enumerados a continuación. |
| snoozed_until | integer | No | Solo se aplica cuando status=snoozed. Marca de tiempo UNIX en segundos. Si se omite, la conversación se pospone indefinidamente. |
| sender_type | string | No | Se utiliza únicamente para la identificación interna en el servidor. Cuando quien realiza la llamada es AgentBot, el estado actual es pending y el estado de destino es open, se activa el proceso bot_handoff! y se envía el evento CONVERSATION_BOT_HANDOFF. |
Valores enumerados de status
| Valor | Significado |
|---|---|
| open | Abierta |
| resolved | Resuelta |
| pending | Pendiente de gestión por parte de un bot o agente |
| snoozed | Pospuesta |
| closed | Cerrada (archivada) |
Matriz de transición de estados (STATUS_TRANSITIONS)
| Estado actual | Transiciones permitidas |
|---|---|
| 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 requerido para pasar aclosed:open,pendingysnoozedno pueden cambiarse directamente aclosed. Primero deben pasar aresolvedantes de archivarse.closedsolo puede volver aopen: una conversación archivada no puede pasar directamente a otros estados activos, comoresolved,pendingosnoozed.- Escribir el mismo estado es una operación idempotente: cuando el estado de destino coincide con el estado actual, se omite la validación y la solicitud se procesa correctamente de forma directa. No se activa ninguna devolución de llamada.
- La validación se implementa en la capa de modelo de ActiveRecord mediante
validate :status_transition_allowed, if: :will_save_change_to_status?, y se aplica a todas las rutas desave!,update!ystatus=seguidas desave.
Respuesta
Respuesta correcta
HTTP 200:
{
"meta": {},
"payload": {
"success": true,
"conversation_id": 45,
"current_status": "resolved",
"snoozed_until": null
}
}
{
"meta": {},
"payload": {
"success": true,
"conversation_id": 45,
"current_status": "resolved",
"snoozed_until": null
}
}
Este bloque de código se muestra en una ventana flotante
Parámetros de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
| success | boolean | Valor devuelto por save; es true cuando el cambio de estado se realiza correctamente. |
| conversation_id | integer | El display_id de la conversación: el ID visible dentro de la cuenta. |
| current_status | string | Estado de la conversación después del cambio. |
| snoozed_until | integer / null | Marca de tiempo de la fecha de expiración de la posposición actualmente efectiva; siempre es null para estados distintos de snoozed. |
Respuestas de error
| Código de estado HTTP | Condición que activa la respuesta |
|---|---|
| 401 | El usuario no está autenticado o la autenticación ha fallado. |
| 403 | El usuario actual no tiene permiso para acceder a la bandeja de entrada a la que pertenece la conversación. |
| 404 | No se encuentra ninguna conversación con el display_id correspondiente en la cuenta actual. |
| 422 | status no es un valor enumerado válido, se produce un error al analizar snoozed_until o el estado de destino infringe la matriz STATUS_TRANSITIONS. |
Estructura de la respuesta 422
Infracción de la matriz de transición de estados (procedente de la validación de la capa de modelo y representada como full_messages por RequestExceptionHandler):
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
{
"message": "Status can't transition from open to closed",
"attributes": ["status"]
}
Este bloque de código se muestra en una ventana flotante
Valor de estado desconocido (de CustomExceptions::Conversation::InvalidStatus):
{
"message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}
{
"message": "Invalid conversation status: \"foo\" ('foo' is not a valid status)"
}
Este bloque de código se muestra en una ventana flotante
Valor no válido de snoozed_until (de CustomExceptions::Conversation::InvalidSnoozedUntil):
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}
{
"message": "Invalid snoozed_until: \"not-a-timestamp\" (invalid date)"
}
Este bloque de código se muestra en una ventana flotante










