---
title: "Testi agenti algusest lõpuni (API)"
description: "Käivita ThunderPhone API kaudu ühekordseid simulatsioone, paralleelseid stsenaariumipakette ja väljalaskevärava testikomplekte, et agendi regressioonid leitaks enne, kui kliendid neid kuulevad."
---

<Note>
  Eelistad juhtpaneeli? Sama funktsioon asub jaotises **Simulatsioonid**
  (`/dashboard/simulations`), sealhulgas AI-stsenaariumide genereerimine — vaata
  [Kõne simuleerimine](/et/guides/simulate-a-call). See leht käsitleb
  programmilist kasutusviisi.
</Note>

AI-agendi arendamine tähendab selle viiba, tööriistade ja
äärmusjuhtumite käsitlemise viisi arendamist. **Simulatsioonide API** teeb tegelikke
kõnesid agendile sinu antud stsenaariumiviiba abil. Agendi sihtimine loob
botilt botile käituse; telefoninumbri sihtimine loob
SIP-tagasisideahela käituse. Iga käitus loob tegeliku kõnelogi koos
transkriptsiooni, hindamise ja arveldusega, et näeksid täpselt, kuidas agent
käitub ja kui palju see maksab.

Kasuta seda järgmiseks:

- Kasutuselevõtueelsete suitsutestide tegemiseks pärast iga viibamuudatust
- CI-ga ühendatud regressioonitestide jaoks (seo `test-call.completed` veebikonks
  → nurja ehitus, kui skoor langeb)
- Samaaegsuspiirangute koormustestimiseks

## Ühekordne käitus: üks käitus

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

Väljad:

| Väli | Tüüp | Kohustuslik | Kirjeldus |
|-------|------|----------|-------------|
| `target_type` | string | jah | `agent` või `phone_number` |
| `target_id` | integer | jah | Agendi ID (või telefoninumbri ID) |
| `direction` | string | ei | `outbound` (vaikimisi; testhelistaja helistab) või `inbound` (testhelistaja vastab) |
| `scenario_prompt` | string | ei | Määrab, mida testbot ütleb |
| `language` / `primary_language` | string | ei | Testhelistaja keel; toetamata koodid lükatakse tagasi |
| `simulator_product` | string | ei | `testing` (vaikimisi) või `spark`, et kasutada inimlikumat simuleeritud helistajat, näiteks soojalt edastatud kõne konsultatsioonitestides |
| `consent_to_charge` | boolean | **jah** | Peab olema `true`. Arveldus hõlmab nii valitud agenti kui ka simuleeritud helistajat ning kõiki telefoniside etappe |
| `target_number` | string | ei | Kaugpoole E.164 alistus; muul juhul kasutatakse platvormi testnumbrit |

`mode` on kirjutuskaitstud ja tuletatakse väljast `target_type`: `agent` loob
väärtuse `mode="bot"`, samas kui `phone_number` loob väärtuse `mode="sip"`.

