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 ID de la conversación.

Parámetros del cuerpo de la solicitud

Campo Tipo Obligatorio Descripción
status string 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

  • resolved es el único estado previo requerido para pasar a closed: open, pending y snoozed no pueden cambiarse directamente a closed. Primero deben pasar a resolved antes de archivarse.
  • closed solo puede volver a open: una conversación archivada no puede pasar directamente a otros estados activos, como resolved, pending o snoozed.
  • 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 de save!, update! y status= seguidas de save.

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
Icon Solid Transparent White Qiyu
Contacto