ThunderPhone 2.0 आता लाइव्ह आहे.स्वतःच सुरू करा—2¢/मिनिटपासून.घोषणा वाचा

Developer cookbook

एजंटची सुरुवातीपासून शेवटपर्यंत चाचणी करा (API)

ThunderPhone API द्वारे एकदाच चालणारी सिम्युलेशन्स, समांतर परिस्थिती बॅचेस आणि रिलीज-गेट सूट्स चालवा, जेणेकरून ग्राहकांना एजंटमधील प्रतिगमन ऐकू येण्यापूर्वी ते पकडले जातील.

AI एजंटवर पुनरावृत्ती करणे म्हणजे त्याच्या prompt, त्याची साधने, आणि तो एज केसेस कशा हाताळतो यावर पुनरावृत्ती करणे. सिम्युलेशन्स API तुम्ही दिलेल्या परिस्थिती prompt चा वापर करून एजंटविरुद्ध वास्तविक कॉल चालवते. एजंट लक्ष्य केल्यास बॉट-टू-बॉट रन तयार होते; फोन नंबर लक्ष्य केल्यास SIP लूपबॅक रन तयार होते. प्रत्येक रनमधून ट्रान्स्क्रिप्ट, ग्रेडिंग आणि बिलिंगसह वास्तविक कॉल लॉग तयार होतो, त्यामुळे एजंट नेमका कसा वागतो आणि त्यासाठी किती खर्च येतो हे तुम्हाला दिसते.

यासाठी वापरा:

  • प्रत्येक prompt संपादनानंतर प्री-डिप्लॉय स्मोक चाचण्या
  • 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) रिलीज गेट संच तयार करा — एजंट निवडा, परिस्थिती हाताने जोडा किंवा एजंटच्या prompt वरून त्यांचा मसुदा तयार करण्यासाठी AI सह परिस्थिती तयार करा वर क्लिक करा (पर्यायी एज-केस तपासणीसह), आणि त्यांना एका संचात गटबद्ध करा. संच त्याच्या परिस्थिती आणि एजंटसोबत किमान पास दर आणि पर्यायी शून्य-गंभीर-अयशस्वी नियम निश्चित करतो. यशस्वी रन स्वीकृत बेसलाइन बनतात; नंतरचे पास→अयशस्वी बदल रिग्रेशन म्हणून परत केले जातात.

CI मध्ये संस्थेची API की वापरा. ही स्क्रिप्ट संच ट्रिगर करते, ग्रेडिंग आणि तुलना पूर्ण होईपर्यंत पोल करते, आणि निर्णय 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 रन आयडीसह 202 परत करते. GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} हे status, verdict, pass_rate, critical_failure_count, आणि बेसलाइन regressions सूची परत करते. दोन्ही एंडपॉइंट URL मधील संस्थेला API कीच्या संस्थेशी जोडतात.

वेळापत्रकानुसार संच चालवा

एजंटचा सिम्युलेट टॅब उघडा, रिलीज गेट संच निवडा, आणि संच तयार करा किंवा संपादित करा. वेळापत्रकानुसार चालवा सुरू करा, वारंवारता आणि वेळ क्षेत्र निवडा, नंतर दाखवल्याप्रमाणे तासानंतरचे मिनिट, स्थानिक वेळ, किंवा दिवस सेट करा. संच जतन करा निवडा. वेळापत्रकानुसार चालवा निवड रद्द केल्याने डॅशबोर्डचे वेळापत्रक काढले जाते.

API द्वारे

शेड्यूल जोडण्यासाठी किंवा बदलण्यासाठी संचाला PATCH करा. संपूर्ण संच ऑब्जेक्ट आणि एंडपॉइंटसाठी संच (रिलीज गेट्स) पहा.

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, किंवा weekly असू शकते. IANA वेळ क्षेत्र वापरा. तासाच्या वेळापत्रकात minute वापरले जाते; दैनंदिन वेळापत्रकात hour आणि minute; साप्ताहिक वेळापत्रकात weekday देखील वापरले जाते, ज्यात सोमवार 0 आणि रविवार 6 आहे. संच प्रतिसादात next_run_at आणि last_run_at समाविष्ट असतात.

वेळा निवडलेल्या वेळ क्षेत्रातील डेलाइट-सेव्हिंग बदलांचे अनुसरण करतात. वेळापत्रकानुसार चालवलेले रन संचाच्या रन इतिहासात दिसतात आणि त्याचा सध्याचा एजंट, परिस्थिती, निकष, आणि स्वीकृत बेसलाइन वापरतात. तयार झालेली प्रत्येक चाचणी कॉल test-call.completed उत्सर्जित करते; संच-स्तरीय पूर्णता वेबहुक नाही. वेळापत्रकानुसार केलेल्या कॉलचे बिलिंग मॅन्युअल संच रनप्रमाणेच सिम्युलेशन दराने होते आणि संच रनवर trigger: "schedule" नोंदवले जाते.

वेळ बदलल्याशिवाय वेळापत्रक थांबवण्यासाठी, संपूर्ण विद्यमान वेळापत्रक ऑब्जेक्टला "enabled": false सह PATCH करा. frequency आवश्यक आहे; वगळलेले वेळ क्षेत्र आणि वेळ फील्ड त्यांच्या डीफॉल्टवर रीसेट होतात, त्यामुळे विद्यमान मूल्ये समाविष्ट करा. वेळापत्रक काढण्यासाठी "schedule": null पाठवा.

नमुने

प्रत्येक prompt साठी रिग्रेशन कॉर्पस

{name, scenario_prompt, expected_outcome} ट्युपल्सची JSON फाइल सांभाळा. प्रत्येक prompt बदलानंतर, संपूर्ण संच बॅच म्हणून चालवा; मागील रनच्या तुलनेत ट्रान्सक्रिप्ट्स आणि ग्रेड्समधील फरक तपासा.

प्रत्येक रिलीजनंतर स्मोक टेस्ट

प्रत्येक deploy नंतर चालवायच्या पाच हॅपी-पाथ परिस्थितींची एकच बॅच. हे लेटन्सी-संवेदनशील असल्याने, stagger_seconds: 0 ठेवा.

लेटन्सी बेंचमार्किंग

वेगवेगळ्या उत्पादन टियरवर (spark, bolt, storm-base) एकसारख्या परिस्थिती चालवा. प्रत्येक तयार झालेल्या कॉल लॉगमधील call.graded स्कोअर्स आणि duration_seconds ची तुलना करा.


पुढील पायऱ्या