ThunderPhone 2.0 yayında.Hemen kendiniz kullanmaya başlayın; dakikası 2 sentten başlayan fiyatlarla.Duyuruyu okuyun

Developer cookbook

Bir ajanı uçtan uca test edin (API)

Ajan gerilemelerini müşteriler duymadan önce yakalamak için ThunderPhone API üzerinden tek seferlik simülasyonlar, paralel senaryo toplu işlemleri ve sürüm geçişi test paketleri çalıştırın.

Bir yapay zeka ajanını yinelemek, istemini, araçlarını ve uç durumları ele alma biçimini yinelemek anlamına gelir. simülasyonlar API'si, sağladığınız bir senaryo istemiyle bir ajana karşı gerçek aramalar gerçekleştirir. Bir ajanı hedeflemek botlar arası bir çalıştırma oluşturur; bir telefon numarasını hedeflemek ise bir SIP geri döngü çalıştırması oluşturur. Her çalıştırma, döküm, puanlama ve ücretlendirme içeren gerçek bir arama günlüğü üretir; böylece ajanın tam olarak nasıl davrandığını ve maliyetini görürsünüz.

Şunlar için kullanın:

  • Her istem düzenlemesinden sonra yayına alma öncesi hızlı doğrulama testleri
  • CI'a bağlanan regresyon paketleri (test-call.completed webhook'unu bağlayın → puan düşerse derlemeyi başarısız yapın)
  • Eşzamanlılık sınırlarını stres testine tabi tutma

Tek seferlik: tek çalıştırma

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

Alanlar:

AlanTürZorunluAçıklama
target_typedizeevetagent veya phone_number
target_idtam sayıevetAjan kimliği (veya telefon numarası kimliği)
directiondizehayıroutbound (varsayılan; test arayanı aramayı başlatır) veya inbound (test arayanı aramayı yanıtlar)
scenario_promptdizehayırTest botunun ne söyleyeceğini belirler
language / primary_languagedizehayırTest arayanının dili; desteklenmeyen kodlar reddedilir
simulator_productdizehayırtesting (varsayılan) veya sıcak aktarma danışma testleri gibi daha insan benzeri simüle edilmiş bir arayan için spark
consent_to_chargebooleanevettrue olmalıdır. Tahmin, seçilen ajanı ve simüle edilmiş arayanı sabit dakika başı ücret üzerinden, ayrıca varsa telefon bağlantısı ücretiyle birlikte faturalandırır
target_numberdizehayırUzak taraf için E.164 geçersiz kılma değeri; aksi takdirde platform test numarası kullanılır

mode salt okunurdur ve target_type değerinden türetilir: agent, mode="bot" üretirken phone_number, mode="sip" üretir.

Yanıt, status="queued" durumunda bir simülasyon çalıştırma nesnesidir. status, completed veya failed olana kadar yoklayın; call_id ayarlandıktan sonra dökümü GET /v1/calls/{call_id}/transcript üzerinden yükleyin.

Toplu çalıştırmalar: paralel senaryolar

N senaryoyu eşzamanlı çalıştırın — bilinen her uç duruma paralel olarak ulaşan regresyon paketleri için kullanışlıdır:

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

Yanıt, alt çalıştırma kimliklerinden oluşan bir run_ids listesi içerir. Toplu çalıştırma durumunu alın:

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

run_count en fazla 20 olabilir; stagger_seconds, ajanı aşırı yüklememek için başlatmaları aralıklı yapar (0–60 sn).

Bunu CI'a bağlayın

Simülasyonlar sayfasında (/dashboard/simulations) bir yayın geçidi paketi oluşturun — yapay zeka ajanını seçin, senaryoları elle ekleyin veya ajanın isteminden taslak oluşturmaları için Yapay Zeka ile senaryo oluştur seçeneğine tıklayın (isteğe bağlı bir uç durum kontrolüyle) ve bunları bir pakette gruplandırın. Bir paket, senaryolarını ve yapay zeka ajanını; ayrıca minimum başarı oranını ve isteğe bağlı sıfır kritik hata kuralını sabitler. Başarılı çalıştırmalar kabul edilen temel çizgi olur; daha sonraki başarılı→başarısız geçişler regresyon olarak döndürülür.

