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 }'
              
              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

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

  • resolved es el único estado previo válido para pasar a closed: open, pending y snoozed no pueden establecerse directamente como closed; primero deben pasar a resolved antes de archivarse.
  • closed solo puede volver a open: las conversaciones archivadas no pueden pasar directamente a otros estados activos como resolved, pending o snoozed.
  • 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 rutas save!, update! y status= + 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

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"] }
              
              {
  "message": "Status can't transition from open to closed",
  "attributes": ["status"]
}

            
Este bloque de código se muestra en una ventana flotante

Valor enumerado de estado desconocido (proviene 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

snoozed_until no válido (proviene 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