Test een agent end-to-end (API)
Voer one-shot-simulaties, parallelle scenariobatches en suites voor releasepoorten uit via de ThunderPhone API, zodat regressies in agents worden opgemerkt voordat klanten ze horen.
Itereren op een AI-agent betekent itereren op de prompt, de tools en de manier waarop deze uitzonderingssituaties afhandelt. De simulaties-API voert echte oproepen met een agent uit aan de hand van een scenarioprompt die je opgeeft. Een agent als doel instellen maakt een bot-naar-bot-uitvoering; een telefoonnummer als doel instellen maakt een SIP-loopback-uitvoering. Elke uitvoering levert een echt oproeplogboek op met transcriptie, beoordeling en facturering, zodat je precies ziet hoe de agent zich gedraagt en wat dit kost.
Gebruik dit voor:
- Smoketests vóór implementatie na elke promptwijziging
- Regressiesuites gekoppeld aan CI (koppel de
test-call.completed-webhook → laat de build mislukken als de score daalt) - Stresstests van limieten voor gelijktijdigheid
Eenmalig: enkele uitvoering
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
}'Velden:
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
target_type | string | ja | agent of phone_number |
target_id | integer | ja | De agent-id (of telefoonnummer-id) |
direction | string | nee | outbound (standaard; de testbeller plaatst de oproep) of inbound (de testbeller beantwoordt de oproep) |
scenario_prompt | string | nee | Bepaalt wat de testbot zegt |
language / primary_language | string | nee | Taal voor de testbeller; niet-ondersteunde codes worden geweigerd |
simulator_product | string | nee | testing (standaard) of spark voor een menselijker gesimuleerde beller, zoals tests voor overleg bij warme doorverbinding |
consent_to_charge | boolean | ja | Moet true zijn. De raming factureert zowel de geselecteerde agent als de gesimuleerde beller, plus eventuele telefoonverbindingen |
target_number | string | nee | E.164-override voor de externe kant; anders wordt het testnummer van het platform gebruikt |
mode is alleen-lezen en wordt afgeleid van target_type: agent produceert
mode="bot", terwijl phone_number mode="sip" produceert.
Het antwoord is een simulatie-uitvoeringsobject
met status="queued". Poll totdat status verandert in completed of
failed; zodra call_id is ingesteld, laad je de transcriptie via
GET /v1/calls/{call_id}/transcript.
Batches: parallelle scenario's
Voer N scenario's gelijktijdig uit — handig voor regressiesuites die elk bekend uitzonderingsgeval parallel testen:
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
}'Het antwoord bevat een run_ids-lijst met id's van onderliggende uitvoeringen. Vraag de
batchstatus op:
curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"run_count is beperkt tot 20; stagger_seconds spreidt het starten
om te voorkomen dat de agent overbelast raakt (0–60 s).
Koppel het aan CI
Maak een releasegatesuite op de pagina Simulaties
(/dashboard/simulations) — kies de agent, voeg scenario's handmatig toe of
klik op Scenario's genereren met AI om ze op te stellen op basis van de
prompt van de agent (met een optionele controle op randgevallen), en groepeer
ze in een suite. Een suite zet de scenario's en agent vast, plus een minimale
slagingsgraad en een optionele regel voor nul kritieke fouten. Geslaagde runs
worden de geaccepteerde basislijn; latere overgangen van geslaagd→mislukt worden
teruggegeven als regressies.
Gebruik een organisatie-API-sleutel in CI.
Dit script start de suite, controleert totdat de beoordeling en vergelijking
zijn voltooid, en sluit af met een niet-nulstatus tenzij het oordeel pass is:
#!/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 retourneert 202 met de
run-ID. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} retourneert
status, verdict, pass_rate, critical_failure_count en de
basislijnlijst regressions. Beide endpoints koppelen de organisatie in de URL
aan de organisatie van de API-sleutel.
Patronen
Regressiecorpus per prompt
Onderhoud een JSON-bestand met tuples van {name, scenario_prompt, expected_outcome}.
Voer bij elke promptwijziging de volledige set als batch uit; vergelijk de
transcripten en beoordelingen met de vorige run.
Smoketest per release
Een enkele batch van vijf scenario's voor het ideale pad die je na elke
implementatie uitvoert. Gevoelig voor latentie, dus houd stagger_seconds: 0.
Latentiebenchmarking
Voer identieke scenario's uit voor verschillende productpakketten (spark,
bolt, storm-base). Vergelijk de scores van call.graded en de
duration_seconds uit elk resulterend oproeplogboek.
Volgende stappen
Elke queryparameter, statuscode en batchstructuur.
Beoordeel elke testrun automatisch om de kwaliteit in de loop van de tijd te volgen.
Markeer specifieke tests voor menselijke beoordeling.
Stuur resultaten door naar je CI / Slack / PagerDuty.