테스트는 통화 한 건을 텍스트로 재현합니다. 가상의 발신자가 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")을 돌려줍니다. status 가 passed, failed, error 중 하나가 될 때까지 GET /test-runs/{id} 을 조회하면, 실행에 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 를 주면 바로 저장됩니다.