ThunderPhone 2.0 er lansert.Kom i gang selv, fra 2 ¢/min.Les mer om lanseringen

Developer cookbook

Test en agent ende-til-ende (API)

Kjør engangssimuleringer, parallelle scenariobatcher og suiter for utgivelsesporter gjennom ThunderPhone API, slik at regresjoner i agenten fanges opp før kundene hører dem.

Å iterere på en AI-agent betyr å iterere på prompten, verktøyene og måten den håndterer randtilfeller på. Simulerings-API-et kjører ekte samtaler mot en agent ved hjelp av en scenarioprompt du oppgir. Å målrette mot en agent oppretter en bot-til-bot-kjøring; å målrette mot et telefonnummer oppretter en SIP-loopback-kjøring. Hver kjøring produserer en ekte samtalelogg med transkripsjon, vurdering og fakturering, slik at du ser nøyaktig hvordan agenten oppfører seg og hva den koster.

Bruk det til:

  • Røyketester før distribusjon etter hver promptendring
  • Regresjonssuiter koblet til CI (koble til webhooken test-call.completed → la byggingen feile hvis poengsummen synker)
  • Belastningstesting av samtidighetsgrenser

Éngangskjøring: enkeltkjøring

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
  }'

Felt:

FeltTypePåkrevdBeskrivelse
target_typestringjaagent eller phone_number
target_idintegerjaAgent-ID-en (eller telefonnummer-ID-en)
directionstringneioutbound (standard; testinnringeren ringer) eller inbound (testinnringeren svarer)
scenario_promptstringneiStyrer hva testboten sier
language / primary_languagestringneiSpråk for testinnringeren; koder som ikke støttes, avvises
simulator_productstringneitesting (standard) eller spark for en mer menneskelignende simulert innringer, for eksempel tester av konsultasjon ved varm overføring
consent_to_chargebooleanjaMå være true. Estimatet fakturerer både den valgte agenten og den simulerte innringeren, samt eventuelle telefoniøkter
target_numberstringneiE.164-overstyring for den eksterne siden; ellers brukes plattformens testnummer

mode er skrivebeskyttet og avledes fra target_type: agent produserer mode="bot", mens phone_number produserer mode="sip".

Svaret er et objekt for simuleringskjøring med status="queued". Poll til status blir completed eller failed; når call_id er angitt, laster du inn transkripsjonen via GET /v1/calls/{call_id}/transcript.

Batcher: parallelle scenarioer

Kjør N scenarioer samtidig — nyttig for regresjonssuiter som treffer hvert kjente randtilfelle parallelt:

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
  }'

Svaret inneholder en run_ids-liste med underordnede kjørings-ID-er. Hent batch- status:

curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

run_count er begrenset til 20; stagger_seconds fordeler oppstarten for å unngå å overbelaste agenten (0–60 s).

Koble det til CI

Opprett en utgivelsesportpakke på siden Simuleringer (/dashboard/simulations) – velg agenten, legg til scenarier manuelt eller klikk Generer scenarier med AI for å utarbeide dem fra agentens prompt (med en valgfri gjennomgang av kanttilfeller), og grupper dem i en pakke. En pakke låser scenariene og agenten, samt en minste beståttprosent og en valgfri regel om null kritiske feil. Beståtte kjøringer blir det godkjente referansegrunnlaget; senere overganger fra bestått til ikke bestått rapporteres som regresjoner.

Bruk en organisasjons-API-nøkkel i CI. Dette skriptet utløser pakken, sjekker status til vurderingen og sammenligningen er fullført, og avslutter med en annen status enn null med mindre resultatet er 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 returnerer 202 med kjørings-ID-en. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} returnerer status, verdict, pass_rate, critical_failure_count og referansegrunnlagets liste over regressions. Begge endepunktene knytter organisasjonen i URL-en til organisasjonen for API-nøkkelen.

Mønstre

Regresjonskorpus per prompt

Vedlikehold en JSON-fil med tupler av {name, scenario_prompt, expected_outcome}. Ved hver endring i prompten kjører du hele settet som en batch; sammenlign transkripsjonene og vurderingene med forrige kjøring.

Røyketest per utgivelse

En enkelt batch med fem scenarier for normalflyten som du kjører etter hver utrulling. Latenssensitiv, så behold stagger_seconds: 0.

Latensbenchmarking

Kjør identiske scenarier mot ulike produktnivåer (spark, bolt, storm-base). Sammenlign call.graded-skårene og duration_seconds fra hver resulterende samtalelogg.


Neste steg