Vastus on [simulatsiooni käitusobjekt](/api-reference/test-calls#test-call-run-object)
olekus `status="queued"`. Küsitle kuni `status` muutub väärtuseks `completed` või
`failed`; kui `call_id` on määratud, laadi transkriptsioon läbi
[`GET /v1/calls/{call_id}/transcript`](/api-reference/calls#get-transcript).

## Partiikäitused: paralleelsed stsenaariumid

Käivita N stsenaariumi samaaegselt — kasulik regressioonitestide jaoks, mis
kontrollivad kõiki teadaolevaid äärmusjuhtumeid paralleelselt:

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

Vastus sisaldab alamkäituste ID-de loendit `run_ids`. Hangi partii
olek:

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

`run_count` on piiratud väärtusega 20; `stagger_seconds` jaotab käivitused ajas
laiali, et vältida agendi ülekoormamist (0–60 s).

## Seo see CI-ga

Loo **Simulatsioonide** lehel (`/dashboard/simulations`) väljalaskevärava komplekt — vali agent, lisa stsenaariumid käsitsi või klõpsa **Genereeri stsenaariumid tehisintellektiga**, et koostada need agendi viiba põhjal (soovi korral koos äärmusjuhtumite kontrolliga), ning rühmita need komplekti.
Komplekt fikseerib oma stsenaariumid ja agendi ning minimaalse läbimise määra ja valikulise nulli kriitiliste ebaõnnestumiste reegli. Läbinud käitused muutuvad aktsepteeritud lähtealuseks; hilisemad üleminekud läbimiselt ebaõnnestumisele tagastatakse regressioonidena.

Kasuta CI-s [organisatsiooni API-võtit](/api-reference/developer-api-keys).
See skript käivitab komplekti, kontrollib olekut kuni hindamine ja võrdlus on
lõpetatud ning lõpetab nullist erineva väljumiskoodiga, kui otsus ei ole `pass`:

```bash
#!/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` tagastab käituse ID-ga `202`.
`GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id}` tagastab väljad
`status`, `verdict`, `pass_rate`, `critical_failure_count` ja lähtealuse
`regressions` loendi. Mõlemad lõpp-punktid seovad URL-is oleva organisatsiooni
API-võtme organisatsiooniga.

## Käivita komplekt ajakava alusel

Ava agendi vahekaart **Simuleeri**, vali **Väljalaskevärava komplektid** ning loo või
muuda komplekti. Lülita sisse **Käivita ajakava alusel**, vali **Sagedus** ja
**Ajavöönd**, seejärel määra kuvatud viisil **Tundijärgne minut**, **Kohalik aeg**
või **Päev**. Vali **Salvesta komplekt**. Valiku **Käivita ajakava alusel**
tühistamine eemaldab töölaua ajakava.

### API kaudu

Saada komplektile PATCH-päring, et lisada või asendada selle ajakava. Täieliku
komplektiobjekti ja lõpp-punktide kohta vaata [Komplektid
(väljalaskeväravad)](/api-reference/test-scenarios#suites-release-gates).

```bash
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` võib olla `hourly`, `daily` või `weekly`. Kasuta IANA ajavööndit.
Tunnipõhised ajakavad kasutavad `minute`; päevapõhised ajakavad kasutavad `hour`
ja `minute`; nädalapõhised ajakavad kasutavad lisaks `weekday`, kus esmaspäev on
`0` ja pühapäev on `6`. Komplekti vastus sisaldab välju `next_run_at` ja
`last_run_at`.

Ajad järgivad valitud ajavööndi suveaja muutusi. Ajastatud käitused kuvatakse
komplekti käituste ajaloos ning kasutavad selle praegust agenti, stsenaariume,
kriteeriume ja aktsepteeritud lähtealust. Iga genereeritud testkõne saadab
sündmuse `test-call.completed`; komplektitaseme lõpetamise veebikonksu pole.
Ajastatud kõnede eest arveldatakse sama simulatsioonihinna alusel nagu käsitsi
käivitatud komplektikäituste eest ning komplekti käitusel salvestatakse
`trigger: "schedule"`.

Ajakava peatamiseks ilma selle kellaaegu muutmata saada täielik olemasolev
ajakavaobjekt PATCH-päringuga koos väärtusega `"enabled": false`. `frequency` on
kohustuslik; välja jäetud ajavööndi- ja ajaväljad lähtestatakse vaikeväärtustele,
seega lisa olemasolevad väärtused. Ajakava eemaldamiseks saada
`"schedule": null`.

## Mustrite tüübid

### Promptipõhine regressioonikorpus

Halda JSON-faili `{name, scenario_prompt, expected_outcome}`
tuplitega. Käivita iga prompti muudatuse järel kogu komplekt pakina; võrdle
transkripte ja hindeid eelmise käivitusega.

### Väljalaske-eelne suitsutest

Üks pakett viie ootuspärase stsenaariumiga, mille käivitad pärast iga
juurutust. Latentsustundlik, seega hoia `stagger_seconds: 0`.

### Latentsuse võrdlusuuring

Käivita identsed stsenaariumid erinevate tootetasemete (`spark`,
`bolt`, `storm-base`) vastu. Võrdle iga tulemuseks saadud kõnelogi
`call.graded` skoori ja `duration_seconds` väärtust.

---

## Järgmised sammud

<CardGroup cols={2}>
  <Card title="Testkõnede viide" icon="flask" href="/api-reference/test-calls">
    Kõik päringuparameetrid, olekukoodid ja pakettide vormid.
  </Card>
  <Card title="AI hindamine" icon="chart-line" href="/api-reference/calls#ai-call-grading">
    Hinda iga testikäitus automaatselt, et jälgida kvaliteeti aja jooksul.
  </Card>
  <Card title="Probleemiaruanded" icon="triangle-exclamation" href="/api-reference/issue-reports">
    Märgi konkreetsed testid inimese ülevaatuseks.
  </Card>
  <Card title="test-call.completed webhook" icon="bolt" href="/et/webhooks/events">
    Edasta tulemused oma CI-sse / Slacki / PagerDutysse.
  </Card>
</CardGroup>
