Open in
એજન્ટને છેડેથી છેડે ચકાસો (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 | ઇન્ટિજર | હા | એજન્ટ id (અથવા ફોન નંબર 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
}'પ્રતિસાદમાં ચાઇલ્ડ રન id ની 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 1POST /v1/orgs/{org_id}/suites/{suite_id}/run રન ID સાથે 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 ની સરખામણી કરો.