Тестирајте агента од почетка до краја (API)
Итеративни рад на AI агенту подразумева итерације његовог промпта, алата и начина на који обрађује граничне случајеве. API за симулације покреће стварне позиве према агенту користећи промпт сценарија који наведете. Циљање агента креира покретање бот-са-ботом; циљање броја телефона креира SIP повратни позив. Свако покретање производи стварни евиденциони запис позива са транскриптом, оцењивањем и наплатом, тако да тачно видите како се агент понаша и колико кошта.
Користите га за:
- Брзе тестове пре примене након сваке измене промпта
- Регресионе пакете повезане са CI-јем (повежите webhook
test-call.completed→ неуспешно завршите изградњу ако резултат падне) - Тестирање ограничења конкурентности под оптерећењем
Једнократно: једно покретање
curl -X POST https://api.thunderphone.com/v1/simulations \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"target_type": "agent",
"target_id": 12,
"direction": "outbound",
"scenario_prompt": "You are a polite caller asking about refund policy for order 12345.",
"consent_to_charge": true
}'
Поља:
| Поље | Тип | Обавезно | Опис |
|---|---|---|---|
target_type | ниска | да | agent или phone_number |
target_id | цео број | да | ID агента (или ID броја телефона) |
direction | ниска | не | outbound (подразумевано; тест позивалац упућује позив) или inbound (тест позивалац одговара) |
scenario_prompt | ниска | не | Одређује шта тест бот говори |
language / primary_language | ниска | не | Језик тест позиваоца; неподржани кодови се одбијају |
simulator_product | ниска | не | testing (подразумевано) или spark за симулираног позиваоца који више личи на човека, као за тестове консултације при топлом преносу |
consent_to_charge | логичка вредност | да | Мора бити true. Наплата обухвата и изабраног агента и симулираног позиваоца, као и сваки телефонски сегмент |
target_number | ниска | не | E.164 замена за удаљену страну; у супротном се користи тест број платформе |
mode је само за читање и изводи се из target_type: agent производи
mode="bot", док phone_number производи mode="sip".
Одговор је објекат покретања симулације
са status="queued". Проверавајте док status не постане completed или
failed; када се постави call_id, учитајте транскрипт преко
GET /v1/calls/{call_id}/transcript.
Групе: паралелни сценарији
Покрените N сценарија истовремено — корисно за регресионе пакете који паралелно покривају сваки познати гранични случај:
curl -X POST https://api.thunderphone.com/v1/simulations/batches \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"target_type": "agent",
"target_id": 12,
"direction": "outbound",
"run_count": 5,
"stagger_seconds": 2,
"scenario_prompts": [
"Ask about refund policy.",
"Ask for hours of operation.",
"Complain about a delayed shipment.",
"Ask to speak with a human.",
"Ask an unrelated trivia question."
],
"consent_to_charge": true
}'
Одговор садржи листу run_ids са ID-јевима покретања подређених задатака. Преузмите статус
групе:
curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
run_count је ограничен на 20; stagger_seconds распоређује покретања
како би се избегло преоптерећење агента (0–60 с).
Укључите у CI
Направите пакет контроле издања на страници Симулације
(/dashboard/simulations) — изаберите агента, ручно додајте сценарије или
кликните на Генеришите сценарије помоћу AI да бисте их израдили на основу
промпта агента (уз опционалну проверу граничних случајева) и групишите их у
пакет. Пакет фиксира своје сценарије и агента, као и минималну стопу пролазности
и опционално правило без критичних неуспеха. Успешна покретања постају
прихваћена основа; каснији преласци из пролаза у неуспех враћају се као
регресије.
Користите API кључ организације у CI-ју.
Ова скрипта покреће пакет, проверава статус док се оцењивање и поређење не
заврше и враћа код различит од нуле осим ако је пресуда pass:
#!/usr/bin/env bash
set -euo pipefail
: "${THUNDERPHONE_API_KEY:?Set THUNDERPHONE_API_KEY}"
: "${THUNDERPHONE_ORG_ID:?Set THUNDERPHONE_ORG_ID}"
: "${THUNDERPHONE_SUITE_ID:?Set THUNDERPHONE_SUITE_ID}"
base="https://api.thunderphone.com/v1/orgs/${THUNDERPHONE_ORG_ID}/suites/${THUNDERPHONE_SUITE_ID}"
auth="Authorization: Bearer ${THUNDERPHONE_API_KEY}"
run_id="$(curl --fail --silent --show-error -X POST "${base}/run" \
-H "$auth" -H "Content-Type: application/json" -d '{}' | jq -r '.id')"
deadline=$((SECONDS + 1800))
while (( SECONDS < deadline )); do
result="$(curl --fail --silent --show-error \
"${base}/runs/${run_id}" -H "$auth")"
status="$(jq -r '.status' <<<"$result")"
if [[ "$status" == "completed" ]]; then
jq . <<<"$result"
[[ "$(jq -r '.verdict' <<<"$result")" == "pass" ]]
exit
fi
sleep 10
done
echo "ThunderPhone suite timed out" >&2
exit 1
POST /v1/orgs/{org_id}/suites/{suite_id}/run враћа 202 са ID-јем
покретања. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} враћа
status, verdict, pass_rate, critical_failure_count и основну листу
regressions. Обе крајње тачке повезују организацију у URL-у са организацијом
API кључа.
Обрасци
Корпус регресија по промпту
Одржавајте JSON датотеку са торкама
{name, scenario_prompt, expected_outcome}. При свакој измени промпта,
покрените комплетан скуп као групу; упоредите транскрипте и оцене са
претходним покретањем.
Smoke тест по издању
Једна група од пет сценарија са очекиваним током које покрећете после сваког
постављања. Осетљиво је на кашњење, зато задржите stagger_seconds: 0.
Мерење кашњења
Покрените идентичне сценарије на различитим нивоима производа (spark,
bolt, storm-base). Упоредите оцене call.graded и
duration_seconds из сваког добијеног дневника позива.
Следећи кораци
Сваки параметар упита, статусни код и облик групе.
Аутоматски оцените свако тестно покретање да бисте пратили квалитет током времена.
Означите одређене тестове за људски преглед.
Прослеђујте резултате у свој CI / Slack / PagerDuty.