CI'da bir kuruluş API anahtarı kullanın. Bu betik paketi tetikler, notlandırma ve karşılaştırma tamamlanana kadar sorgular ve karar pass olmadıkça sıfır olmayan bir kodla çıkar:

#!/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, çalıştırma kimliğiyle birlikte 202 döndürür. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id}, status, verdict, pass_rate, critical_failure_count ve temel çizgi regressions listesini döndürür. Her iki uç nokta da URL'deki kuruluşu API anahtarının kuruluşuna bağlar.

Bir paketi zamanlamaya göre çalıştırın

Ajanın Simüle Et sekmesini açın, Yayın geçidi paketleri seçeneğini belirleyin ve bir paket oluşturun veya düzenleyin. Zamanlamaya göre çalıştır seçeneğini açın, Sıklık ve Saat dilimi seçin; ardından gösterildiği şekilde Saatten sonraki dakika, Yerel saat veya Gün ayarlayın. Paketi kaydet seçeneğini belirleyin. Zamanlamaya göre çalıştır seçeneğinin işaretini kaldırmak, pano zamanlamasını kaldırır.

API ile

Zamanlamasını eklemek veya değiştirmek için pakete PATCH isteği gönderin. Paket nesnesinin ve uç noktaların tamamı için Paketler (yayın geçitleri) bölümüne bakın.

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, hourly, daily veya weekly olabilir. IANA saat dilimi kullanın. Saatlik zamanlamalarda minute; günlük zamanlamalarda hour ve minute; haftalık zamanlamalarda ise ayrıca pazartesinin 0, pazarın 6 olduğu weekday kullanılır. Paket yanıtı next_run_at ve last_run_at alanlarını içerir.

Saatler, seçilen saat diliminin yaz saati uygulaması değişikliklerine göre belirlenir. Zamanlanmış çalıştırmalar paketin çalıştırma geçmişinde görünür ve paketin mevcut yapay zeka ajanını, senaryolarını, ölçütlerini ve kabul edilen temel çizgisini kullanır. Oluşturulan her test çağrısı test-call.completed olayını yayımlar; paket düzeyinde tamamlanma webhook'u yoktur. Zamanlanmış çağrılar, manuel paket çalıştırmalarıyla aynı simülasyon ücreti üzerinden faturalandırılır ve paket çalıştırmasında trigger: "schedule" kaydedilir.

Zamanlamayı zamanlamasını değiştirmeden duraklatmak için, mevcut zamanlama nesnesinin tamamına "enabled": false ile PATCH isteği gönderin. frequency zorunludur; belirtilmeyen saat dilimi ve saat alanları varsayılan değerlerine sıfırlanır, bu nedenle mevcut değerleri ekleyin. Zamanlamayı kaldırmak için "schedule": null gönderin.

Kalıplar

İstem başına regresyon veri kümesi

{name, scenario_prompt, expected_outcome} demetlerinden oluşan bir JSON dosyası tutun. Her istem değişikliğinde, tüm kümeyi toplu olarak çalıştırın; transkriptleri ve değerlendirme puanlarını önceki çalıştırmayla karşılaştırın.

Sürüm başına hızlı test

Her yayına alma işleminden sonra çalıştırdığınız, başarılı akıştaki beş senaryodan oluşan tek bir toplu işlem. Gecikmeye duyarlı olduğundan stagger_seconds: 0 değerini koruyun.

Gecikme kıyaslaması

Aynı senaryoları farklı ürün katmanlarında (spark, bolt, storm-base) çalıştırın. call.graded puanlarını ve oluşan her çağrı günlüğündeki duration_seconds değerini karşılaştırın.


Sonraki adımlar