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: