ThunderPhone 2.0 kini resmi hadir.Gunakan langsung secara mandiri, mulai 2¢/menit.Baca pengumumannya

Developer cookbook

Uji agen secara menyeluruh (API)

Jalankan simulasi sekali jalan, batch skenario paralel, dan rangkaian gerbang rilis melalui API ThunderPhone agar regresi agen terdeteksi sebelum didengar oleh pelanggan.

Melakukan iterasi pada agen AI berarti melakukan iterasi pada Prompt, alatnya, dan cara agen menangani kasus tepi. API simulasi menjalankan panggilan nyata terhadap agen menggunakan Prompt skenario yang Anda berikan. Menargetkan agen membuat proses bot-ke-bot; menargetkan nomor telepon membuat proses loopback SIP. Setiap proses menghasilkan log panggilan nyata dengan transkrip, penilaian, dan penagihan, sehingga Anda dapat melihat secara tepat cara agen berperilaku dan biayanya.

Gunakan untuk:

  • Uji smoke pra-deploy setelah setiap pengeditan Prompt
  • Suite regresi yang terhubung ke CI (hubungkan webhook test-call.completed → gagalkan build jika skor menurun)
  • Pengujian stres batas konkurensi

Sekali jalan: satu proses

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

Kolom:

KolomTipeWajibDeskripsi
target_typestringyaagent atau phone_number
target_idintegeryaID agen (atau ID nomor telepon)
directionstringtidakoutbound (default; penelepon pengujian melakukan panggilan) atau inbound (penelepon pengujian menjawab)
scenario_promptstringtidakMenentukan apa yang dikatakan bot pengujian
language / primary_languagestringtidakBahasa untuk penelepon pengujian; kode yang tidak didukung akan ditolak
simulator_productstringtidaktesting (default) atau spark untuk penelepon simulasi yang lebih mirip manusia, seperti pengujian konsultasi transfer hangat
consent_to_chargebooleanyaHarus berupa true. Estimasi menagihkan agen yang dipilih dan penelepon simulasi dengan tarif tetap per menit, ditambah biaya sambungan telepon
target_numberstringtidakPenggantian E.164 untuk sisi jarak jauh; jika tidak, nomor pengujian Platform digunakan

mode bersifat hanya baca dan diturunkan dari target_type: agent menghasilkan mode="bot", sedangkan phone_number menghasilkan mode="sip".

Responsnya adalah objek proses simulasi dengan status="queued". Lakukan polling hingga status menjadi completed atau failed; setelah call_id ditetapkan, muat transkrip melalui GET /v1/calls/{call_id}/transcript.

Batch: skenario paralel

Jalankan N skenario secara bersamaan — berguna untuk suite regresi yang menangani setiap kasus tepi yang diketahui secara paralel:

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

Respons berisi daftar run_ids dari ID proses turunan. Ambil Status batch:

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

run_count dibatasi hingga 20; stagger_seconds memberi jarak waktu pada pembuatan proses untuk menghindari membebani agen secara berlebihan (0–60 dtk).

Hubungkan ke CI

Buat suite gerbang rilis di halaman Simulasi (/dashboard/simulations) — pilih agen, tambahkan skenario secara manual atau klik Buat skenario dengan AI untuk menyusunnya dari Prompt agen (dengan pemeriksaan kasus tepi opsional), lalu kelompokkan ke dalam suite. Suite menetapkan skenario dan agennya, serta tingkat kelulusan minimum dan aturan opsional tanpa kegagalan kritis. Proses yang lulus menjadi baseline yang diterima; transisi lulus→gagal berikutnya dikembalikan sebagai regresi.

Gunakan kunci API organisasi di CI. Skrip ini memicu suite, melakukan polling hingga penilaian dan perbandingan selesai, lalu keluar dengan nilai bukan nol kecuali putusannya adalah 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 mengembalikan 202 dengan id proses. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} mengembalikan status, verdict, pass_rate, critical_failure_count, serta daftar regressions baseline. Kedua endpoint mengikat organisasi pada URL ke organisasi milik kunci API.

Jalankan suite sesuai jadwal

Buka tab Simulasikan agen, pilih Suite gerbang rilis, lalu buat atau edit suite. Aktifkan Jalankan sesuai jadwal, pilih Frekuensi dan Zona waktu, kemudian atur Menit setelah jam, Waktu lokal, atau Hari seperti yang ditampilkan. Pilih Simpan suite. Menghapus centang Jalankan sesuai jadwal akan menghapus jadwal dashboard.

Melalui API

PATCH suite untuk menambahkan atau mengganti jadwalnya. Lihat Suite (gerbang rilis) untuk objek suite dan endpoint lengkap.

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 dapat berupa hourly, daily, atau weekly. Gunakan zona waktu IANA. Jadwal per jam menggunakan minute; jadwal harian menggunakan hour dan minute; jadwal mingguan juga menggunakan weekday, dengan Senin adalah 0 dan Minggu adalah 6. Respons suite mencakup next_run_at dan last_run_at.

Waktu mengikuti perubahan waktu musim panas pada zona waktu yang dipilih. Proses terjadwal muncul dalam riwayat proses suite dan menggunakan agen, skenario, kriteria, serta baseline yang diterima saat ini. Setiap panggilan pengujian yang dibuat memancarkan test-call.completed; tidak ada webhook penyelesaian tingkat suite. Panggilan terjadwal ditagihkan dengan tarif simulasi yang sama seperti proses suite manual dan mencatat trigger: "schedule" pada proses suite.

Untuk menjeda jadwal tanpa mengubah waktunya, PATCH seluruh objek jadwal yang ada dengan "enabled": false. frequency wajib diisi; zona waktu dan kolom waktu yang dihilangkan akan diatur ulang ke nilai default, jadi sertakan nilai yang ada. Kirim "schedule": null untuk menghapus jadwal.

Pola

Korpus regresi per Prompt

Kelola file JSON berisi tuple {name, scenario_prompt, expected_outcome}. Pada setiap perubahan Prompt, jalankan seluruh rangkaian sebagai batch; bandingkan transkrip dan nilai dengan hasil sebelumnya.

Uji smoke per rilis

Satu batch berisi lima skenario jalur sukses yang Anda jalankan setelah setiap deploy. Sensitif terhadap latensi, jadi pertahankan stagger_seconds: 0.

Benchmarking latensi

Jalankan skenario identik pada berbagai tingkatan produk (spark, bolt, storm-base). Bandingkan skor call.graded dan duration_seconds dari setiap log panggilan yang dihasilkan.


Langkah berikutnya