ThunderPhone 2.0 on nyt julkaistu.Ota käyttöön itse – alkaen 2¢/min.Lue lisää julkistuksesta

Developer cookbook

Testaa agentti päästä päähän (API)

Suorita kertaluonteisia simulaatioita, rinnakkaisia skenaariosarjoja ja julkaisun hyväksyntäsarjoja ThunderPhone API:n kautta, jotta agentin regressiot havaitaan ennen kuin asiakkaat kuulevat ne.

Tekoälyagentin iterointi tarkoittaa sen kehotteen, työkalujen ja reunatapausten käsittelytavan iterointia. Simulaatioiden API suorittaa aitoja puheluita agenttia vastaan antamasi skenaariokehotteen avulla. Kohdistaminen agenttiin luo bottien välisen ajon; kohdistaminen puhelinnumeroon luo SIP-takaisinkytkentäajon. Jokainen ajo tuottaa aidon puhelulokin, jossa on litterointi, arviointi ja laskutus, joten näet tarkalleen, miten agentti toimii ja mitä se maksaa.

Käytä sitä seuraaviin:

  • Julkaisua edeltäviin savutesteihin jokaisen kehoteasetuksen muokkauksen jälkeen
  • CI:hin kytkettyihin regressiotestisarjoihin (liitä test-call.completed-webhook → epäonnistuta koonti, jos pisteet laskevat)
  • Samanaikaisuusrajojen kuormitustestaukseen

Kertaluontoinen ajo: yksi suoritus

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

Kentät:

KenttäTyyppiPakollinenKuvaus
target_typemerkkijonokylläagent tai phone_number
target_idkokonaislukukylläAgentin tunnus (tai puhelinnumeron tunnus)
directionmerkkijonoeioutbound (oletus; testisoittaja soittaa) tai inbound (testisoittaja vastaa)
scenario_promptmerkkijonoeiMäärittää, mitä testibotti sanoo
language / primary_languagemerkkijonoeiTestisoittajan kieli; tukemattomat koodit hylätään
simulator_productmerkkijonoeitesting (oletus) tai spark, kun haluat ihmismäisemmän simuloidun soittajan esimerkiksi lämpimän siirron konsultointitesteihin
consent_to_chargetotuusarvokylläArvon on oltava true. Arvioitu veloitus kattaa sekä valitun agentin että simuloidun soittajan sekä mahdollisen puheluyhteyden osuuden
target_numbermerkkijonoeiEtäpuolen E.164-ohitus; muussa tapauksessa käytetään alustan testinumeroa

mode on vain luku -kenttä, ja se johdetaan kentästä target_type: agent tuottaa mode="bot", kun taas phone_number tuottaa mode="sip".

Vastaus on simulaatioajon objekti tilassa status="queued". Kysy tilaa, kunnes status muuttuu arvoksi completed tai failed; kun call_id on asetettu, lataa litterointi käyttämällä GET /v1/calls/{call_id}/transcript.

Erät: rinnakkaiset skenaariot

Suorita N skenaariota samanaikaisesti — hyödyllistä regressiotestisarjoille, jotka osuvat jokaiseen tunnettuun reunatapaukseen rinnakkain:

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

Vastaus sisältää run_ids-luettelon alisuoritusten tunnuksista. Hae erän tila:

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

run_count on rajattu arvoon 20; stagger_seconds porrastaa käynnistyksiä, jotta agenttia ei kuormiteta liikaa (0–60 s).

Kytke se CI:hin

Luo julkaisuportin testisarja Simulaatiot-sivulla (/dashboard/simulations) — valitse agentti, lisää skenaarioita käsin tai luo ne agentin kehotteen pohjalta napsauttamalla Luo skenaarioita tekoälyllä (valinnaisella reunatapaustarkistuksella) ja ryhmittele ne testisarjaksi. Testisarja kiinnittää skenaarionsa ja agenttinsa sekä vähimmäisläpäisyasteen ja valinnaisen nolla kriittistä epäonnistumista -säännön. Hyväksytyksi vertailutasoksi tulevat läpäisseet ajot; myöhemmät läpäisystä epäonnistumiseen siirtymät palautetaan regressioina.

Käytä CI:ssä organisaation API-avainta. Tämä skripti käynnistää testisarjan, kysyy tilaa, kunnes arviointi ja vertailu ovat valmiit, ja päättyy nollasta poikkeavalla paluuarvolla, ellei päätös ole 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 palauttaa 202-vastauksen, jossa on ajon tunnus. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} palauttaa arvot status, verdict, pass_rate, critical_failure_count ja vertailutason regressions-luettelon. Molemmat päätepisteet sitovat URL-osoitteen organisaation API-avaimen organisaatioon.

Mallit

Kehotekohtainen regressioaineisto

Ylläpidä JSON-tiedostoa, joka sisältää {name, scenario_prompt, expected_outcome} -monikoita. Suorita jokaisen kehotemuutoksen yhteydessä koko joukko eränä; vertaa puhelutallenteita ja arvioita edelliseen ajoon.

Julkaisukohtainen savutesti

Yksi erä, jossa on viisi normaalitilanteen skenaariota ja jonka suoritat jokaisen käyttöönoton jälkeen. Tämä on viiveherkkä, joten pidä stagger_seconds: 0.

Viiveen vertailuanalyysi

Suorita samat skenaariot eri tuotetasoilla (spark, bolt, storm-base). Vertaa kunkin tuloksena syntyvän puhelulokin call.graded-pisteitä ja duration_seconds-arvoa.


Seuraavat vaiheet