Open in
Testirajte agenta od početka do kraja (API)
Pokrenite jednokratne simulacije, paralelne skupove scenarija i pakete testova za odobrenje izdanja putem ThunderPhone API-ja kako bi se regresije agenta otkrile prije nego što ih korisnici čuju.
Iteriranje AI agenta znači iteriranje njegova prompta, njegovih 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:
- Kratke testove prije implementacije nakon svake izmjene prompta
- Regresijske pakete 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 konzultacija pri toplom preusmjeravanju |
consent_to_charge | boolean | da | Mora biti true. Procjena naplaćuje odabranog agenta i simuliranog pozivatelja te svaki telekomunikacijski segment |
target_number | string | ne | Nadjačavanje E.164 formata za udaljenu stranu; u suprotnom se koristi testni broj platforme |
mode je samo za čitanje i izvodi se iz target_type: agent proizvodi
mode="bot", dok phone_number proizvodi mode="sip".
Odgovor je objekt pokretanja simulacije
sa status="queued". Anketirajte dok status ne postane completed ili
failed; nakon što je postavljen call_id, učitajte transkript putem
GET /v1/calls/{call_id}/transcript.
Skupno: paralelni scenariji
Pokrenite N scenarija istodobno — korisno za regresijske pakete 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 skupnog pokretanja:
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 biste izbjegli prekomjerno opterećivanje agenta (0–60 s).
Uključite u CI
Na stranici Simulacije
(/dashboard/simulations) izradite skup provjere izdanja — odaberite agenta, ručno dodajte scenarije ili
kliknite Generirajte scenarije pomoću AI-ja kako biste ih izradili iz
uputa agenta (uz opcionalnu provjeru rubnih slučajeva) i grupirajte ih u skup.
Skup fiksira svoje scenarije i agenta, kao i minimalnu stopu prolaznosti i
opcijsko pravilo bez kritičnih neuspjeha. Uspješna pokretanja postaju prihvaćena
osnovna vrijednost; kasniji prijelazi iz prolaza u neuspjeh vraćaju se kao regresije.
U CI-ju upotrijebite API ključ organizacije.
Ova skripta pokreće skup, provjerava status dok ocjenjivanje i usporedba ne budu
dovršeni te završava s kodom različitim od nule ako presuda nije 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 1POST /v1/orgs/{org_id}/suites/{suite_id}/run vraća 202 s identifikatorom
pokretanja. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} vraća
status, verdict, pass_rate, critical_failure_count i popis osnovnih
regressions. Obje krajnje točke povezuju organizaciju iz URL-a s organizacijom
API ključa.
Pokrenite skup prema rasporedu
Otvorite karticu Simulirajte agenta, odaberite Skupovi provjere izdanja i izradite ili uredite skup. Uključite Pokreni prema rasporedu, odaberite Učestalost i Vremensku zonu, a zatim postavite Minutu nakon punog sata, Lokalno vrijeme ili Dan kako je prikazano. Odaberite Spremite skup. Isključivanjem opcije Pokreni prema rasporedu uklanjate raspored s nadzorne ploče.
Putem API-ja
PATCH zahtjevom ažurirajte skup kako biste dodali ili zamijenili njegov raspored. Pogledajte Skupovi (provjere izdanja) za potpuni objekt skupa i krajnje točke.
curl -X PATCH https://api.thunderphone.com/v1/suites/{suite_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule": {
"enabled": true,
"frequency": "daily",
"timezone": "America/Chicago",
"hour": 6,
"minute": 30
}
}'frequency može biti hourly, daily ili weekly. Upotrijebite vremensku zonu IANA-e.
Rasporedi po satu koriste minute; dnevni rasporedi koriste hour i minute;
tjedni rasporedi koriste i weekday, pri čemu je ponedjeljak 0, a nedjelja 6.
Odgovor skupa uključuje next_run_at i last_run_at.
Vremena prate promjene ljetnog računanja vremena odabrane vremenske zone. Zakazana pokretanja
pojavljuju se u povijesti pokretanja skupa i koriste njegov trenutačni agent, scenarije,
kriterije i prihvaćenu osnovnu vrijednost. Svaki generirani testni poziv emitira
test-call.completed; ne postoji webhook za dovršetak na razini skupa. Zakazani
pozivi naplaćuju se po istoj stopi simulacije kao ručna pokretanja skupa i bilježe
trigger: "schedule" pri pokretanju skupa.
Da biste pauzirali raspored bez promjene njegova vremena, PATCH zahtjevom pošaljite potpuni postojeći
objekt rasporeda s "enabled": false. frequency je obavezan; izostavljena
vremenska zona i vremenska polja vraćaju se na zadane vrijednosti, stoga uključite
postojeće vrijednosti. Pošaljite "schedule": null kako biste uklonili raspored.
Obrasci
Regresijski korpus po upitu
Održavajte JSON datoteku s n-torkama {name, scenario_prompt, expected_outcome}. Pri svakoj izmjeni upita pokrenite cijeli skup kao grupu; usporedite transkripte i ocjene s prethodnim pokretanjem.
Brzi test po izdanju
Jedna grupa od pet scenarija s očekivanim uspješnim ishodom koju pokrećete nakon svakog postavljanja. Osjetljivo na latenciju, stoga zadržite stagger_seconds: 0.
Mjerenje latencije
Pokrenite identične scenarije na različitim razinama proizvoda (spark, bolt, storm-base). Usporedite rezultate call.graded i duration_seconds iz svakog dobivenog zapisnika poziva.
Sljedeći koraci
Svaki parametar upita, statusni kôd i oblik grupe.
Automatski ocijenite svako testno pokretanje kako biste pratili kvalitetu tijekom vremena.
Označite određene testove za ljudski pregled.
Proslijedite rezultate u svoj CI / Slack / PagerDuty.