Documentación de APIs de Gestión de Consultas

La gestión de consultas en liVO permite automatizar la recepción, clasificación y procesamiento de mensajes de clientes mediante dos endpoints principales: Inquiry Creation y Inquiry Completion. Estas APIs interactúan con los formularios de contacto y los Wisdoms de liVO para clasificar consultas, buscar información relevante, generar cotizaciones y enviar respuestas automáticas o asignarlas a equipos. Esta documentación detalla cómo utilizar estas APIs para integrar la gestión de consultas en sistemas externos.

1. Inquiry Creation API

Crea una nueva consulta a partir de un mensaje de contacto, clasifica el mensaje según la configuración del formulario y devuelve un identificador único (inquiry_uuid) para su procesamiento posterior.

Detalles de la API de Creación de Consultas

Endpoint: https://livo.cl/initiate_inquiry/

Método: POST

Autenticación: Requiere una clave API en el cuerpo de la solicitud (api_key). Obtén la clave desde el panel de gestión del formulario de contacto.

Estructura de la solicitud:

Campo Descripción Obligatorio Ejemplo
form_uuid UUID del formulario de contacto "123e4567-e89b-12d3-a456-426614174000"
api_key Clave API del formulario "abc123xyz789"
message Objeto con los campos del mensaje de contacto { "name": "John Doe", "email": "john@example.com", "message_general": "Cotización de silla" }

Campos de message: Los campos dependen de la configuración del formulario (contact_fields). Ejemplos comunes:

  • name: Nombre del cliente (string).
  • email: Correo electrónico (debe seguir el formato email).
  • phone: Teléfono, preferiblemente en formato chileno (ej. "+56912345678").
  • message_general: Texto de la consulta (string).
  • contact_reason: Motivo de contacto (puede ser un dropdown).

Validaciones: Los campos son validados según contact_fields (e.g., email, chile_phone, chile_rut, dropdown). Los campos obligatorios deben estar presentes.

Respuestas posibles:

  • Success (200): {"status": "success", "category": string, "inquiry_uuid": string, "response_title": string, "response_feedback": string}
  • Error (400): {"status": "error", "message": string} (e.g., JSON inválido, campos faltantes).
  • Error (401): {"status": "error", "message": "Invalid API key."}
  • Error (404): {"status": "error", "message": "Invalid form UUID."}

Ejemplo de solicitud:

cURL Python JavaScript
curl -X POST \
  "https://livo.cl/initiate_inquiry/" \
  -H "Content-Type: application/json" \
  -d '{
    "form_uuid": "123e4567-e89b-12d3-a456-426614174000",
    "api_key": "abc123xyz789",
    "message": {
      "name": "John Doe",
      "email": "john.doe@example.com",
      "phone": "+56964277911",
      "message_general": "Hola, necesito cotizar una silla reclinable de madera.",
      "contact_reason": "Cotización"
    }
}'
        
import requests

