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/v1

Formato: JSON sobre HTTPS. Todas las peticiones requieren un headerAuthorization: Bearer sk_...

Autenticación

Para obtener una API key:

  1. Inicia sesión en el panel
  2. Ve a Agente IA → API Keys
  3. Genera una nueva key con los permisos que necesites (chat, citas, etc.)
  4. 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

CampoTipoDescripción
mensajestringTexto del mensaje del usuario (requerido)
conversacion_idstring?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ódigoSignificado
400Campos faltantes o malformados
401Header Authorization ausente
403API key inválida, revocada o sin permisos
404Negocio no configurado
429Rate limit excedido
500Error 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