La guía definitiva de API para desarrolladores
Este documento es la referencia API oficial y exhaustiva para toda la plataforma Chirps AI. Hemos mapeado todos los puntos finales seguros para desarrolladores en todo el sistema. Puede replicar mediante programación el 100% de la funcionalidad del panel sin cabeza.
1. Autenticación y principios básicos
URL base: https://chirps.cc
Todos los puntos finales de API requieren una clave API de Chirps en el encabezado "Autorización". Puede generar una clave API desde el Administrador de API en la [sección Desarrollador de su panel] (https://chirps.cc/dashboard/developers).
Authorization: Bearer <YOUR_CHIRPS_API_KEY>
Solicitud de ejemplo:
curl -X GET https://chirps.cc/api/billing/usage \ -H "Authorization: Bearer <YOUR_CHIRPS_API_KEY>" \ -H "Content-Type: application/json"
Manejo de errores estándar
| Código de estado | Descripción |
|---|---|
200 bien | La solicitud fue exitosa. |
400 Solicitud incorrecta | La carga útil JSON falló en la validación. Incluye una matriz de detalles. |
401 no autorizado | Token faltante o caducado. |
402 Pago requerido | El espacio de trabajo ha alcanzado los límites de facturación. |
403 Prohibido | El usuario no tiene los permisos RBAC requeridos. |
404 no encontrado | El recurso solicitado no existe. |
Error del servidor 500 | Error inesperado de plataforma. |
2. Ciclo de vida del asistente (creación)
GET /api/asistentes
Lista de asistentes
Obtiene una lista de todos los asistentes asociados con el espacio de trabajo de la clave API.
Crear un asistente
POST /api/asistentes
Crea un nuevo asistente con todas las configuraciones básicas.
{
"businessName": "Acme Corp",
"businessUrl": "https://acme.com",
"knowledgeBaseType": "both",
"knowledgeBaseUrl": "https://acme.com/help",
"knowledgeBaseText": "Raw text content of a document...",
"knowledgeBaseFileName": "company_handbook.pdf",
"language": "en",
"isMultiLanguage": false,
"tonePersonality": "professional",
"isCustomPersonality": false,
"supportEmail": "[email protected]",
"maxPages": 5,
"maxDepth": 2,
"welcomeMessageDelay": 2
}| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
nombre del negocio | Cadena | Sí | Nombre de la empresa (2-100 caracteres). |
negocioURL | Cadena | Sí | URL válida del sitio web empresarial (máximo 500 caracteres). |
tipo de base de conocimiento | enumeración | Sí | Uno de: "url", "documento", "ambos", "ninguno". |
URL de la base de conocimiento | Cadena | No | Se debe proporcionar si el tipo es "url" o "both". |
textobasedelconocimiento | Cadena | No | Texto sin formato si el tipo es "documento" o "ambos". |
nombre de archivo de base de conocimiento | Cadena | No | Nombre del archivo cargado si proporciona texto. |
idioma | Cadena | Sí | Language code (e.g., "en", "es"). |
esMultiLanguage | Booleano | No | Habilitar la traducción automática. Por defecto "falso". |
tonoPersonalidad | Cadena | Sí | Por ejemplo, "profesional", "amigable". Máximo 100 caracteres. |
isCustomPersonality | Booleano | No | Habilitar tono personalizado. Por defecto "falso". |
Descripción de personalidad personalizada | Cadena | No | Instrucciones de tono personalizadas si están habilitadas (máximo 2000 caracteres). |
Instrucciones adicionales | Cadena | No | Instrucciones principales (máximo 10000 caracteres). |
correo electrónico de soporte | Cadena | Sí | Dirección de correo electrónico válida para escalamiento. |
maxPáginas | Número | No | Páginas para rastrear. Mín. 1, Máx. 100. Predeterminado "5". |
maxProfundidad | Número | No | Profundidad de rastreo. Mín. 1, Máx. 20. Predeterminado "2". |
bienvenidoMensajeDelay | Número | No | Retraso en segundos antes del saludo. Mín. 0, Máx. 6. Predeterminado 2. |
Eliminar asistente
BORRAR /api/asistentes/:id
Elimina permanentemente el asistente y elimina en cascada todos sus nodos de conocimiento y su historial. No se requiere carga útil.
3. Asistente de análisis y estadísticas
Inmediatamente después de la creación y el uso, puede recuperar mediante programación las métricas de rendimiento del asistente.
GET /api/analytics/overview?assistantId=uuid&range=30
Obtenga estadísticas de uso, mensajes totales, clientes potenciales capturados y métricas generales de participación para el asistente especificado. El parámetro "rango" es opcional (número de días, mínimo 7, máximo 365, predeterminado 30).
Respuesta esperada
{
"totalConversations": 1245,
"totalMessages": 8420,
"totalLeads": 156,
"totalBookings": 42,
"satisfactionRate": 94,
"avgMessagesPerSession": 6.7,
"avgSessionsPerDay": 41.5,
"liveNow": 3,
"onlineNow": 12,
"dailySeries": [
{
"date": "2026-07-15",
"conversations": 45,
"messages": 310,
"leads": 5,
"bookings": 2
}
],
"agentStats": [
{
"name": "Jane Doe",
"messagesSent": 120,
"csat": 98
}
]
}| Propiedad | Tipo | Descripción |
|---|---|---|
totalConversaciones | Número | Número total de sesiones de chat manejadas por el asistente. |
mensajes totales | Número | Número total de mensajes (usuario + IA) enviados en todas las conversaciones. |
total de clientes potenciales | Número | Número total de clientes potenciales únicos (nombre, correo electrónico, teléfono) extraídos. |
reservastotales | Número | Número total de citas del calendario reservadas correctamente. |
tasa de satisfacción | Número | Porcentaje (0-100) de calificaciones de comentarios positivos sobre el total de calificaciones. |
avgMessagesPerSession | Número | Número medio de mensajes intercambiados por conversación. |
avgSesionesPorDía | Número | Número promedio de conversaciones por día dentro del rango solicitado. |
en vivo ahora | Número | Número de conversaciones activas asumidas actualmente por un agente humano. |
en líneaAhora | Número | Número de usuarios que chatean activamente con la IA en los últimos 2 minutos. |
serie diaria | Formación | Matriz de objetos diarios que contienen recuentos de "conversaciones", "mensajes", "clientes potenciales" y "reservas" por fecha. |
estadísticas del agente | Formación | Métricas de rendimiento para agentes humanos, incluidos messagesSent y csat (puntuación de satisfacción del cliente). |
4. Conocimiento y formación
Una vez creado un asistente, gestionas su cerebro a través de "Nodos de conocimiento". Cada nodo representa una porción de datos (una URL rastreada, un documento cargado o un fragmento de texto manual).
Gestión de nodos de conocimiento
GET /api/assistants/:id/nodes: enumera todos los nodos de conocimiento para este asistente.
POST /api/assistants/:id/nodes - Inyecta manualmente un nuevo bloque de conocimiento.
{
"title": "Return Policy",
"refined_content": "We offer a 30-day return policy for all unused items...",
"type": "text",
"metadata": {}
}PATCH /api/assistants/:id/nodes/:nodeId: modifica el contenido de un nodo existente o alterna su estado activo.
{
"title": "Updated Return Policy",
"refined_content": "We offer a 60-day return policy now...",
"is_active": true
}DELETE /api/assistants/:id/nodes/:nodeId - Elimina un bloque de conocimiento por completo.
POST /api/assistants/:id/nodes/:nodeId/re-crawl: obliga al raspador a volver a rastrear la URL asociada con este nodo y actualizar su contenido. Carga útil: {}.
Entrenamiento de IA
POST /api/assistants/:id/train: compila todos los nodos de conocimiento is_active y utiliza un orquestador de IA para sintetizar dinámicamente un nuevo mensaje maestro del sistema. Carga útil: {}.
5. Apariencia y configuración del widget
Personalice la interfaz de usuario de la burbuja del asistente y la ventana de chat.
Actualizar la apariencia del widget
PATCH /api/assistants/:id/widget-config
{
"primaryColor": "#000000",
"position": "bottom-right",
"language": "en",
"welcomeMessage": "Hi! How can I help you today?",
"title": "Acme Support",
"theme": "light",
"fontFamily": "default",
"bubbleStyle": "circle",
"bubbleText": "Chat with us",
"headerSubtitle": "We typically reply instantly",
"inputPlaceholder": "Type your message...",
"privacyPolicyUrl": "https://acme.com/privacy",
"voiceEnabled": true,
"voiceName": "Fenrir",
"welcomeMessageDelay": 2,
"fileUploadEnabled": true,
"dictationEnabled": true,
"copilotEnabled": true,
"welcomeSuggestions": ["Pricing plans", "Contact sales"],
"pageVisibility": {
"mode": "all",
"paths": []
}
}| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
color primario | Cadena | No | Código de color hexadecimal (por ejemplo, "#000000"). |
posición | enumeración | No | "abajo-derecha", "abajo-izquierda", "arriba-derecha", "arriba-izquierda". |
idioma | Cadena | No | Código de idioma del widget (por ejemplo, "en", "fr"). |
mensaje de bienvenida | Cadena | No | El mensaje de saludo inicial. |
título | Cadena | No | El título en el encabezado del widget. |
tema | enumeración | No | "claro" u "oscuro". |
familiafuente | enumeración | No | "predeterminado" (Inter) o "heredar". |
estiloburbuja | enumeración | No | "círculo", "barra", "cajón", "círculo-marcado", "barra-marcada", "cajón-marcado". |
texto de burbuja | Cadena | No | Texto que se mostrará junto a la burbuja (para estilos de barra/cajón). |
encabezadoSubtítulo | Cadena | No | Subtítulo en el encabezado del widget. |
entradaMarcador de posición | Cadena | No | Texto de marcador de posición para la entrada del mensaje. |
URL de política de privacidad | Cadena | No | URL a su política de privacidad. |
URL del avatar | Cadena | No | URL a la imagen de avatar personalizada. |
URL del logotipo personalizado | Cadena | No | URL a la imagen del logotipo del encabezado personalizado. |
voz habilitada | Booleano | No | Habilitar llamadas de voz. |
nombre de voz | Cadena | No | La identidad de voz para respuestas de audio. Vea las voces disponibles a continuación. |
bienvenidoMensajeDelay | Número | No | Retraso en segundos antes del saludo. |
archivoUploadEnabled | Booleano | No | Permitir a los usuarios cargar archivos adjuntos. |
dictado habilitado | Booleano | No | Habilite el dictado de voz (voz a texto). |
copilotEnabled | Booleano | No | Habilitar chips de sugerencia de copiloto. |
bienvenidosSugerencias | Formación | No | Conjunto de cadenas para chips de respuesta rápida iniciales. |
visibilidad de página | Objeto | No | Determina en qué páginas aparece el widget (modo, rutas). |
rateLimitEnabled | Booleano | No | Habilite la limitación de la velocidad del chat. Verdadero predeterminado. |
rateLimitMaxMessages | Número | No | Máximo de mensajes en ventana. Por defecto 30. |
rateLimitTimeWindow | Número | No | Ventana de tiempo en minutos. Por defecto 60. |
gdprDataMaskingEnabled | Booleano | No | Enmascare la PII antes de guardar. Por defecto es falso. |
Nombres de voz disponibles
- Mujer: Zephyr, Aoede, Core, Leda, Callirrhoe, Despina, Erinome, Laomedeia, Achernar, Pulcherrima, Gacrux, Algenib, Sulfat
- Masculino:
Puck,Charon,Fenrir,Orus,Enceladus,Jápeto,Umbriel,Algieba,Autonoe,Rasalgethi,Alnilam
Logotipo personalizado
POST /api/asistentes/:id/widget-logo
Formato: multipart/form-data con campo file.
6. Integración e implementación
Una vez que su asistente esté configurado y capacitado, tiene dos formas principales de implementarlo:
Opción A: Web Embed (frontend)
La forma más sencilla de integrar el asistente en un sitio web estándar (WordPress, Shopify, React, etc.). El código de inserción es puramente determinista. No necesita un punto final para recuperarlo. Simplemente coloque esto en el <head> de su sitio:
<script src="https://chirps.cc/widget.js" data-assistant-id="YOUR_ASSISTANT_ID_HERE"></script>
Opción B: Integraciones sin cabeza (Backend/CRM/Bots)
Si está creando un cliente personalizado (como un bot de Discord, una integración de Telegram o una aplicación nativa de iOS), NO utilizará Web Embed. En su lugar, interactuará directamente con el punto final /api/chat.
POST /api/chat o /api/chat?stream=true
Nota: Este punto final es público y *no* requiere el encabezado de clave API Autorización: Portador. La autenticación se maneja implícitamente a través del "assistantId".
{
"assistantId": "123e4567-e89b-12d3-a456-426614174000",
"sessionId": "unique-session-id-for-user",
"conversationId": "optional-uuid",
"message": "Hello, I need help with my billing."
}*(También admite multipart/form-data con un campo file para archivos adjuntos si fileUploadEnabled es verdadero).*
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id de asistente | Cadena | Sí | El UUID del asistente. |
Id. De sesión | Cadena | Sí | Tú generas esto. Un identificador único de tu propio sistema para agrupar el historial de chat (por ejemplo, un ID de usuario de Discord, un ID de chat de Telegram o un UUID aleatorio). |
mensaje | Cadena | Sí | El contenido de texto del mensaje (máximo 5000 caracteres). |
ID de conversación | Cadena | No | El UUID de la conversación (devuelto en su primera solicitud). |
identificación | Cadena | No | ID de mensaje del lado del cliente opcional para evitar la deduplicación. |
Modo 1: Respuesta JSON estándar (predeterminada)
Al enviar una solicitud POST a /api/chat (sin el parámetro de transmisión), espera la respuesta AI completa y recibe un objeto JSON estándar.
{
"message": "Here is the information you requested...",
"conversationId": "uuid-of-conversation",
"messageId": "uuid-of-message"
}*(Si se devuelve is_active_agent: true, un humano se ha hecho cargo del chat y message será nulo.)*
Modo 2: Transmisión de eventos enviados por el servidor (?stream=true)
Al agregar ?stream=true a la URL, recibirá una transmisión de eventos enviados por el servidor (SSE) en tiempo real. Su código debe escuchar estos tipos de eventos específicos:
- `evento: token`: Contiene
{"text": "chunk"}. Se dispara por cada fragmento del texto de respuesta de la IA. - `evento: estado`: Contiene
{"text": "Buscando base de conocimientos..."}. Representa los estados de ejecución de la herramienta backend. - `evento: hecho`: Contiene
{"messageId": "uuid", "conversationId": "uuid", "message": "full text"}. Despedido cuando la generación está completamente terminada. - `evento: error`: Contiene
{"error": "Mensaje de error"}. Despedido si ocurren límites de tarifas o errores.
Puntos finales de adquisición en vivo
GET /api/chat/sessions
Recuperar sesiones históricas.
POST /api/chat/toggle-agent
Pausa la IA para que el hombre tome el control. Carga útil: { "sessionId": "..." }
POST /api/chat/mensaje-agente
Enviar mensaje humano. Carga útil: { "sessionId": "...", "message": "..." }
7. Configuración avanzada del asistente
PATCH /api/asistentes/:id
Actualizar la configuración principal
Modifique la configuración principal, la personalidad y los límites de raspado del asistente.
{
"business_name": "Acme Corp",
"business_url": "acme.com",
"business_description": "We sell anvils.",
"system_prompt": "You are a helpful assistant.",
"language": "en",
"tone_personality": "Friendly",
"support_email": "[email protected]",
"additional_instructions": "Never mention the Roadrunner.",
"is_multi_language": true,
"is_dev_mode": false,
"is_active": true,
"max_pages": 15,
"max_depth": 2,
"widget_config_merge": {
"rateLimitEnabled": true
}
}*Nota: Todos los campos son opcionales. Envíe únicamente los campos que desee actualizar.*
Eliminar asistente
BORRAR /api/asistentes/:id
Elimina permanentemente el asistente y la eliminación en cascada a todos los nodos de conocimiento, conversaciones y mensajes. Si el asistente nunca estuvo completamente configurado, se reembolsa la cuota de creación mensual.
8. Telefonía y Voz
GET /api/phone-numbers - Lista de números disponibles.
POST /api/phone-numbers/:id/assign - Proporciona un número. Carga útil: {}
POST /api/assistants/:id/outbound - Activar llamada saliente. Carga útil: { "a": "+123...", "mensaje": "..." }
9. Extracción de clientes potenciales
GET /api/leads?assistantId=uuid&page=1&limit=50&status=new: obtenga clientes potenciales estructurados y paginados que la IA extrajo durante las conversaciones.
GET /api/leads?id=leadId: obtiene detalles de un único cliente potencial, incluida la transcripción completa de la conversación.
10. Reservas y Calendario
GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601: recupera citas del calendario programadas por el asistente, opcionalmente filtradas por fecha.
GET /api/bookings?id=bookingId: recupera los detalles de una sola reserva, incluida la transcripción de la conversación.
POST /api/bookings/cancel - Cancelar una reserva activa. Carga útil: { "bookingId": "uuid" }
POST /api/bookings/reschedule - Ajustar una reserva. Carga útil: { "bookingId": "uuid", "newTime": "ISO-8601" }
11. Uso de cuenta y facturación
GET /api/facturación/uso
Recupere el uso del ciclo de facturación del espacio de trabajo, los límites del plan de suscripción y el recuento total de asistentes. Nota: Cuando se utiliza una clave API, la solicitud se limita automáticamente al espacio de trabajo de la clave API; no es necesario proporcionar un "teamId".
Respuesta (`200 OK`):
{
"planName": "Pro",
"periodStr": "2023-10-01",
"assistantCount": 3,
"usage": {
"message_count": 1450,
"harvest_count": 12,
"recrawl_count": 5,
"train_count": 2,
"assistants_created_count": 1,
"voice_minutes_used": 0,
"sms_count": 0,
"email_count": 0,
"whatsapp_count": 0
},
"limits": {
"messages": 5000,
"assistants": 5,
"training": 50,
"recrawls": 20
},
"workspaceOwnerId": "uuid"
}Inicia tu asistente
en 10 minutos.
Regístrese, capacítese en su sitio, personalice alertas e insértelas en su sitio web.