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.
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.
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 | Sí | "123e4567-e89b-12d3-a456-426614174000" |
api_key | Clave API del formulario | Sí | "abc123xyz789" |
message | Objeto con los campos del mensaje de contacto | Sí | { "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:
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:
{"status": "success", "category": string, "inquiry_uuid": string, "response_title": string, "response_feedback": string}
{"status": "error", "message": string}
(e.g., JSON inválido, campos faltantes).{"status": "error", "message": "Invalid API key."}
{"status": "error", "message": "Invalid form UUID."}
Ejemplo de solicitud:
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.
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.
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 | Sí | "a1b2c3d4-e5f6-7890-abcd-ef1234567890" |
api_key | Clave API del formulario | Sí | "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):
Comportamiento:
contact_router
.send_email_notification
es true, envía notificaciones a gestores a su correo designado.Estructura de la respuesta:
{"status": "success", "inquiry_uuid": string, "inquiry_status": string, "category": string, "fetched": object, "response_cleaned": string, "response_title": string, "assigned_member": object|null}
{"status": "error", "message": string}
(e.g., JSON inválido).{"status": "error", "message": "Invalid API key."}
{"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 -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.
El acceso a las APIs está restringido a usuarios con claves API válidas asociadas al formulario de contacto.
Requisitos:
contact_form.api_key
).form_uuid
debe existir y estar asociado a un formulario activo.inquiry_uuid
debe corresponder a una consulta existente del formulario.Errores comunes:
Notas: