Testirajte agenta od početka do kraja (API)
Rad na AI agentu podrazumijeva iteriranje njegova prompta, alata i načina na koji obrađuje rubne slučajeve. API za simulacije pokreće stvarne pozive prema agentu koristeći prompt scenarija koji navedete. Ciljanje agenta stvara pokretanje bot-na-bot; ciljanje telefonskog broja stvara SIP povratno pokretanje. Svako pokretanje stvara stvarni zapis poziva s transkriptom, ocjenjivanjem i naplatom, tako da točno vidite kako se agent ponaša i koliko košta.
Upotrijebite ga za:
- Brze testove prije implementacije nakon svake izmjene prompta
- Regresijske skupove povezane s CI-jem (povežite webhook
test-call.completed→ ne uspijeva izgradnja ako rezultat padne) - Testiranje ograničenja istodobnosti pod opterećenjem
Jednokratno: jedno pokretanje
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
}'
Polja:
| Polje | Vrsta | Obavezno | Opis |
|---|---|---|---|
target_type | string | da | agent ili phone_number |
target_id | integer | da | ID agenta (ili ID telefonskog broja) |
direction | string | ne | outbound (zadano; testni pozivatelj upućuje poziv) ili inbound (testni pozivatelj odgovara) |
scenario_prompt | string | ne | Određuje što testni bot govori |
language / primary_language | string | ne | Jezik testnog pozivatelja; nepodržani kodovi se odbijaju |
simulator_product | string | ne | testing (zadano) ili spark za simuliranog pozivatelja sličnijeg čovjeku, primjerice za testove konzultacije pri toplom preusmjeravanju |
consent_to_charge | boolean | da | Mora biti true. Procjena naplaćuje odabranog agenta i simuliranog pozivatelja te bilo koji telekomunikacijski segment |
target_number | string | ne | Zamjena u formatu E.164 za udaljenu stranu; u suprotnom se koristi testni broj platforme |
mode je samo za čitanje i izvodi se iz target_type: agent stvara
mode="bot", dok phone_number stvara mode="sip".
Odgovor je objekt pokretanja simulacije
sa statusom status="queued". Provjeravajte dok status ne postane completed ili
failed; nakon što je postavljen call_id, učitajte transkript putem
GET /v1/calls/{call_id}/transcript.
Skupovi: paralelni scenariji
Pokrenite N scenarija istodobno — korisno za regresijske skupove koji paralelno pokrivaju svaki poznati rubni slučaj:
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
}'
Odgovor sadrži popis run_ids s ID-jevima podređenih pokretanja. Dohvatite status
skupa:
curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
run_count je ograničen na 20; stagger_seconds raspoređuje pokretanja
kako bi se izbjeglo preopterećivanje agenta (0–60 s).
Uključite ga u CI
Na stranici Simulacije (/dashboard/simulations) izradite skup za kontrolu izdanja — odaberite agenta, ručno dodajte scenarije ili kliknite Generirajte scenarije pomoću AI-ja da biste ih izradili na temelju prompta agenta (uz neobaveznu provjeru rubnih slučajeva) te ih grupirajte u skup. Skup zaključava svoje scenarije i agenta, kao i minimalnu stopu prolaznosti i neobavezno pravilo o nula kritičnih neuspjeha. Pokretanja koja prođu postaju prihvaćena referentna osnova; kasniji prijelazi iz prolaska u neuspjeh vraćaju se kao regresije.
U CI-ju upotrijebite organizacijski API ključ.
Ova skripta pokreće skup, provjerava status dok ocjenjivanje i usporedba ne
završe te završava s izlaznim kodom različitim od nule osim ako je ishod 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 vraća 202 s ID-jem
pokretanja. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} vraća
status, verdict, pass_rate, critical_failure_count i popis
regresija referentne osnove regressions. Obje krajnje točke povezuju
organizaciju u URL-u s organizacijom API ključa.
Obrasci
Korpus regresija po promptu
Održavajte JSON datoteku torki {name, scenario_prompt, expected_outcome}.
Pri svakoj promjeni prompta pokrenite cijeli skup kao skupno pokretanje;
usporedite transkripte i ocjene s prethodnim pokretanjem.
Smoke test po izdanju
Jedno skupno pokretanje s pet scenarija očekivanog tijeka koje pokrećete nakon
svake implementacije. Osjetljivo je na latenciju, stoga zadržite
stagger_seconds: 0.
Mjerenje latencije
Pokrenite identične scenarije za različite razine proizvoda (spark,
bolt, storm-base). Usporedite ocjene call.graded i
duration_seconds iz svakog dobivenog zapisnika poziva.
Sljedeći koraci
Svaki parametar upita, statusni kod i oblik skupnog pokretanja.
Automatski ocjenjujte svako testno pokretanje kako biste pratili kvalitetu tijekom vremena.
Označite određene testove za ljudsku provjeru.
Usmjeravajte rezultate u svoj CI / Slack / PagerDuty.