בדיקה מריצה שיחה אחת בטקסט: מתקשר מדומה מגלם את scenario, הסוכן עונה מתוך הטיוטה שלו (הוראות, הודעה ראשונה וידע), ושופט בודק את השיחה מול success_criteria. כתבו בדיקות לשיחות החשובות, הריצו אותן אחרי כל שינוי, ופרסמו כשהן עוברות.
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 מריץ את כל הבדיקות של הסוכן, או את אלה שב-test_ids, ומחזיר הרצה אחת לכל בדיקה (status: "running"). שאלו את GET /test-runs/{id} עד ש-status יהיה passed, failed או error; אז בהרצה יש transcript ואת reason של השופט (באנגלית, או בסינית עם reason_language: "zh"). כל הרצה עולה Credits, שמוצגים ליד הבדיקות בלוח הבקרה; ההרצות נעצרות בראשונה שהיתרה לא מכסה, ו-not_started מפרט את השאר. הרצה שלא הצליחה להתבצע מוחזרת. הבדיקות בודקות מה הסוכן אומר, לא את הקול או התזמון, והן לא קוראות לפונקציות שלו: בדקו אותן מראש עם POST /tools/{id}/test. לסוכן יש עד 30 בדיקות; PATCH ו-DELETE /agents/{id}/tests/{test_id} משנים או מסירים בדיקה.
מלבד שיחות שלמות (type: "simulation", ברירת המחדל), בדיקה יכולה לבדוק תשובה אחת. type: "next_reply" מקבל את chat_history, השיחה שלפניה שמסתיימת בדברי המתקשר ([{role, text}], כש-role הוא caller או agent), ואת success_criteria לתשובה הבאה של הסוכן. type: "tool_call" מקבל את chat_history ואת expected_tool {name, arguments, match}: הסוכן צריך לקרוא ל-name (אחת הפונקציות שלו, או end_call, transfer_call, handoff_to_agent) עם arguments, שמושווים במדויק (בלי רווחים בקצוות ובלי הבדל בין אותיות גדולות לקטנות) או, עם match: "judge", לפי המשמעות; ארגומנטים נוספים שהוא מעביר לא נבדקים. ה-transcript של הרצה מציג ב-tool_calls את הפונקציות שהסוכן קרא להן.
POST /agents/{id}/tests/generate מציע בדיקות מתוך הטיוטה של הסוכן: ההוראות, הידע והפונקציות שלו. הוא מקבל count (1–10, ברירת מחדל 5), types, focus (מה לכסות) ו-language (en או zh, לשמות ולקריטריונים), עולה Credits כמו הרצה אחת ומחזיר טיוטות לבדיקה ולשליחה אל POST /agents/{id}/tests; עם save: true הוא שומר אותן.