Наскрізне тестування агента (API)
Запускайте одноразові симуляції, паралельні пакети сценаріїв і набори перевірок перед релізом через API ThunderPhone, щоб виявляти регресії агента до того, як їх почують клієнти.
Ітерація голосового агента означає ітерацію його промпту, інструментів і способу обробки крайніх випадків. API симуляцій виконує реальні дзвінки до агента за наданим вами промптом сценарію. Націлювання на агента створює запуск бот-до-бота; націлювання на номер телефону створює SIP-лупбек. Кожен запуск створює реальний журнал дзвінка з транскриптом, оцінюванням і виставленням рахунків, тож ви точно бачите, як поводиться агент і скільки це коштує.
Використовуйте для:
- Швидких перевірок перед розгортанням після кожного редагування промпту
- Регресійних наборів тестів, підключених до CI (підключіть вебхук
test-call.completed→ завершуйте збірку з помилкою, якщо оцінка знижується) - Стрес-тестування лімітів одночасності
Одноразовий запуск: один прогін
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
}'Поля:
| Поле | Тип | Обов’язково | Опис |
|---|---|---|---|
target_type | рядок | так | agent або phone_number |
target_id | ціле число | так | Ідентифікатор агента (або номера телефону) |
direction | рядок | ні | outbound (за замовчуванням; тестовий абонент телефонує) або inbound (тестовий абонент відповідає) |
scenario_prompt | рядок | ні | Визначає, що каже тестовий бот |
language / primary_language | рядок | ні | Мова тестового абонента; непідтримувані коди відхиляються |
simulator_product | рядок | ні | testing (за замовчуванням) або spark для більш схожого на людину симульованого абонента, наприклад для тестів консультації під час теплого переведення |
consent_to_charge | логічне значення | так | Має бути true. Оцінка тарифікує і вибраного агента, і симульованого абонента, а також будь-яке телекомунікаційне з’єднання |
target_number | рядок | ні | Перевизначення E.164 для віддаленої сторони; інакше використовується тестовий номер платформи |
mode доступний лише для читання та визначається на основі target_type: agent створює
mode="bot", тоді як phone_number створює mode="sip".
Відповідь містить об’єкт запуску симуляції
зі status="queued". Опитуйте, доки status не стане completed або
failed; щойно буде встановлено call_id, завантажте транскрипт через
GET /v1/calls/{call_id}/transcript.
Пакети: паралельні сценарії
Запускайте N сценаріїв одночасно — це корисно для регресійних наборів тестів, які паралельно охоплюють усі відомі крайні випадки:
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
}'Відповідь містить список run_ids ідентифікаторів дочірніх запусків. Отримайте
статус пакета:
curl https://api.thunderphone.com/v1/simulations/batches/{batch_id} \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"run_count обмежено значенням 20; stagger_seconds розподіляє запуск у часі,
щоб не перевантажувати агента (0–60 с).
Підключіть до CI
Створіть набір перевірок для випуску на сторінці Симуляції
(/dashboard/simulations) — виберіть агента, додайте сценарії вручну або
натисніть Генерувати сценарії за допомогою ШІ, щоб створити їхні чернетки на основі
промпту агента (з додатковою перевіркою крайніх випадків), і згрупуйте їх у набір.
Набір фіксує свої сценарії та агента, а також мінімальний рівень успішного проходження
й необов’язкове правило нульової кількості критичних збоїв. Успішні запуски стають
прийнятим базовим еталоном; подальші переходи зі стану успіху до збою повертаються як регресії.
Використовуйте ключ API організації у CI.
Цей скрипт запускає набір, опитує стан до завершення оцінювання та порівняння
і завершується з ненульовим кодом, якщо вердикт не 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 1POST /v1/orgs/{org_id}/suites/{suite_id}/run повертає 202 з ідентифікатором
запуску. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} повертає
status, verdict, pass_rate, critical_failure_count і базовий список
regressions. Обидві кінцеві точки прив’язують організацію в URL до організації
ключа API.
Шаблони
Регресійний набір для кожного промпту
Підтримуйте JSON-файл з кортежами {name, scenario_prompt, expected_outcome}.
Після кожної зміни промпту запускайте повний набір як пакет; порівнюйте
транскрипти й оцінки з попереднім запуском.
Димовий тест для кожного випуску
Один пакет із п’яти сценаріїв штатного проходження, який ви запускаєте після кожного
розгортання. Він чутливий до затримки, тому залиште stagger_seconds: 0.
Тестування затримки
Запускайте ідентичні сценарії для різних рівнів продукту (spark,
bolt, storm-base). Порівнюйте оцінки call.graded і
duration_seconds з кожного отриманого журналу виклику.
Наступні кроки
Усі параметри запиту, коди стану та структура пакетів.
Автоматично оцінюйте кожен тестовий запуск, щоб відстежувати якість із часом.
Позначайте конкретні тести для перевірки людиною.
Передавайте результати до вашого CI / Slack / PagerDuty.