Funzioni personalizzate AI
Consenti all’IA di WAzion di chiamare le tue API esterne durante le conversazioni per consultare informazioni o eseguire azioni in tempo reale.
1. Introduzione
Le Funzioni Personalizzate permettono all’IA di WAzion di chiamare le tue API esterne durante una conversazione con un cliente. Questo consente di consultare informazioni in tempo reale o di eseguire azioni automaticamente.
Come funziona?
- 1 Il cliente chiede qualcosa (es: “Avete disponibile il prodotto X?“)
- 2 L’IA rileva che ha bisogno di informazioni esterne
- 3 WAzion chiama la tua API con i parametri necessari
- 4 La tua API risponde con le informazioni richieste
- 5 L’IA usa quelle informazioni per rispondere al cliente
Casi d’uso tipici
- • Verificare la disponibilità di prodotti/servizi
- • Effettuare prenotazioni automatiche
- • Consultare lo stato degli ordini
- • Consultare prezzi dinamici
- • Cercare informazioni sui clienti
- • Verificare gli orari disponibili
2. Struttura JSON
Le funzioni sono definite come un array JSON. Ogni funzione ha un nome, una descrizione e parametri che includono l’endpoint da chiamare.
[
{
"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"]
}
}
]
Campi principali
name: Identificatore univoco della funzionedescription: Descrivi quando usare questa funzioneparameters: Definisce i parametri e l’endpoint
Oggetto endpoint
url: URL completa dell’endpoint (HTTPS)method: GET, POST, PUT, DELETE, PATCHformat: json El tiempo es oro. formauth: Configurazione di autenticazione
Importante: La descrizione di ciascuna funzione e parametro è cruciale. L’IA utilizza queste descrizioni per decidere quando chiamare ogni funzione.
3. Tipi di Autenticazione
WAzion supporta 4 tipi di autenticazione per proteggere i tuoi endpoint:
Header Auth (Consigliato)
Più sicuroInvia le credenziali come header HTTP. Ideale per token Bearer o API Key.
"auth": {
"type": "header",
"fields": {
"Authorization": "Bearer tu-token-secreto",
"X-API-Key": "otra-clave-si-necesitas"
}
}
Basic Auth
Autenticazione HTTP di base con nome utente e password (codificati in Base64).
"auth": {
"type": "basic",
"fields": {
"username": "tu-usuario",
"password": "tu-contraseña"
}
}
Query Auth
Invia le credenziali come parametri nell’URL. Meno sicuro ma semplice.
"auth": {
"type": "query",
"fields": {
"api_key": "tu-api-key",
"secret": "tu-secret"
}
}
// Resultado: ?api_key=tu-api-key&secret=tu-secret
Body Auth
Includi le credenziali nel corpo della richiesta (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
Senza autenticazione
Se il tuo endpoint non richiede autenticazione, semplicemente ometti il campo “auth“ dall’oggetto endpoint.
4. Specifiche Tecniche
Timeout
| Timeout totale | 60s |
| Timeout di connessione | 10s |
Ritenti
| Numero massimo di tentativi | 4 |
| Strategia | Backoff esponenziale |
Calendario di ritentativi
| Tentativo 1 | Immediato |
| Tentativo 2 | 2s |
| Tentativo 3 | 4s |
| Tentativo 4 | 8s |
Header HTTP inviati
| Header | Valore |
|---|---|
| Content-Type | application/json |
| Accept | application/json |
| User-Agent | WAzion-Functions/1.0 |
| + Intestazioni di autenticazione | Secondo configurazione |
Codici HTTP che attivano il tentativo di nuovo
Codici senza ritentativo
Requisiti dell’endpoint
- HTTPS obbligatorio (certificato SSL valido)
- { “Respuesta“: “in formato JSON valido“ }
- Content-Type: application/json nella risposta
- Risposta in meno di 60 secondi
Parametro speciale: _phone
WAzion aggiunge automaticamente il parametro “_phone“ con il numero di telefono del cliente in formato E.164 (es: +34612345678). Puoi usarlo per personalizzare la risposta o per registrare chi ha effettuato la richiesta.
5. Esempi Pratici
Esempio 1: Consultare la disponibilità
Consente all’IA di verificare se un prodotto è disponibile in magazzino.
[
{
"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"]
}
}
]
Esempio 2: Creare una prenotazione
Permette all’IA di creare prenotazioni automaticamente nel tuo 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"]
}
}
]
Esempio 3: Consultare lo stato dell’ordine
Consente all’IA di consultare lo stato di un ordine utilizzando il suo numero di riferimento.
[
{
"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. Codice di esempio
Esempi di come implementare gli endpoint nel tuo server:
<?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'
})
Cronologia delle modifiche
Nessuna modifica recente in questa documentazione.