Test odgrywa jedną rozmowę w formie tekstu: symulowany dzwoniący odgrywa scenario, agent odpowiada na podstawie wersji roboczej (instrukcje, pierwsza wiadomość i wiedza), a oceniający sprawdza rozmowę względem success_criteria. Napisz testy dla ważnych rozmów, uruchamiaj je po każdej zmianie i publikuj, gdy przechodzą.
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 uruchamia wszystkie testy agenta albo te z test_ids i odpowiada jednym przebiegiem na test (status: "running"). Odpytuj GET /test-runs/{id}, aż status będzie passed, failed lub error; wtedy przebieg zawiera transcript i reason oceniającego (po angielsku albo po chińsku z reason_language: "zh"). Każdy przebieg kosztuje Credits, widoczne przy testach w panelu; przebiegi zatrzymują się na pierwszym, za który saldo nie wystarcza, a not_started wymienia pozostałe. Przebieg, którego nie udało się odegrać, jest zwracany. Testy sprawdzają, co mówi agent, a nie jego głos czy tempo, i nie wywołują jego funkcji: te sprawdź wcześniej przez POST /tools/{id}/test. Agent może mieć do 30 testów; PATCH i DELETE /agents/{id}/tests/{test_id} zmieniają lub usuwają test.
Oprócz całych rozmów (type: "simulation", domyślnie) test może sprawdzić jedną odpowiedź. type: "next_reply" przyjmuje chat_history, czyli wcześniejszą rozmowę kończącą się wypowiedzią dzwoniącego ([{role, text}], gdzie role to caller lub agent), oraz success_criteria dla następnej odpowiedzi agenta. type: "tool_call" przyjmuje chat_history i expected_tool {name, arguments, match}: agent ma wywołać name (jedną ze swoich funkcji albo end_call, transfer_call, handoff_to_agent) z arguments, porównywanymi dokładnie (tekst bez spacji na brzegach, bez rozróżniania wielkości liter) lub, z match: "judge", według znaczenia; inne przekazane argumenty są pomijane. transcript przebiegu pokazuje w tool_calls funkcje wywołane przez agenta.
POST /agents/{id}/tests/generate proponuje testy na podstawie wersji roboczej agenta: jego instrukcji, wiedzy i funkcji. Przyjmuje count (1–10, domyślnie 5), types, focus (co mają obejmować) i language (en lub zh, dla nazw i kryteriów), kosztuje Credits jak jeden przebieg i zwraca szkice do przejrzenia i wysłania do POST /agents/{id}/tests; z save: true zapisuje je.