API de Console
Integra agentes conversacionales con OpenAI GPT-4o en tu propio sistema.
Introducción
La API de Console permite enviar mensajes a un agente conversacional configurado en la plataforma y recibir respuestas generadas con OpenAI GPT-4o. El agente tiene acceso a los servicios, equipo y horarios de tu negocio, y puede agendar citas, consultar disponibilidad y generar links de pago.
URL base:
https://peoplewesen.com/api/v1Formato: JSON sobre HTTPS. Todas las peticiones requieren un headerAuthorization: Bearer sk_...
Autenticación
Para obtener una API key:
- Inicia sesión en el panel
- Ve a Agente IA → API Keys
- Genera una nueva key con los permisos que necesites (
chat,citas, etc.) - Copia la key inmediatamente — solo se muestra una vez
Todas las peticiones a la API deben incluir el header:
Authorization: Bearer sk_tu_api_key_aquíImportante: Nunca expongas tu API key en el frontend. Úsala solo en servidores o entornos controlados. Si crees que se filtró, revócala desde el panel.
POST /v1/chat
Envía un mensaje al agente conversacional y recibe una respuesta. El agente puede invocar funciones internamente (consultar servicios, disponibilidad, agendar citas) antes de responder.
Request
POST /api/v1/chat
Authorization: Bearer sk_...
Content-Type: application/json
{
"mensaje": "¿Qué servicios tienen?",
"conversacion_id": "opcional-uuid"
}Parámetros
| Campo | Tipo | Descripción |
|---|---|---|
mensaje | string | Texto del mensaje del usuario (requerido) |
conversacion_id | string? | UUID para mantener contexto entre mensajes (opcional) |
Response
{
"respuesta": "Tenemos 3 servicios disponibles: Consulta General ($35.000)...",
"conversacion_id": "abc-123",
"tokens_usados": 1240,
"negocio": "Clínica Demo"
}Ejemplo cURL
curl -X POST https://peoplewesen.com/api/v1/chat \
-H "Authorization: Bearer sk_tu_api_key" \
-H "Content-Type: application/json" \
-d '{"mensaje": "¿Qué servicios ofrecen?"}'Ejemplo Node.js
const res = await fetch('https://peoplewesen.com/api/v1/chat', {
method: 'POST',
headers: {
'Authorization': 'Bearer sk_tu_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
mensaje: '¿Qué servicios ofrecen?',
}),
})
const { respuesta, conversacion_id, tokens_usados } = await res.json()
console.log(respuesta)Ejemplo Python
import requests
response = requests.post(
"https://peoplewesen.com/api/v1/chat",
headers={"Authorization": "Bearer sk_tu_api_key"},
json={"mensaje": "¿Qué servicios ofrecen?"}
)
data = response.json()
print(data["respuesta"])Webhooks salientes
Configura URLs en tu sistema para recibir notificaciones cuando ocurran eventos en la plataforma (pagos aprobados, citas creadas, conversaciones nuevas, etc.).
Configuración
Ve a Agente IA → Webhooks en el panel y agrega:
- URL: endpoint HTTPS de tu servidor
- Eventos:
pago.aprobado,cita.creada,conversacion.nueva
Verificación de firma
Cada webhook incluye un header X-Agentes-IA-Signature con HMAC-SHA256 del payload usando el secret del webhook. Verifica la firma para asegurar que el request viene de la plataforma:
const crypto = require('crypto')
function verificarFirma(payload, signature, secret) {
const esperado = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return signature === esperado
}Payload ejemplo (pago.aprobado)
{
"evento": "pago.aprobado",
"timestamp": "2026-05-18T14:30:00Z",
"data": {
"cita_id": "abc123",
"monto": 35000,
"email_cliente": "juan@test.com"
}
}Rate limits
Para proteger la plataforma, todas las llamadas a la API tienen un límite por tenant:
- 100 mensajes por hora por negocio (todos los planes)
- El plan Empresa permite incremento bajo solicitud
Cuando se excede el límite, la API devuelve 429 Too Many Requests con un headerRetry-After indicando los segundos a esperar.
Códigos de error
| Código | Significado |
|---|---|
| 400 | Campos faltantes o malformados |
| 401 | Header Authorization ausente |
| 403 | API key inválida, revocada o sin permisos |
| 404 | Negocio no configurado |
| 429 | Rate limit excedido |
| 500 | Error interno del servidor |
Ejemplos completos
Bot conversacional simple
// bot-simple.js
const API_KEY = process.env.AGENTES_IA_API_KEY
let conversacionId = null
async function preguntar(mensaje) {
const res = await fetch('https://peoplewesen.com/api/v1/chat', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ mensaje, conversacion_id: conversacionId }),
})
if (!res.ok) {
const err = await res.json()
throw new Error(`API error: ${err.error}`)
}
const data = await res.json()
conversacionId = data.conversacion_id
return data.respuesta
}
// Uso
console.log(await preguntar('Hola, quiero agendar una cita'))
console.log(await preguntar('Una consulta general por favor'))Webhook receptor (Express)
// webhook-receiver.js
const express = require('express')
const crypto = require('crypto')
const app = express()
const WEBHOOK_SECRET = process.env.AGENTES_IA_WEBHOOK_SECRET
app.use(express.raw({ type: 'application/json' }))
app.post('/webhook', (req, res) => {
const firmaRecibida = req.headers['x-agentes-ia-signature']
const firmaCalculada = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex')
if (firmaRecibida !== firmaCalculada) {
return res.status(401).send('Firma inválida')
}
const evento = JSON.parse(req.body.toString())
console.log('Evento recibido:', evento.evento, evento.data)
res.status(200).send('OK')
})
app.listen(3001, () => console.log('Webhook listener en :3001'))¿Tienes preguntas? Escríbenos a michell@peoplewesen.com