Crea un agente da un modello, impostando se vuoi i suoi campi nella stessa richiesta. Senza template parte vuoto; GET /api/v1/voice/catalog elenca i modelli insieme alle lingue e alle voci che un agente accetta. I modelli sono scritti in inglese e in cinese, quindi per un'altra lingua invii system_prompt e first_message in quella lingua. O viene salvata l'intera richiesta o non viene creato alcun agente, quindi una richiesta rifiutata può essere reinviata dopo la correzione. Il dashboard_url della risposta è la pagina dell'agente nella dashboard, dove può parlare con la bozza dal browser. Ogni agente funziona con EvaSay ASR, EvaSay LLM ed EvaSay TTS, scelti da EvaSay per ogni chiamata in base alla lingua e al carico e inclusi nel prezzo della chiamata; non ci sono account di altri fornitori da configurare.
curl https://evasay.com/api/v1/voice/agents \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Front desk",
"language": "en",
"first_message": "Hi, thanks for calling Sunrise Salon. How can I help?",
"system_prompt": "You are the front desk of Sunrise Salon..."
}'
Aggiorna uno qualsiasi di questi campi con PATCH /api/v1/voice/agents/{id}:
| Campo | Note |
|---|---|
name, first_message, system_prompt | Testo |
status | published pubblica la bozza come nuova versione; draft smette di ricevere chiamate |
language | Una delle 27 lingue, ad es. en, zh, es, de, oppure multi per seguire chi chiama |
temperature | 0-100 |
max_duration_sec, silence_timeout_sec | Limiti della chiamata |
interruptible, end_call_enabled | Booleani |
confirm_details | Booleano; ripete numeri e nomi a voce e ne chiede conferma |
ai_disclosure | Booleano, predefinito true; prima del primo messaggio l'agente dice nella lingua della chiamata che chi chiama sta parlando con un'IA (omesso se il primo messaggio lo dice già) |
voicemail_detection | Booleano; le chiamate in uscita ascoltano prima e terminano davanti a una segreteria |
voicemail_message | Lasciato in una segreteria, può usare {{variables}}; nessuno per riagganciare |
transfer_number | Numero a cui trasferire, in formato internazionale |
transfer_destinations | Fino a 9 numeri in più, [{name, number, when}]; l'agente ne sceglie uno in base a when |
transfer_briefing | Booleano; chi risponde per primo sente il riepilogo della chiamata fatto dall'agente |
pronunciations | Fino a 100 [{word, say, case_sensitive}]; la voce dice say al posto di word |
idle_messages | Fino a 3 promemoria detti in sequenza a chi chiama e tace, prima che la chiamata termini |
noise_reduction | Booleano; il rumore di fondo di chi chiama viene filtrato prima di essere ascoltato |
recording_enabled | Booleano; le chiamate vengono registrate su due canali (chi chiama a sinistra, l'agente a destra) |
recording_consent | announce, ask (conservata solo se chi chiama accetta) oppure none |
recording_notice | L'avviso o la domanda detti per primi; vuoto per usare quello integrato nella lingua della chiamata |
handoffs | Fino a 5 [{agent_id, when}]: altri agenti a cui questo può passare una chiamata |
knowledge_base_id | Una delle tue basi di conoscenza |
vocabulary_id | Uno dei tuoi vocabolari; i suoi termini vengono riconosciuti con più affidabilità quando chi chiama li dice |
voice_id | Un id di voce integrata di EvaSay, oppure una delle tue voci clonate (clone:…) |
Le voci integrate dipendono dalla lingua: il cinese ha ming-designed-female-clear e ming-designed-female-warm (femminili), ming-designed-male-clear e ming-designed-male-friendly (maschili); le altre lingue hanno F1–F5 (femminili) e M1–M5 (maschili). Una voce integrata che non parla la lingua dell'agente viene sostituita da quella dello stesso genere che la parla. Il vecchio nome di campo tts_voice_id è ancora accettato. Qualsiasi altro valore di voice_id, o una voce clonata non ancora pronta, viene rifiutato.
analysis_config stabilisce cosa ricavare da ogni chiamata quando termina: summary (predefinito true), summaryLanguage, successCriteria (cosa ottiene una chiamata riuscita), fields (fino a 20 {name, type, description} da estrarre, con type pari a string, number o boolean) e scorecard (fino a 10 {name, description, weight}, peso da 1 a 5). I risultati sono nell'analysis della chiamata e nel webhook call.analyzed.
Modificare i campi di un agente modifica la sua bozza. Le chiamate continuano a usare la versione pubblicata finché non pubblichi la bozza con POST /api/v1/voice/agents/{id}/publish (facoltativamente con una note), oppure con status: "published" nello stesso PATCH. Ogni pubblicazione conserva una versione numerata; published_version nell'agente indica quale usano le chiamate. Una chiamata resta sulla versione che era attiva quando è iniziata, quindi pubblicare durante una chiamata non la cambia. Le chiamate di prova dalla dashboard usano la bozza.
GET /agents/{id}/versions elenca le versioni, e POST /agents/{id}/versions/{version}/restore torna indietro: le nuove chiamate usano quella versione e la bozza diventa quella. Il nome dell'agente, la distribuzione, l'aspetto del widget e le notifiche non hanno versioni e cambiano subito, come i documenti della sua base di conoscenza.