url = "https://livo.cl/initiate_inquiry/"
headers = {"Content-Type": "application/json"}
data = {
  "form_uuid": "123e4567-e89b-12d3-a456-426614174000",
  "api_key": "abc123xyz789",
  "message": {
    "name": "John Doe",
    "email": "john.doe@example.com",
    "phone": "+56964277911",
    "message_general": "Hola, necesito cotizar una silla reclinable de madera.",
    "contact_reason": "Cotización"
  }
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
        
fetch("https://livo.cl/initiate_inquiry/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    form_uuid: "123e4567-e89b-12d3-a456-426614174000",
    api_key: "abc123xyz789",
    message: {
      name: "John Doe",
      email: "john.doe@example.com",
      phone: "+56964277911",
      message_general: "Hola, necesito cotizar una silla reclinable de madera.",
      contact_reason: "Cotización"
    }
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
        

Ejemplo de respuesta (éxito):

{
  "status": "success",
  "category": "Cotización",
  "inquiry_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "response_title": "Revisa tu correo!",
  "response_feedback": "Hemos recibido tu solicitud de cotización. Pronto recibirás una respuesta."
}
      

Notas: Reemplaza form_uuid y api_key con los valores correspondientes. Los campos de message deben coincidir con contact_fields. La clasificación (category) se basa en el clasificador del formulario. Guarda el inquiry_uuid para usar en la API de Completion.

2. Inquiry Completion API

Procesa una consulta existente, ejecuta acciones configuradas (como buscar información o generar cotizaciones), asigna equipos, genera respuestas y, opcionalmente, envía correos electrónicos al cliente o a gestores.

Detalles de la API de Completado de Consultas

Endpoint: https://livo.cl/complete_inquiry/

Método: POST

Autenticación: Requiere una clave API en el cuerpo de la solicitud (api_key), que debe coincidir con la del formulario asociado a la consulta.

Estructura de la solicitud:

Campo Descripción Obligatorio Ejemplo
inquiry_uuid UUID de la consulta a procesar "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
api_key Clave API del formulario "abc123xyz789"
send_email_notification Enviar correos a gestores (bool) No (default: false) true
virtual_team_member Información del miembro virtual del equipo No { "name": "Asistente liVO", "email": "asistente@livo.cl", "description": "Soporte", "phone": "+56987654321" }

Campos de virtual_team_member (opcional):

  • name: Nombre del miembro virtual.
  • email: Correo para enviar respuestas automáticas.
  • description: Rol o descripción.
  • phone: Teléfono de contacto.

Comportamiento:

  • Acciones: Ejecuta acciones configuradas en el asistente como para buscar contexto o para cotizaciones.
  • Asignación: Asigna la consulta a un equipo o miembro según contact_router.
  • Respuesta: Genera una respuesta usando las instrucciones y acciones determinadas y con la firma del miembro asignado.
  • Correos: Si send_email_notification es true, envía notificaciones a gestores a su correo designado.

Estructura de la respuesta:

  • Success (200): {"status": "success", "inquiry_uuid": string, "inquiry_status": string, "category": string, "fetched": object, "response_cleaned": string, "response_title": string, "assigned_member": object|null}
  • Error (400): {"status": "error", "message": string} (e.g., JSON inválido).
  • Error (401): {"status": "error", "message": "Invalid API key."}
  • Error (404): {"status": "error", "message": "Inquiry not found."}

Campos de fetched en la respuesta:

Campo Descripción Ejemplo
lookup_doubt Lista de contextos relevantes encontrados [{ "name": "Política de Devolución", "long_text": "Devoluciones en 30 días" }]
make_quotation Lista de cotizaciones generadas [{ "fetched_item": { "query": "silla", "name": "Silla Pixa", "long_text": "Silla reclinable...", "SKU": "", "price": "99900.0", "quantity": 100, "match_type": "long_text", "distance": 0.33, "requested_quantity": 1 } }]
whatsapp_link Enlace para responder por WhatsApp "https://wa.me/+56964277911?text=Respuesta..."
email_link Enlace para responder por correo "mailto:john.doe@example.com?subject=Respuesta..."
auto_send Indica si se envió un correo automático true

Ejemplo de solicitud:

cURL Python JavaScript
curl -X POST \
  "https://livo.cl/complete_inquiry/" \
  -H "Content-Type: application/json" \
  -d '{
    "inquiry_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "api_key": "abc123xyz789",
    "send_email_notification": true,
    "virtual_team_member": {
      "name": "Asistente liVO",
      "email": "asistente@livo.cl",
      "description": "Soporte Automático",
      "phone": "+56987654321"
    }
}'
        
import requests

url = "https://livo.cl/complete_inquiry/"
headers = {"Content-Type": "application/json"}
data = {
  "inquiry_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "api_key": "abc123xyz789",
  "send_email_notification": True,
  "virtual_team_member": {
    "name": "Asistente liVO",
    "email": "asistente@livo.cl",
    "description": "Soporte Automático",
    "phone": "+56987654321"
  }
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
        
fetch("https://livo.cl/complete_inquiry/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    inquiry_uuid: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    api_key: "abc123xyz789",
    send_email_notification: true,
    virtual_team_member: {
      name: "Asistente liVO",
      email: "asistente@livo.cl",
      description: "Soporte Automático",
      phone: "+56987654321"
    }
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
        

Ejemplo de respuesta (éxito):

{
  "status": "success",
  "inquiry_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "inquiry_status": "ai_responded",
  "category": "Cotización",
  "fetched": {
    "lookup_doubt": [],
    "make_quotation": [
      {
        "fetched_item": {
          "query": "silla reclinable de madera",
          "name": "Silla Pixa",
          "long_text": "Silla con mecanismo reclinable, asiento tapizado en tela...",
          "SKU": "",
          "price": "99900.0",
          "quantity": 100,
          "match_type": "long_text",
          "distance": 0.3307634689847859,
          "requested_quantity": 1
        }
      }
    ],
    "whatsapp_link": "https://wa.me/+56964277911?text=Respuesta...",
    "email_link": "mailto:john.doe@example.com?subject=Respuesta...",
    "auto_send": true
  },
  "response_cleaned": "Gracias por tu solicitud. Te enviamos la cotización de la Silla Pixa...",
  "response_title": "Processing complete",
  "assigned_member": {
    "name": "Asistente liVO",
    "email": "asistente@livo.cl",
    "position": "Soporte Automático"
  }
}
      

Notas: Usa el inquiry_uuid de la API de Creation. Si send_email_notification es true, se notifica a los gestores configurados. virtual_team_member permite respuestas desde un remitente personalizado. Las cotizaciones se generan usando el Wisdom asociado al formulario.

3. Permisos y Seguridad

El acceso a las APIs está restringido a usuarios con claves API válidas asociadas al formulario de contacto.

Detalles de Permisos

Requisitos:

  • La clave API debe coincidir con la del formulario (contact_form.api_key).
  • El form_uuid debe existir y estar asociado a un formulario activo.
  • El inquiry_uuid debe corresponder a una consulta existente del formulario.

Errores comunes:

  • 401 Unauthorized: Clave API inválida.
  • 404 Not Found: UUID de formulario o consulta no encontrado.
  • 400 Bad Request: JSON inválido, campos faltantes o validaciones fallidas.

Notas:

  • Obtén la clave API desde el panel de gestión del formulario.
  • Guarda las claves de forma segura y no las expongas en clientes públicos.