La guida definitiva alle API per sviluppatori
Questo documento è il riferimento API ufficiale ed esaustivo per l'intera piattaforma AI Chirps. Abbiamo mappato ogni endpoint sicuro per gli sviluppatori nel sistema. Puoi replicare a livello di codice il 100% delle funzionalità della dashboard senza testa.
1. Autenticazione e principi fondamentali
URL di base: "https://chirps.cc".
Tutti gli endpoint API richiedono una chiave API Chirps nell'intestazione "Authorization". Puoi generare una chiave API dal Gestore API nella sezione Sviluppatori della dashboard.
Authorization: Bearer <YOUR_CHIRPS_API_KEY>
Esempio di richiesta:
curl -X GET https://chirps.cc/api/billing/usage \ -H "Authorization: Bearer <YOUR_CHIRPS_API_KEY>" \ -H "Content-Type: application/json"
Gestione degli errori standard
| Codice di stato | Descrizione |
|---|---|
| "200 OK". | La richiesta ha avuto successo. |
| "400 Richiesta errata". | Convalida del payload JSON non riuscita. Include una matrice di dettagli. |
| "401 Non autorizzato". | Token mancante o scaduto. |
| "402 Pagamento richiesto". | L'area di lavoro ha raggiunto i limiti di fatturazione. |
| "403 Proibito". | L'utente non dispone delle autorizzazioni RBAC richieste. |
| "404 Non trovato". | La risorsa richiesta non esiste. |
| "Errore server 500". | Errore imprevisto della piattaforma. |
2. Ciclo di vita dell'assistente (creazione)
GET /api/assistents
Elenco Assistenti
Recupera un elenco di tutti gli assistenti associati all'area di lavoro della chiave API.
Crea un assistente
"POST" /api/assistenti
Crea un nuovo assistente con tutte le configurazioni di base.
{
"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
}| Parametro | Tipo | Necessario | Descrizione |
|---|---|---|---|
| "nomeazienda". | Corda | SÌ | Nome dell'attività (2-100 caratteri). |
| "URLaziendale". | Corda | SÌ | URL valido del sito web aziendale (max 500 caratteri). |
| "knowledgeBaseType". | Enum | SÌ | Uno tra: "url", "documento", "entrambi", "nessuno". |
| "knowledgeBaseUrl". | Corda | NO | Deve essere fornito se il tipo è "url" o "entrambi". |
| "knowledgeBaseText". | Corda | NO | Testo non elaborato se il tipo è "documento" o "entrambi". |
| "knowledgeBaseFileName". | Corda | NO | Nome del file caricato se si fornisce testo. |
| "linguaggio". | Corda | SÌ | Codice della lingua (ad esempio, "en", "es"). |
| "isMultiLanguage". | Booleano | NO | Abilita la traduzione automatica. Predefinito "falso". |
| "tonoPersonalità". | Corda | SÌ | Ad esempio, "professionale", "amichevole". Massimo 100 caratteri. |
| "isCustomPersonality". | Booleano | NO | Abilita tono personalizzato. Predefinito "falso". |
| "customPersonalityDescription". | Corda | NO | Istruzioni tono personalizzato se abilitato (max 2000 caratteri). |
| "Istruzioni aggiuntive". | Corda | NO | Istruzioni del prompt principale (max 10000 caratteri). |
| "E-mail di supporto". | Corda | SÌ | Indirizzo email valido per l'escalation. |
| "maxPages". | Numero | NO | Pagine da scansionare. Min 1, Max 100. Impostazione predefinita "5". |
| "Profondità massima". | Numero | NO | Profondità di scansione. Min 1, Max 20. Impostazione predefinita "2". |
| "welcomeMessageDelay". | Numero | NO | Ritardo in secondi prima del saluto. Min 0, Max 6. Impostazione predefinita "2". |
Elimina assistente
DELETE /api/assistants/:id
Elimina in modo permanente l'assistente ed elimina a catena tutti i relativi nodi di conoscenza e la cronologia. Nessun carico utile richiesto.
3. Assistente analisi e statistiche
Immediatamente dopo la creazione e l'utilizzo, puoi recuperare a livello di codice le metriche sulle prestazioni dell'assistente.
GET /api/analytics/overview?assistantId=uuid&range=30
Recupera statistiche sull'utilizzo, messaggi totali, lead acquisiti e metriche generali sul coinvolgimento per l'assistente specificato. Il parametro "intervallo" è facoltativo (numero di giorni, minimo 7, massimo 365, predefinito 30).
Risposta prevista
{
"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
}
]
}| Proprietà | Tipo | Descrizione |
|---|---|---|
| "conversazioni totali". | Numero | Numero totale di sessioni di chat gestite dall'assistente. |
| "Messaggi totali". | Numero | Numero totale di messaggi (utente + AI) inviati in tutte le conversazioni. |
| "Lead totali". | Numero | Numero totale di lead univoci (nome, email, telefono) estratti. |
| "Prenotazioni totali". | Numero | Numero totale di appuntamenti del calendario prenotati con successo. |
| "Tasso di soddisfazione". | Numero | Percentuale (0-100) di valutazioni di feedback positivo rispetto alle valutazioni totali. |
| "avgMessagesPerSession". | Numero | Numero medio di messaggi scambiati per conversazione. |
| "avgSessionsPerDay". | Numero | Numero medio di conversazioni al giorno nell'intervallo richiesto. |
| "liveNow". | Numero | Numero di conversazioni attive attualmente prese in carico da un agente umano. |
| "onlineNow". | Numero | Numero di utenti che hanno chattato attivamente con l'IA negli ultimi 2 minuti. |
| "Seriequotidiana". | Vettore | Matrice di oggetti giornalieri contenenti conteggi per "conversazioni", "messaggi", "lead" e "prenotazioni" per data. |
| "agentStats". | Vettore | Metriche delle prestazioni per agenti umani, inclusi "messagesSent" e "csat" (punteggio di soddisfazione del cliente). |
4. Conoscenza e formazione
Una volta creato un assistente, gestisci il suo cervello tramite "Nodi di conoscenza". Ogni nodo rappresenta una porzione di dati (un URL scansionato, un documento caricato o uno snippet di testo manuale).
Gestione dei nodi di conoscenza
GET /api/assistants/:id/nodes - Elenca tutti i nodi di conoscenza per questo assistente.
POST /api/assistants/:id/nodes - Inserisce manualmente un nuovo blocco di conoscenza.
{
"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 il contenuto di un nodo esistente o ne attiva lo stato attivo.
{
"title": "Updated Return Policy",
"refined_content": "We offer a 60-day return policy now...",
"is_active": true
}DELETE /api/assistants/:id/nodes/:nodeId - Elimina completamente un blocco di conoscenza.
POST /api/assistants/:id/nodes/:nodeId/re-crawl - Forza lo scraper a ripetere la scansione dell'URL associato a questo nodo e ad aggiornarne il contenuto. Carico utile: "{}".
Formazione sull'intelligenza artificiale
POST /api/assistants/:id/train - Compila tutti i nodi di conoscenza is_active e utilizza un orchestratore AI per sintetizzare dinamicamente un nuovo prompt del sistema principale. Carico utile: "{}".
5. Aspetto e configurazione del widget
Personalizza l'interfaccia utente del frontend del fumetto dell'assistente e della finestra di chat.
Aggiorna l'aspetto 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": []
}
}| Parametro | Tipo | Necessario | Descrizione |
|---|---|---|---|
| "Coloreprimario". | Corda | NO | Codice colore esadecimale (ad esempio, "#000000"). |
| "posizione". | Enum | NO | "in basso a destra", "in basso a sinistra", "in alto a destra", "in alto a sinistra". |
| "linguaggio". | Corda | NO | Codice della lingua del widget (ad esempio, "en", "fr"). |
| "Messaggio di benvenuto". | Corda | NO | Il messaggio di saluto iniziale. |
| "titolo". | Corda | NO | Il titolo nell'intestazione del widget. |
| "tema". | Enum | NO | "chiaro" o "scuro". |
| "fontFamily". | Enum | NO | "default" (Inter) o "eredita". |
| "BubbleStyle". | Enum | NO | "cerchio", "barra", "cassetto", "cerchio-marchiato", "barra-marchio", "cassetto-marchiato". |
| "testobolla". | Corda | NO | Testo da visualizzare accanto alla bolla (per gli stili barra/cassetto). |
| "intestazioneSottotitolo". | Corda | NO | Sottotitolo nell'intestazione del widget. |
| "inputPlaceholder". | Corda | NO | Testo segnaposto per l'input del messaggio. |
privacyPolicyUrl | Corda | NO | URL della tua informativa sulla privacy. |
avatarUrl | Corda | NO | URL dell'immagine avatar personalizzata. |
| "customLogoUrl". | Corda | NO | URL dell'immagine del logo dell'intestazione personalizzata. |
| "VoiceEnabled". | Booleano | NO | Abilita le chiamate vocali. |
| "nomevoce". | Corda | NO | L'identità vocale per le risposte audio. Vedi le voci disponibili di seguito. |
| "welcomeMessageDelay". | Numero | NO | Ritardo in secondi prima del saluto. |
| "fileUploadAbilitato". | Booleano | NO | Consenti agli utenti di caricare allegati. |
| "dettatura abilitata". | Booleano | NO | Abilita la dettatura vocale (discorso in testo). |
| "copilotEnabled". | Booleano | NO | Abilita i chip di suggerimento del copilota. |
benvenutiSuggerimenti | Vettore | NO | Matrice di stringhe per i chip di risposta rapida iniziali. |
| "visibilitàpagina". | Oggetto | NO | Determina su quali pagine appare il widget (modalità, percorsi). |
| "rateLimitEnabled". | Booleano | NO | Abilita la limitazione della velocità della chat. Predefinito vero. |
| "rateLimitMaxMessages". | Numero | NO | Numero massimo di messaggi nella finestra. Predefinito 30. |
| "rateLimitTimeWindow". | Numero | NO | Finestra temporale in minuti. Predefinito 60. |
| "gdprDataMaskingEnabled". | Booleano | NO | Maschera le PII prima di salvare. Predefinito falso. |
Nomi vocali disponibili
- Femmina: Zephyr, Aoede, Core, Leda, Callirrhoe, Despina, Erinome, Laomedeia, Achernar, Pulcherrima, Gacrux, Algenib, Sulfat
- Maschio:
Puck,Caronte,Fenrir,Orus,Encelado,Giapeto,Umbriel,Algieba,Autonoe,Rasalgethi,Alnilam
Logo personalizzato
POST /api/assistants/:id/widget-logo
Formato: multipart/form-data con campo file.
6. Integrazione e distribuzione
Una volta configurato e addestrato il tuo assistente, hai due modi principali per distribuirlo:
Opzione A: incorporamento Web (frontend)
Il modo più semplice per integrare l'assistente in un sito web standard (WordPress, Shopify, React, ecc.). Il codice di incorporamento è puramente deterministico. Non è necessario un endpoint per recuperarlo. Inserisci semplicemente questo nel <head> del tuo sito:
<script src="https://chirps.cc/widget.js" data-assistant-id="YOUR_ASSISTANT_ID_HERE"></script>
Opzione B: integrazioni headless (backend/CRM/bot)
Se stai creando un client personalizzato (come un bot Discord, un'integrazione di Telegram o un'app iOS nativa), NON utilizzerai il Web Embed. Interagirai invece direttamente con l'endpoint /api/chat.
POST /api/chat o /api/chat?stream=true
Nota: questo endpoint è pubblico e *non* richiede l'intestazione della chiave API Authorization: Bearer. L'autenticazione viene gestita implicitamente tramite "assistantId".
{
"assistantId": "123e4567-e89b-12d3-a456-426614174000",
"sessionId": "unique-session-id-for-user",
"conversationId": "optional-uuid",
"message": "Hello, I need help with my billing."
}*(Supporta anche multipart/form-data con un campo file per gli allegati se fileUploadEnabled è true).*
| Parametro | Tipo | Necessario | Descrizione |
|---|---|---|---|
| "IDassistente". | Corda | SÌ | L'UUID dell'assistente. |
| "ID sessione". | Corda | SÌ | Generalo tu. Un identificatore univoco dal tuo sistema per raggruppare la cronologia della chat (ad esempio, un ID utente Discord, un ID chat di Telegram o un UUID casuale). |
| "messaggio". | Corda | SÌ | Il contenuto testuale del messaggio (max 5000 caratteri). |
| "ID conversazione". | Corda | NO | L'UUID della conversazione (restituito nella prima richiesta). |
| "id". | Corda | NO | ID messaggio lato client facoltativo per impedire la deduplicazione. |
Modalità 1: risposta JSON standard (impostazione predefinita)
Inviando una richiesta POST a "/api/chat" (senza il parametro stream), attendi la risposta AI completa e ricevi un oggetto JSON standard.
{
"message": "Here is the information you requested...",
"conversationId": "uuid-of-conversation",
"messageId": "uuid-of-message"
}*(Se viene restituito is_active_agent: true, un essere umano ha preso il controllo della chat e message sarà null.)*
Modalità 2: streaming di eventi inviati dal server (?stream=true)
Aggiungendo ?stream=true all'URL, riceverai un flusso SSE (Server-Sent Events) in tempo reale. Il tuo codice dovrebbe essere in ascolto di questi tipi di eventi specifici:
- `event: token`: contiene
{"text": "chunk"}. Attivato per ogni porzione del testo di risposta dell'IA. - `event: status`: contiene
{"text": "Ricerca nella knowledge base..."}. Rappresenta gli stati di esecuzione dello strumento backend. - `event: done`: contiene
{"messageId": "uuid", "conversationId": "uuid", "message": "testo completo"}. Licenziato quando la generazione è completamente terminata. - `event: error`: contiene
{"error": "Messaggio di errore"}. Attivato se si verificano limiti di velocità o errori.
Endpoint di acquisizione in tempo reale
GET /api/chat/sessions
Recupera sessioni storiche.
POST /api/chat/toggle-agent
Metti in pausa l'IA per consentire l'acquisizione da parte degli esseri umani. Carico utile: { "sessionId": "..." }
POST /api/chat/messaggio-agente
Invia un messaggio umano. Carico utile: { "sessionId": "...", "message": "..." }
7. Impostazioni dell'assistente avanzato
PATCH /api/assistants/:id
Aggiorna la configurazione principale
Modifica le impostazioni principali, la personalità e i limiti dell'assistente.
{
"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: tutti i campi sono facoltativi. Invia solo i campi che desideri aggiornare.*
Elimina assistente
DELETE /api/assistants/:id
Elimina in modo permanente l'assistente e l'eliminazione a cascata si estende a tutti i nodi di conoscenza, conversazioni e messaggi. Se l'assistente non è mai stato completamente configurato, rimborsa la quota di creazione mensile.
8. Telefonia e voce
GET /api/phone-numbers - Elenca i numeri disponibili.
POST /api/phone-numbers/:id/assign - Fornisci un numero. Carico utile: "{}".
POST /api/assistants/:id/outbound - Attiva la chiamata in uscita. Carico utile: { "a": "+123...", "messaggio": "..." }
9. Estrazione dei lead
GET /api/leads?assistantId=uuid&page=1&limit=50&status=new - Recupera i lead strutturati e impaginati estratti dall'intelligenza artificiale durante le conversazioni.
GET /api/leads?id=leadId: recupera i dettagli di un singolo lead, inclusa la trascrizione completa della conversazione.
10. Prenotazioni e calendario
GET /api/bookings?assistantId=uuid&start=ISO-8601&end=ISO-8601 - Recupera gli appuntamenti del calendario pianificati dall'assistente, facoltativamente filtrati per data.
GET /api/bookings?id=bookingId - Recupera i dettagli di una singola prenotazione, inclusa la trascrizione della conversazione.
POST /api/bookings/cancel - Annulla una prenotazione attiva. Carico utile: { "bookingId": "uuid" }
POST /api/bookings/reschedule - Modifica una prenotazione. Carico utile: { "bookingId": "uuid", "newTime": "ISO-8601" }
11. Utilizzo dell'account e della fatturazione
"GET" /api/fatturazione/utilizzo
Recupera l'utilizzo del ciclo di fatturazione dell'area di lavoro, i limiti del piano di abbonamento e il conteggio totale degli assistenti. Nota: quando si utilizza una chiave API, l'ambito della richiesta viene automaticamente limitato all'area di lavoro della chiave API; non è necessario fornire un teamId.
Risposta (`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"
}Avvia il tuo assistente
tra 10 minuti.
Iscriviti, allenati sul tuo sito, personalizza gli avvisi e incorporali nel tuo sito web.