> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thunderphone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Testējiet balss aģentu pilnā plūsmā (API)

> Palaidiet iepriekš definētus scenārijus savā balss aģentā, izmantojot testa zvanu API, lai regresijas tiktu konstatētas, pirms tās dzird klienti.

<Note>
  Vai vēlaties izmantot informācijas paneli? Tā pati iespēja ir pieejama sadaļā **Simulācijas**
  (`/dashboard/simulations`), tostarp AI scenāriju ģenerēšana — skatiet
  [Simulēt zvanu](/lv/guides/simulate-a-call). Šajā lapā ir aprakstīta
  programmatiska pieeja.
</Note>

AI aģenta iteratīva pilnveide nozīmē iteratīvi uzlabot tā uzvedni, rīkus
un veidu, kā tas apstrādā robežgadījumus. **test-calls API** veic īstus
(bota–bota vai SIP atgriezeniskās cilpas) zvanus uz balss aģentu, izmantojot
jūsu norādītu scenārija uzvedni — katrs izpildījums izveido īstu zvana žurnālu ar
stenogrammu, vērtējumu un norēķiniem, lai jūs precīzi redzētu, kā aģents
darbojas un cik tas maksā.

Izmantojiet to šādiem mērķiem:

* Ātrie testi pirms izvietošanas pēc katras uzvednes rediģēšanas
* Regresijas testu komplekti, kas savienoti ar CI (piesaistiet `test-call.completed` tīmekļa aizķeri
  → neizpildiet būvējumu, ja vērtējums samazinās)
* Vienlaicīguma ierobežojumu slodzes testēšana

## Vienreizēja palaišana: viens izpildījums

```bash theme={null}
curl -X POST https://api.thunderphone.com/v1/test-calls \
  -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
  }'
```

Lauki:

| Lauks               | Tips            | Obligāts | Apraksts                                                               |
| ------------------- | --------------- | -------- | ---------------------------------------------------------------------- |
| `target_type`       | virkne          | jā       | `agent` vai `phone_number`                                             |
| `target_id`         | vesels skaitlis | jā       | Aģenta ID (vai tālruņa numura ID)                                      |
| `direction`         | virkne          | jā       | `outbound` (bots zvana) vai `inbound` (bots atbild)                    |
| `scenario_prompt`   | virkne          | nē       | Nosaka, ko saka testa bots                                             |
| `mode`              | virkne          | nē       | `bot` (bots–bots, pēc noklusējuma) vai `sip` (SIP atgriezeniskā cilpa) |
| `consent_to_charge` | Būla vērtība    | **jā**   | Jābūt `true`. Testa zvani maksā 2× parasto tarifu                      |
| `target_number`     | virkne          | nē       | Bota zvanītāja ID (E.164) aizstāšana                                   |

Atbilde ir [testa zvana izpildījuma objekts](/api-reference/test-calls#test-call-run-object)
ar `status="queued"`. Regulāri vaicājiet, līdz `status` kļūst par `completed` vai
`failed`; kad ir iestatīts `call_id`, ielādējiet stenogrammu, izmantojot
[`GET /v1/calls/{call_id}/transcript`](/api-reference/calls#get-transcript).

## Paketes: paralēli scenāriji

Vienlaikus palaidiet N scenārijus — noderīgi regresijas testu komplektiem, kas
paralēli pārbauda katru zināmo robežgadījumu:

```bash theme={null}
curl -X POST https://api.thunderphone.com/v1/test-call-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
  }'
```

Atbildē ir pakārtoto izpildījumu ID saraksts `run_ids`. Iegūstiet paketes
statusu:

```bash theme={null}
curl https://api.thunderphone.com/v1/test-call-batches/{batch_id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```

`run_count` ir ierobežots līdz 20; `stagger_seconds` nosaka intervālu starp palaišanām,
lai nepārslogotu aģentu (0–60 s).

## Integrējiet to CI

Lapā **Simulācijas** (`/dashboard/simulations`) izveidojiet laidiena vārtu komplektu — atlasiet balss aģentu, manuāli pievienojiet scenārijus vai
noklikšķiniet uz **Ģenerēt scenārijus ar MI**, lai izveidotu to melnrakstus, pamatojoties uz balss aģenta
uzvedni (ar izvēles robežgadījumu pārbaudi), un grupējiet tos komplektā.
Komplekts fiksē savus scenārijus un balss aģentu, kā arī minimālo sekmīgas izpildes rādītāju un
izvēles nulles kritisko kļūmju noteikumu. Sekmīgas izpildes kļūst par apstiprināto
bāzlīniju; vēlākas pārejas no sekmīgas uz neveiksmīgu izpildi tiek atgrieztas kā regresijas.

CI izmantojiet [organizācijas API atslēgu](/api-reference/developer-api-keys).
Šis skripts aktivizē komplektu, veic aptauju, līdz vērtēšana un salīdzināšana ir
pabeigta, un beidz darbu ar nenulles kodu, ja vien spriedums nav `pass`:

```bash theme={null}
#!/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` atgriež `202` ar
izpildes ID. `GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id}` atgriež
`status`, `verdict`, `pass_rate`, `critical_failure_count` un
bāzlīnijas `regressions` sarakstu. Abi galapunkti saista URL organizāciju
ar API atslēgas organizāciju.

## Modeļi

### Katras uzvednes regresiju korpuss

Uzturiet JSON failu ar `{name, scenario_prompt, expected_outcome}`
kortežiem. Pēc katras uzvednes izmaiņas palaidiet visu kopu kā paketi; salīdziniet
transkriptus un vērtējumus ar iepriekšējo izpildi.

### Katra laidiena dūmu tests

Viena pakete ar pieciem veiksmīgas norises scenārijiem, ko palaižat pēc katras
izvietošanas. Jutīgs pret latentumu, tāpēc saglabājiet `stagger_seconds: 0`.

### Latentuma etalonmērīšana

Palaidiet identiskus scenārijus dažādos produktu līmeņos (`spark`,
`bolt`, `storm-base`). Salīdziniet `call.graded` vērtējumus un
`duration_seconds` no katra iegūtā zvanu žurnāla.

***

## Nākamās darbības

<CardGroup cols={2}>
  <Card title="Testa zvanu atsauce" icon="flask" href="/api-reference/test-calls">
    Visi vaicājuma parametri, statusa kodi un pakešu formāti.
  </Card>

  <Card title="MI vērtēšana" icon="chart-line" href="/api-reference/calls#ai-call-grading">
    Automātiski novērtējiet katru testa izpildi, lai laika gaitā sekotu kvalitātei.
  </Card>

  <Card title="Problēmu ziņojumi" icon="triangle-exclamation" href="/api-reference/issue-reports">
    Atzīmējiet konkrētus testus manuālai pārskatīšanai.
  </Card>

  <Card title="test-call.completed tīmekļa āķis" icon="bolt" href="/lv/webhooks/events">
    Straumējiet rezultātus savā CI / Slack / PagerDuty.
  </Card>
</CardGroup>
