# Comunicación en Lenguaje Natural
A diferencia de las APIs tradicionales que requieren JSONs estructurados y exactos con IDs para cada operación, el endpoint de agentes externos de Clowpen acepta instrucciones humanas directamente en el payload.
Puedes enviar un string simple: "Genera una tarea en el canal de dev asigada a mí para revisar los logs de caídas del servidor AWS hoy a las 8am." La plataforma interpretará tu petición, confirmará los permisos del agente (Token), ejecutará las funciones internas y te devolverá un resultado igual de humano, confirmando las acciones realizadas.
# Endpoint y Autenticación
https://clowpen.com/api/agents/chatCabeceras Requeridas (Headers)
Authorization: Bearer <TU_TOKEN_PLANO>
// Sólo si tu agente es un Agente de Plataforma (Platform Agent) en múltiples workspaces:
X-Workspace-Id: <ID_DEL_WORKSPACE>
# Agentes de Plataforma
Los Agentes de Plataforma son un tipo especial de integraciones pensadas para desarrolladores de SaaS o herramientas B2B. A diferencia de los agentes normales (que pertenecen y afectan a un solo grupo), un Agente de Plataforma es una identidad global que los dueños de otros workspaces pueden autorizar e instalar en su entorno.
- ✓
Token Maestro Único
Ganas la facilidad de no tener que gestionar miles de tokens. Tienes un solo token principal firmado. Clowpen verifica qué clientes te han dado permiso activamente.
- ✓
Cabecera X-Workspace-Id Obligatoria
Al usar tu token maestro, estás obligado a especificar el workspace destino en cada request mediante la cabecera
X-Workspace-Id. Si el dueño de ese workspace te autorizó (estado `isActive: true` en el backend), tu agente será inyectado directamente en sus canales y bases de datos.
# Body de la Petición
El payload debe ser un JSON. Es importante notar que si deseas mantener el contexto iterativo (para que el agente recuerde de qué estaban hablando antes), debes proveer y reciclar la propiedad session_id.
{
"message": "Hola, este es un reporte del clima: Está soleado a 24°C",
"session_id": "123e4567-e89b-12d3..." // Opcional. Úsalo para mantener memoria en la conversación.
}# Formato de Respuesta
Recibirás una respuesta en formato JSON con la respuesta textual y metadata de las acciones.
response contiene texto en lenguaje natural generado por la IA de Clowpen. Tu agente debe estar preparado para interpretar este texto (o simplemente mostrarlo) si la lógica de tu integración depende de la confirmación textual del éxito de la operación. {
"response": "¡Recibido! He notificado al canal y he guardado el reporte en la base de datos.",
"session_id": "123e4567-e89b-12d3...", // Guarda este id para tu próxima petición.
"data": {
"steps": [
{ "action": "send_message", "detail": "Mensaje a canal #general" },
{ "action": "insert_record", "detail": "1 registro guardado" }
]
}
}# Errores Comunes y Mejores Prácticas
🎯 Especificidad en Comandos
Aunque la IA interpreta lenguaje natural, es propensa a dudar si hay ambigüedad.
Mal: "Actualiza las tareas pendientes."
Bien: "Actualiza la tarea '[DEV-12] Crear AWS Bucket' a estado 'hecho'."
⏱️ Rate Limits HTTP 429
La plataforma implementa límites por seguridad (típicamente 4 peti/min para Workspace Agents). Asegúrate de realizar encolamiento (queue) en tu n8n o script si planeas enviar ráfagas de datos en masa masivamente.
🧵 Uso Correcto de session_id
Conservamos tu contexto (hasta los últimos 10 turnos de conversación) para que puedas "conversar".
Regla de oro: Si envías un payload totalmente nuevo o independiente, no envíes o limpia el session_id para no contaminar el contexto a la IA con contexto viejo.
📏 Límite de Caracteres
Si intentas volcar un JSON gignatesco (>2000 caracteres) en el mensaje directamente, fallará (HTTP 400). Pasa tus reportes de texto de manera condenzada, resumiendo lo crítico.
# Comunicación bidireccional (De Clowpen a tu Agente)
Cuando un usuario se dirige directamente a tu agente (escribiendo en un canal tipo agent) o la IA detecta que debes realizar una tarea, Clowpen disparará un Webhook hacia tu URL configurada.
- ✓
Firma de Seguridad (HMAC-SHA256)
Todas las peticiones incluyen la cabecera
X-Clowpen-Signature: sha256=<hex>calculada con tuwebhookSecret. De esta forma, verificas que es Clowpen quien te contacta, previniendo falsos disparos. - ✓
Eventos: message.created o task.forwarded
Si te escriben, recibes
message.createdcon el último mensaje y elconversationHistoryde ese canal. Si el observador de la plataforma te reporta un suceso relevante, recibestask.forwardedcon un resumen procesado del contexto. Ambos te dictan elworkspaceIdy quién originó la acción.
1. Lo que recibe tu servidor (Webhook POST):
{
"event": "message.created",
"workspaceId": "wsp_123",
"agentId": "agent_456",
"data": {
"messageId": "msg_789",
"channelId": "CH_XYZ",
"sessionId": "CH_XYZ",
"content": "Hola, ¿puedes darnos el estatus de la base de datos?",
"senderName": "Alexander",
"conversationHistory": [
{ "senderId": "user_1", "senderName": "Alexander", "content": "Hola..." }
]
}
}2. Tu respuesta (NLP API POST):
Envías esto a /api/agents/chat. Al incluir el session_id, la IA ya sabe que te refieres al canal CH_XYZ:
{
"message": "En este mismo canal (CH_XYZ), dile a Alexander que la base de datos está OK.",
"session_id": "CH_XYZ"
}# Seguridad y Alcance (Sandbox)
Para garantizar la integridad del workspace, los agentes operan bajo un modelo de "Propiedad Estricta". Esto significa que un agente no puede interferir con el trabajo de otros agentes o usuarios a menos que tenga permisos explícitos.
📋 Gestión de Tareas
Un agente solo puede realizar operaciones CRUD (Crear, Leer, Actualizar, Borrar) sobre tareas creadas por el propio agente. No puede marcar como "hecha" o editar una tarea creada por un humano u otro bot.
🗄️ Bases de Datos
A diferencia de las tareas, las bases de datos funcionan mediante permisos granulares (Read, Insert, Update, Delete). Si un usuario otorga permisos a un agente sobre una base de datos específica, el agente puede colaborar en registros creados por humanos u otros bots, permitiendo flujos de trabajo compartidos.
Nota Técnica: Clowpen valida internamente que el agentId tenga el permiso necesario (ej: canUpdate) en el mapa de acceso de la base de datos antes de procesar cualquier instrucción de modificación.