Funciones Personalizadas IA
Permite que la IA de WAzion llame a tus APIs externas durante las conversaciones para consultar información o ejecutar acciones en tiempo real.
1. Introducción
Las Funciones Personalizadas permiten que la IA de WAzion llame a tus APIs externas durante una conversación con un cliente. Esto permite consultar información en tiempo real o ejecutar acciones automáticamente.
¿Cómo funciona?
- 1 El cliente pregunta algo (ej: “¿Tienen disponible el producto X?“)
- 2 La IA detecta que necesita información externa
- 3 WAzion llama a tu API con los parámetros necesarios
- 4 Tu API responde con la información solicitada
- 5 La IA usa esa información para responder al cliente
Casos de uso típicos
- • Consultar disponibilidad de productos/servicios
- • Realizar reservas automáticas
- • Consultar estado de pedidos
- • Consultar precios dinámicos
- • Buscar información de clientes
- • Verificar horarios disponibles
2. Estructura JSON
Las funciones se definen como un array JSON. Cada función tiene un nombre, descripción y parámetros que incluyen el endpoint a llamar.
[
{
"name": "nombreDeLaFuncion",
"description": "Descripción clara de qué hace esta función",
"parameters": {
"type": "object",
"properties": {
"parametro1": {
"type": "string",
"description": "Descripción del parámetro"
},
"parametro2": {
"type": "number",
"description": "Otro parámetro"
},
"endpoint": {
"url": "https://tu-api.com/endpoint",
"method": "GET",
"format": "json",
"auth": {
"type": "header",
"fields": {
"Authorization": "Bearer tu-token-aqui"
}
}
}
},
"required": ["parametro1"]
}
}
]
Campos principales
name: Identificador único de la funcióndescription: Describe cuándo usar esta funciónparameters: Define los parámetros y el endpoint
Objeto endpoint
url: URL completa del endpoint (HTTPS)method: GET, POST, PUT, DELETE, PATCHformat: json o formauth: Configuración de autenticación
Importante: La descripción de cada función y parámetro es crucial. La IA usa estas descripciones para decidir cuándo llamar a cada función.
3. Tipos de Autenticación
WAzion soporta 4 tipos de autenticación para proteger tus endpoints:
Header Auth (Recomendado)
Más seguroEnvía credenciales como headers HTTP. Ideal para tokens Bearer o API Keys.
"auth": {
"type": "header",
"fields": {
"Authorization": "Bearer tu-token-secreto",
"X-API-Key": "otra-clave-si-necesitas"
}
}
Basic Auth
Autenticación HTTP básica con usuario y contraseña (codificados en Base64).
"auth": {
"type": "basic",
"fields": {
"username": "tu-usuario",
"password": "tu-contraseña"
}
}
Query Auth
Envía credenciales como parámetros en la URL. Menos seguro pero simple.
"auth": {
"type": "query",
"fields": {
"api_key": "tu-api-key",
"secret": "tu-secret"
}
}
// Resultado: ?api_key=tu-api-key&secret=tu-secret
Body Auth
Incluye credenciales en el body de la petición (solo POST/PUT/PATCH).
"auth": {
"type": "body",
"fields": {
"api_key": "tu-api-key",
"token": "tu-token"
}
}
// Se añade al JSON del body junto con los parámetros
Sin autenticación
Si tu endpoint no requiere autenticación, simplemente omite el campo “auth“ del objeto endpoint.
4. Especificaciones Técnicas
Timeouts
| Timeout total | 60s |
| Connect timeout | 10s |
Reintentos
| Máximo de intentos | 4 |
| Estrategia | Backoff exponencial |
Calendario de reintentos
| Intento 1 | Inmediato |
| Intento 2 | 2s |
| Intento 3 | 4s |
| Intento 4 | 8s |
Headers HTTP enviados
| Header | Valor |
|---|---|
| Content-Type | application/json |
| Accept | application/json |
| User-Agent | WAzion-Functions/1.0 |
| + Headers de autenticación | Según configuración |
Códigos HTTP que activan reintento
Códigos sin reintento
Requisitos del endpoint
- HTTPS obligatorio (certificado SSL válido)
- Respuesta en formato JSON válido
- Content-Type: application/json en la respuesta
- Respuesta en menos de 60 segundos
Parámetro especial: _phone
WAzion añade automáticamente el parámetro “_phone“ con el teléfono del cliente en formato E.164 (ej: +34612345678). Puedes usarlo para personalizar la respuesta o registrar quién hizo la consulta.
5. Ejemplos Prácticos
Ejemplo 1: Consultar disponibilidad
Permite a la IA consultar si un producto está disponible en stock.
[
{
"name": "consultarDisponibilidad",
"description": "Consulta si un producto específico está disponible en stock",
"parameters": {
"type": "object",
"properties": {
"producto": {
"type": "string",
"description": "Nombre o referencia del producto a consultar"
},
"cantidad": {
"type": "number",
"description": "Cantidad deseada (opcional, por defecto 1)"
},
"endpoint": {
"url": "https://tu-tienda.com/api/stock",
"method": "GET",
"format": "json",
"auth": {
"type": "header",
"fields": {
"Authorization": "Bearer token-secreto-123"
}
}
}
},
"required": ["producto"]
}
}
]
Ejemplo 2: Crear una reserva
Permite a la IA crear reservas automáticamente en tu sistema.
[
{
"name": "crearReserva",
"description": "Crea una reserva para el cliente en la fecha y hora indicada",
"parameters": {
"type": "object",
"properties": {
"nombre_cliente": {
"type": "string",
"description": "Nombre completo del cliente"
},
"fecha": {
"type": "string",
"description": "Fecha de la reserva en formato YYYY-MM-DD"
},
"hora": {
"type": "string",
"description": "Hora de la reserva en formato HH:MM"
},
"servicio": {
"type": "string",
"description": "Tipo de servicio a reservar"
},
"endpoint": {
"url": "https://tu-negocio.com/api/reservas",
"method": "POST",
"format": "json",
"auth": {
"type": "header",
"fields": {
"X-API-Key": "mi-api-key-secreta"
}
}
}
},
"required": ["nombre_cliente", "fecha", "hora", "servicio"]
}
}
]
Ejemplo 3: Consultar estado de pedido
Permite a la IA consultar el estado de un pedido usando su número de referencia.
[
{
"name": "consultarPedido",
"description": "Consulta el estado de envío de un pedido por su número",
"parameters": {
"type": "object",
"properties": {
"numero_pedido": {
"type": "string",
"description": "Número de pedido o referencia"
},
"endpoint": {
"url": "https://tu-tienda.com/api/pedidos/estado",
"method": "GET",
"format": "json",
"auth": {
"type": "query",
"fields": {
"token": "mi-token-secreto"
}
}
}
},
"required": ["numero_pedido"]
}
}
]
6. Código de Ejemplo
Ejemplos de cómo implementar los endpoints en tu servidor:
<?php
// Endpoint: /api/stock
header('Content-Type: application/json');
// Verificar autenticación
$authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if ($authHeader !== 'Bearer token-secreto-123') {
http_response_code(401);
echo json_encode(['error' => 'No autorizado']);
exit;
}
// Obtener parámetros
$producto = $_GET['producto'] ?? '';
$cantidad = intval($_GET['cantidad'] ?? 1);
// Consultar tu base de datos
$stock = consultarStockEnBD($producto);
// Responder
echo json_encode([
'producto' => $producto,
'disponible' => $stock >= $cantidad,
'stock_actual' => $stock,
'mensaje' => $stock >= $cantidad
? "Sí, tenemos $stock unidades disponibles"
: "Lo sentimos, solo quedan $stock unidades"
]);
// Endpoint: /api/stock
app.get('/api/stock', (req, res) => {
// Verificar autenticación
const authHeader = req.headers.authorization;
if (authHeader !== 'Bearer token-secreto-123') {
return res.status(401).json({ error: 'No autorizado' });
}
// Obtener parámetros
const { producto, cantidad = 1 } = req.query;
// Consultar tu base de datos
const stock = consultarStockEnBD(producto);
// Responder
res.json({
producto,
disponible: stock >= cantidad,
stock_actual: stock,
mensaje: stock >= cantidad
? `Sí, tenemos ${stock} unidades disponibles`
: `Lo sentimos, solo quedan ${stock} unidades`
});
});
# Endpoint: /api/stock
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/stock', methods=['GET'])
def consultar_stock():
# Verificar autenticación
auth_header = request.headers.get('Authorization', '')
if auth_header != 'Bearer token-secreto-123':
return jsonify({'error': 'No autorizado'}), 401
# Obtener parámetros
producto = request.args.get('producto', '')
cantidad = int(request.args.get('cantidad', 1))
# Consultar tu base de datos
stock = consultar_stock_en_bd(producto)
# Responder
return jsonify({
'producto': producto,
'disponible': stock >= cantidad,
'stock_actual': stock,
'mensaje': f'Sí, tenemos {stock} unidades disponibles'
if stock >= cantidad
else f'Lo sentimos, solo quedan {stock} unidades'
})
Historial de cambios
Sin cambios recientes en esta documentación.