ThunderPhone 2.0 je tu.Začnite sami, už od 2 ¢/min.Prečítať oznámenie

Developer cookbook

Otestujte agenta od začiatku do konca (API)

Spúšťajte jednorazové simulácie, paralelné dávky scenárov a súpravy kontrol pred vydaním prostredníctvom rozhrania ThunderPhone API, aby sa regresie agenta zachytili skôr, než ich zákazníci začujú.

Iterovanie hlasového agenta AI znamená iterovanie jeho promptu, nástrojov a spôsobu, akým rieši okrajové prípady. API simulácií uskutočňuje skutočné hovory s agentom pomocou promptu scenára, ktorý zadáte. Cielenie na agenta vytvorí beh bot–bot; cielenie na telefónne číslo vytvorí SIP loopback beh. Každý beh vytvorí skutočný záznam hovoru s prepisom, hodnotením a účtovaním, takže presne vidíte, ako sa agent správa a koľko stojí.

Použite ho na:

  • Smoke testy pred nasadením po každej úprave promptu
  • Regresné súpravy prepojené s CI (pripojte webhook test-call.completed → zlyhanie buildu pri poklese skóre)
  • Záťažové testovanie limitov súbežnosti

Jednorazovo: jeden beh

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

Polia:

PoleTypPovinnéPopis
target_typestringánoagent alebo phone_number
target_idintegeránoID agenta (alebo ID telefónneho čísla)
directionstringnieoutbound (predvolené; testovací volajúci uskutoční hovor) alebo inbound (testovací volajúci hovor prijme)
scenario_promptstringnieUrčuje, čo testovací bot povie
language / primary_languagestringnieJazyk testovacieho volajúceho; nepodporované kódy budú odmietnuté
simulator_productstringnietesting (predvolené) alebo spark pre simulovaného volajúceho, ktorý pôsobí ľudskejšie, napríklad pri testoch konzultácie pred teplým prepojením
consent_to_chargebooleanánoMusí byť true. Účtujú sa odhadované náklady za vybraného agenta aj simulovaného volajúceho spolu s akoukoľvek telekomunikačnou vetvou
target_numberstringniePrepísanie vzdialenej strany vo formáte E.164; inak sa použije testovacie číslo platformy

mode je iba na čítanie a odvodzuje sa z target_type: agent vytvorí mode="bot", zatiaľ čo phone_number vytvorí mode="sip".

Odpoveď je objekt behu simulácie so stavom status="queued". Dotazujte sa, kým sa status nezmení na completed alebo failed; po nastavení call_id načítajte prepis cez GET /v1/calls/{call_id}/transcript.

Dávky: paralelné scenáre

Spustite N scenárov súčasne — užitočné pre regresné súpravy, ktoré paralelne pokrývajú všetky známe okrajové prípady:

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

Odpoveď obsahuje zoznam run_ids s ID podradených behov. Načítajte stav dávky:

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

Hodnota run_count je obmedzená na 20; stagger_seconds rozkladá spúšťanie v čase, aby sa agent nepreťažoval (0–60 s).

Zapojte ho do CI

Na stránke Simulácie (/dashboard/simulations) vytvorte súpravu brány vydania — vyberte agenta, pridajte scenáre ručne alebo kliknite na Generovať scenáre pomocou AI, aby ste ich vytvorili z výzvy agenta (s voliteľným spracovaním okrajových prípadov), a zoskupte ich do súpravy. Súprava pevne nastaví scenáre a agenta spolu s minimálnou mierou úspešnosti a voliteľným pravidlom nulového počtu kritických zlyhaní. Úspešné spustenia sa stanú schváleným referenčným stavom; neskoršie prechody z úspechu na zlyhanie sa vrátia ako regresie.

V CI použite organizačný kľúč API. Tento skript spustí súpravu, zisťuje stav, kým sa nedokončí hodnotenie a porovnanie, a skončí s nenulovým kódom, ak verdikt nie je 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 vráti 202 s identifikátorom spustenia. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} vráti status, verdict, pass_rate, critical_failure_count a zoznam referenčných regressions. Oba koncové body viažu organizáciu v URL na organizáciu kľúča API.

Spúšťanie súpravy podľa plánu

Otvorte kartu Simulovať agenta, vyberte Súpravy brán vydania a vytvorte alebo upravte súpravu. Zapnite Spúšťať podľa plánu, vyberte Frekvenciu a Časové pásmo, potom podľa zobrazenia nastavte Minútu po celej hodine, Miestny čas alebo Deň. Vyberte Uložiť súpravu. Zrušením začiarknutia možnosti Spúšťať podľa plánu odstránite plán v paneli.

Prostredníctvom API

Pomocou PATCH aktualizujte súpravu tak, aby ste pridali alebo nahradili jej plán. Úplný objekt súpravy a koncové body nájdete v časti Súpravy (brány vydania).

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 môže byť hourly, daily alebo weekly. Použite časové pásmo IANA. Hodinové plány používajú minute; denné plány používajú hour a minute; týždenné plány používajú aj weekday, pričom pondelok je 0 a nedeľa je 6. Odpoveď súpravy obsahuje next_run_at a last_run_at.

Časy sa riadia zmenami letného času vo vybranom časovom pásme. Plánované spustenia sa zobrazia v histórii spustení súpravy a používajú jej aktuálneho agenta, scenáre, kritériá a schválený referenčný stav. Každý vygenerovaný testovací hovor odošle test-call.completed; webhook dokončenia na úrovni súpravy neexistuje. Plánované hovory sa účtujú rovnakou sadzbou za simuláciu ako manuálne spustenia súpravy a pri spustení súpravy zaznamenávajú trigger: "schedule".

Ak chcete plán pozastaviť bez zmeny jeho časovania, pomocou PATCH odošlite úplný existujúci objekt plánu s "enabled": false. Položka frequency je povinná; vynechané časové pásmo a časové polia sa obnovia na predvolené hodnoty, preto uveďte existujúce hodnoty. Ak chcete plán odstrániť, odošlite "schedule": null.

Vzory

Regresný korpus pre každý prompt

Udržiavajte súbor JSON s trojicami {name, scenario_prompt, expected_outcome}. Pri každej zmene promptu spustite celú množinu ako dávku; porovnajte prepisy a hodnotenia s predchádzajúcim spustením.

Smoke test pre každé vydanie

Jedna dávka piatich scenárov úspešného priebehu, ktorú spustíte po každom nasadení. Je citlivá na latenciu, preto ponechajte stagger_seconds: 0.

Porovnávanie latencie

Spúšťajte identické scenáre v rôznych produktových úrovniach (spark, bolt, storm-base). Porovnajte skóre call.graded a hodnotu duration_seconds z každého výsledného denníka hovorov.


Ďalšie kroky