Celovito testiranje agenta (API)
Izboljševanje agenta UI pomeni izboljševanje njegovega poziva, njegovih orodij in načina obravnave robnih primerov. API za simulacije izvaja resnične klice z agentom na podlagi poziva za scenarij, ki ga določite. Ciljanje agenta ustvari izvajanje bot–bot; ciljanje telefonske številke ustvari izvajanje povratne zanke SIP. Vsako izvajanje ustvari resničen dnevnik klica s prepisom, ocenjevanjem in obračunavanjem, zato natančno vidite, kako se agent obnaša in koliko stane.
Uporabite ga za:
- Preizkuse po uvedbi po vsakem urejanju poziva
- Regresijske zbirke, povezane s CI (priključite webhook
test-call.completed→ neuspešno zaključite gradnjo, če se ocena zniža) - Obremenitveno testiranje omejitev sočasnosti
Enkratni zagon: eno izvajanje
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 | Obvezno | Opis |
|---|---|---|---|
target_type | string | da | agent ali phone_number |
target_id | integer | da | ID agenta (ali ID telefonske številke) |
direction | string | ne | outbound (privzeto; testni klicatelj kliče) ali inbound (testni klicatelj odgovori) |
scenario_prompt | string | ne | Določa, kaj testni bot pove |
language / primary_language | string | ne | Jezik testnega klicatelja; nepodprte kode so zavrnjene |
simulator_product | string | ne | testing (privzeto) ali spark za bolj človeškemu podoben simulirani klicatelj, na primer za preskuse posveta pri toplem prevezovanju |
consent_to_charge | boolean | da | Mora biti true. Zaračunata se tako izbrani agent kot simulirani klicatelj ter morebitni telefonski segment |
target_number | string | ne | Preglasitev E.164 za oddaljeno stran; sicer se uporabi testna številka platforme |
mode je samo za branje in je izpeljan iz target_type: agent ustvari
mode="bot", medtem ko phone_number ustvari mode="sip".
Odgovor je objekt izvajanja simulacije
s stanjem status="queued". Poizvedujte, dokler status ne postane completed ali
failed; ko je nastavljen call_id, naložite prepis prek
GET /v1/calls/{call_id}/transcript.
Paketi: vzporedni scenariji
Hkrati zaženite N scenarijev — uporabno za regresijske zbirke, ki vzporedno obravnavajo vsak znani robni primer:
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 vsebuje seznam run_ids z ID-ji podrejenih izvajanj. Pridobite
stanje paketa:
curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"
run_count je omejen na 20; stagger_seconds razporedi zagone,
da prepreči preobremenitev agenta (0–60 s).
Vključite v CI
Na strani Simulacije (/dashboard/simulations) ustvarite zbirko preizkusov za izdajno zaporo — izberite agenta, ročno dodajte scenarije ali kliknite Ustvarite scenarije z UI, da jih pripravite na podlagi poziva agenta (z izbirnim preverjanjem robnih primerov), nato pa jih združite v zbirko.
Zbirka pripne scenarije in agenta ter določi najmanjšo stopnjo uspešnosti in izbirno pravilo brez kritičnih neuspehov. Uspešni zagoni postanejo sprejeta izhodiščna vrednost; poznejši prehodi iz uspeha v neuspeh se vrnejo kot regresije.
V CI uporabite ključ API organizacije.
Ta skript sproži zbirko, preverja stanje, dokler ocenjevanje in primerjava nista dokončana, ter se zaključi z neničelno kodo, razen če je razsodba 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 vrne 202 z ID-jem zagona. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} vrne
status, verdict, pass_rate, critical_failure_count in seznam
izhodiščnih regressions. Obe končni točki povežeta organizacijo v URL-ju z organizacijo ključa API.
Vzorci
Korpus regresij za posamezen poziv
Vzdržujte datoteko JSON s trojicami {name, scenario_prompt, expected_outcome}.
Ob vsaki spremembi poziva zaženite celoten nabor kot paket; primerjajte prepise in ocene s prejšnjim zagonom.
Preizkus delovanja za posamezno izdajo
En paket petih scenarijev brez zapletov, ki ga zaženete po vsaki uvedbi.
Ker je občutljiv na zakasnitev, ohranite stagger_seconds: 0.
Primerjalno merjenje zakasnitve
Zaženite enake scenarije za različne ravni izdelka (spark,
bolt, storm-base). Primerjajte ocene call.graded in
duration_seconds iz vsakega nastalega dnevnika klica.
Naslednji koraki
Vsi parametri poizvedbe, kode stanja in strukture paketov.
Samodejno ocenite vsak preizkusni zagon za spremljanje kakovosti skozi čas.
Označite določene preizkuse za človeški pregled.
Pošiljajte rezultate v svoj CI / Slack / PagerDuty.