ThunderPhone 2.0 jau čia.Viską atlikite savarankiškai – nuo 2 ct/min.Skaityti pranešimą

Developer cookbook

Ištestuokite agentą nuo pradžios iki pabaigos (API)

Vykdykite vienkartines simuliacijas, lygiagrečius scenarijų paketus ir leidimo patikros rinkinius per ThunderPhone API, kad agento regresijos būtų aptiktos prieš klientams jas išgirstant.

Tobulinant DI agentą, tobulinama jo užklausa, įrankiai ir kraštinių atvejų tvarkymas. Simuliacijų API vykdo tikrus skambučius agentui naudodama jūsų pateiktą scenarijaus užklausą. Nurodžius agentą sukuriamas roboto su robotu vykdymas; nurodžius telefono numerį sukuriamas SIP grįžtamojo ryšio vykdymas. Kiekvieno vykdymo metu sukuriamas tikras skambučių žurnalas su transkriptu, vertinimu ir sąskaitų informacija, todėl tiksliai matote, kaip agentas veikia ir kiek tai kainuoja.

Naudokite šią funkciją:

  • Greitiesiems testams prieš diegimą po kiekvieno užklausos redagavimo
  • Regresijos rinkiniams, prijungtiems prie CI (prijunkite test-call.completed žiniatinklio kablį → nesėkmingai užbaikite komponavimą, jei balas sumažėja)
  • Lygiagretumo ribų apkrovos testavimui

Vienkartinis paleidimas: vienas vykdymas

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

Laukai:

LaukasTipasPrivalomasAprašas
target_typeeilutėtaipagent arba phone_number
target_idsveikasis skaičiustaipAgento ID (arba telefono numerio ID)
directioneilutėneoutbound (numatyta reikšmė; testinis skambintojas inicijuoja skambutį) arba inbound (testinis skambintojas atsiliepia)
scenario_prompteilutėneNustato, ką sako testavimo robotas
language / primary_languageeilutėneTestinio skambintojo kalba; nepalaikomi kodai atmetami
simulator_producteilutėnetesting (numatyta reikšmė) arba spark, skirtas labiau žmogiškam imituotam skambintojui, pvz., šiltojo perdavimo konsultacijos testams
consent_to_chargeloginė reikšmėtaipTuri būti true. Sąmata apmokestina ir pasirinktą agentą, ir imituotą skambintoją, taip pat bet kurią telefonijos liniją
target_numbereilutėneE.164 nuotolinės pusės pakeitimas; kitu atveju naudojamas platformos testavimo numeris

mode yra tik skaitomas ir nustatomas pagal target_type: agent sukuria mode="bot", o phone_number sukuria mode="sip".

Atsakymas yra simuliacijos vykdymo objektas, kurio status="queued". Tikrinkite, kol status taps completed arba failed; kai nustatomas call_id, įkelkite transkriptą naudodami GET /v1/calls/{call_id}/transcript.

Paketai: lygiagretūs scenarijai

Vienu metu vykdykite N scenarijų — tai naudinga regresijos rinkiniams, kurie lygiagrečiai apima visus žinomus kraštinius atvejus:

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

Atsakyme pateikiamas antrinių vykdymų ID sąrašas run_ids. Gaukite paketo būseną:

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

run_count ribojamas iki 20; stagger_seconds paskirsto paleidimus laike, kad agentas nebūtų pernelyg apkrautas (0–60 s).

Integruokite į CI

Sukurkite leidimo vartų rinkinį puslapyje Simuliacijos (/dashboard/simulations) — pasirinkite agentą, pridėkite scenarijus rankiniu būdu arba spustelėkite Generuoti scenarijus naudojant DI, kad juos parengtumėte pagal agento raginimą (pasirinktinai papildomai patikrinant kraštutinius atvejus), ir sugrupuokite juos į rinkinį. Rinkinys fiksuoja savo scenarijus ir agentą, taip pat minimalų sėkmės rodiklį ir pasirinktinę nulio kritinių nesėkmių taisyklę. Sėkmingi vykdymai tampa priimta atskaitos būsena; vėlesni perėjimai iš sėkmės į nesėkmę grąžinami kaip regresijos.

