Un test svolge una chiamata in forma di testo: un chiamante simulato recita scenario, l'agente risponde dalla sua bozza (istruzioni, primo messaggio e conoscenza) e un giudice valuta la conversazione secondo success_criteria. Scriva test per le chiamate importanti, li esegua dopo ogni modifica e pubblichi quando passano.
curl https://evasay.com/api/v1/voice/agents/AGENT_ID/tests \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Move a booking",
"scenario": "A regular customer wants to move Friday 3 pm to Saturday morning.",
"success_criteria": "Offers Saturday times and confirms the new time and the customer'"'"'s name.",
"max_turns": 8
}'
POST /agents/{id}/test-runs esegue tutti i test dell'agente, o quelli in test_ids, e risponde con un'esecuzione per test (status: "running"). Interroghi GET /test-runs/{id} finché status non è passed, failed o error; a quel punto l'esecuzione contiene il transcript e la reason del giudice (in inglese, o in cinese con reason_language: "zh"). Ogni esecuzione costa Credits, mostrati accanto ai test nella dashboard; le esecuzioni si fermano alla prima che il saldo non può pagare e not_started elenca le restanti. Un'esecuzione che non riesce a svolgersi viene rimborsata. I test verificano ciò che l'agente dice, non la voce né i tempi, e non chiamano le sue funzioni: le provi prima con POST /tools/{id}/test. Un agente ha fino a 30 test; PATCH e DELETE /agents/{id}/tests/{test_id} ne modificano o ne eliminano uno.
Oltre alle chiamate complete (type: "simulation", predefinito), un test può verificare una sola risposta. type: "next_reply" riceve chat_history, la conversazione precedente che termina con il chiamante ([{role, text}], con role pari a caller o agent), e success_criteria per la risposta successiva dell'agente. type: "tool_call" riceve chat_history ed expected_tool {name, arguments, match}: l'agente deve chiamare name (una sua funzione, oppure end_call, transfer_call, handoff_to_agent) con arguments, confrontati esattamente (testo ripulito, senza distinguere maiuscole) o, con match: "judge", per significato; gli altri argomenti passati vengono ignorati. Il transcript di un'esecuzione mostra in tool_calls le funzioni chiamate dall'agente.
POST /agents/{id}/tests/generate propone test a partire dalla bozza dell'agente: istruzioni, conoscenza e funzioni. Riceve count (1–10, predefinito 5), types, focus (cosa coprire) e language (en o zh, per nomi e criteri), costa Credits come un'esecuzione e risponde con bozze da rivedere e inviare a POST /agents/{id}/tests; con save: true le salva.