CI sistemoje naudokite organizacijos API raktą. Šis scenarijus paleidžia rinkinį, tikrina būseną, kol baigiamas vertinimas ir palyginimas, ir baigia vykdymą su nenuliniu kodu, nebent sprendimas yra 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 grąžina 202 su vykdymo ID. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} grąžina status, verdict, pass_rate, critical_failure_count ir atskaitos būsenos regressions sąrašą. Abu galiniai taškai susieja URL organizaciją su API rakto organizacija.

Paleiskite rinkinį pagal tvarkaraštį

Atidarykite agento skirtuką Simuliuoti, pasirinkite Leidimo vartų rinkiniai ir sukurkite arba redaguokite rinkinį. Įjunkite Vykdyti pagal tvarkaraštį, pasirinkite Dažnumas ir Laiko juosta, tada nustatykite Minutė po valandos, Vietos laikas arba Diena, kaip parodyta. Pasirinkite Išsaugoti rinkinį. Išjungus Vykdyti pagal tvarkaraštį, pašalinamas valdymo skydelio tvarkaraštis.

Per API

Naudodami PATCH atnaujinkite rinkinį, kad pridėtumėte arba pakeistumėte jo tvarkaraštį. Žr. Rinkiniai (leidimo vartai), kur pateiktas visas rinkinio objektas ir galiniai taškai.

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 gali būti hourly, daily arba weekly. Naudokite IANA laiko juostą. Valandiniai tvarkaraščiai naudoja minute; dieniniai tvarkaraščiai naudoja hour ir minute; savaitiniai tvarkaraščiai taip pat naudoja weekday, kur pirmadienis yra 0, o sekmadienis yra 6. Rinkinio atsakyme pateikiami next_run_at ir last_run_at.

Laikai keičiasi pagal pasirinktos laiko juostos vasaros laiko pakeitimus. Suplanuoti vykdymai rodomi rinkinio vykdymų istorijoje ir naudoja jo dabartinį agentą, scenarijus, kriterijus ir priimtą atskaitos būseną. Kiekvienas sugeneruotas bandomasis skambutis siunčia test-call.completed; rinkinio lygio užbaigimo žiniatinklio kabliuko nėra. Suplanuoti skambučiai apmokestinami tokiu pačiu simuliacijos tarifu kaip rankiniai rinkinio vykdymai ir rinkinio vykdyme įrašo trigger: "schedule".

Norėdami pristabdyti tvarkaraštį nekeisdami jo laiko nustatymų, naudodami PATCH atnaujinkite visą esamą tvarkaraščio objektą su "enabled": false. frequency yra privalomas; praleisti laiko juostos ir laiko laukai nustatomi į numatytąsias reikšmes, todėl įtraukite esamas reikšmes. Siųskite "schedule": null, kad pašalintumėte tvarkaraštį.

Modeliai

Regresijos korpusas kiekvienai užklausai

Tvarkykite JSON failą su {name, scenario_prompt, expected_outcome} kortelėmis. Po kiekvieno užklausos pakeitimo paleiskite visą rinkinį kaip paketą; palyginkite transkriptus ir įvertinimus su ankstesnio paleidimo rezultatais.

Dūmų testas kiekvienam leidimui

Vienas paketas iš penkių sėkmingų scenarijų, kurį vykdote po kiekvieno diegimo. Jautrus delsai, todėl palikite stagger_seconds: 0.

Delsos lyginamoji analizė

Paleiskite identiškus scenarijus skirtinguose produkto planuose (spark, bolt, storm-base). Palyginkite call.graded balus ir duration_seconds iš kiekvieno gauto skambučio žurnalo.


Tolesni veiksmai