ThunderPhone 2.0 அறிமுகமாகிவிட்டது.நீங்களே தொடங்கலாம்; நிமிடத்திற்கு 2¢ முதல்.அறிவிப்பைப் படிக்கவும்

Developer cookbook

ஏஜென்டை தொடக்கம் முதல் முடிவு வரை சோதிக்கவும் (API)

வாடிக்கையாளர்கள் அவற்றைக் கேட்பதற்கு முன் ஏஜென்ட் பின்னடைவுகள் கண்டறியப்படுமாறு, ThunderPhone API மூலம் ஒருமுறை சிமுலேஷன்கள், இணைநிலைச் சூழ்நிலை தொகுப்புகள் மற்றும் வெளியீட்டு-வாயில் தொகுப்புகளை இயக்குங்கள்.

AI ஏஜென்ட்டை மேம்படுத்துவது என்பது அதன் prompt, அதன் கருவிகள், மற்றும் அது விளிம்பு நிலைகளைக் கையாளும் விதம் ஆகியவற்றை மேம்படுத்துவதாகும். நீங்கள் வழங்கும் காட்சிநிலை prompt ஐப் பயன்படுத்தி சிமுலேஷன்கள் API ஏஜென்ட்டுக்கு எதிராக உண்மையான அழைப்புகளை இயக்குகிறது. ஏஜென்ட்டை இலக்காகக் கொண்டால் போட்-டு-போட் இயக்கம் உருவாகும்; தொலைபேசி எண்ணை இலக்காகக் கொண்டால் SIP லூப்பேக் இயக்கம் உருவாகும். ஒவ்வொரு இயக்கமும் உரைபதிவு, மதிப்பீடு, மற்றும் கட்டணத்துடன் உண்மையான அழைப்புப் பதிவை உருவாக்கும்; எனவே ஏஜென்ட் எவ்வாறு செயல்படுகிறது, அதற்கு எவ்வளவு செலவாகிறது என்பதைத் துல்லியமாகப் பார்க்கலாம்.

இதற்குப் பயன்படுத்தவும்:

  • ஒவ்வொரு prompt திருத்தத்திற்குப் பிறகும் டிப்ளாய் செய்வதற்கு முந்தைய ஸ்மோக் சோதனைகள்
  • CI உடன் இணைக்கப்பட்ட ரிகிரஷன் தொகுப்புகள் (test-call.completed webhook ஐ இணைக்கவும் → ஸ்கோர் குறைந்தால் பில்டை தோல்வியடையச் செய்யவும்)
  • ஒரேநேர வரம்புகளுக்கான அழுத்தச் சோதனை

ஒரே முயற்சி: ஒற்றை இயக்கம்

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_typestringஆம்agent அல்லது phone_number
target_idintegerஆம்ஏஜென்ட் id (அல்லது தொலைபேசி எண் id)
directionstringஇல்லைoutbound (இயல்புநிலை; சோதனை அழைப்பாளர் அழைப்பை மேற்கொள்வார்) அல்லது inbound (சோதனை அழைப்பாளர் பதிலளிப்பார்)
scenario_promptstringஇல்லைசோதனை போட் என்ன சொல்கிறது என்பதை நிர்ணயிக்கிறது
language / primary_languagestringஇல்லைசோதனை அழைப்பாளருக்கான மொழி; ஆதரிக்கப்படாத குறியீடுகள் நிராகரிக்கப்படும்
simulator_productstringஇல்லைtesting (இயல்புநிலை) அல்லது வார்ம்-டிரான்ஸ்ஃபர் ஆலோசனைச் சோதனைகள் போன்ற மனிதனைப் போன்ற சிமுலேட் செய்யப்பட்ட அழைப்பாளருக்கான spark
consent_to_chargebooleanஆம்true ஆக இருக்க வேண்டும். கணக்கீடு தேர்ந்தெடுக்கப்பட்ட ஏஜென்ட் மற்றும் சிமுலேட் செய்யப்பட்ட அழைப்பாளர் இருவருக்கும், மேலும் எந்தவொரு தொலைபேசி இணைப்புப் பகுதிக்கும் கட்டணமிடும்
target_numberstringஇல்லைதொலைநிலைப் பக்கத்திற்கான 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 மூலம் காட்சிநிலைகளை உருவாக்கு என்பதைக் கிளிக் செய்யவும் (விருப்பமான edge-case சரிபார்ப்புடன்), பின்னர் அவற்றை ஒரு சூட்டாகக் குழுவாக்கவும். ஒரு சூட் அதன் காட்சிநிலைகள் மற்றும் ஏஜென்ட்டையும், குறைந்தபட்ச தேர்ச்சி விகிதம் மற்றும் விருப்பமான முக்கியமான தோல்விகள் எதுவும் இல்லாதிருக்க வேண்டும் என்ற விதியையும் நிலைப்படுத்துகிறது. தேர்ச்சி பெற்ற ரன்கள் ஏற்றுக்கொள்ளப்பட்ட அடிப்படையாக மாறும்; பின்னர் தேர்ச்சி→தோல்வி மாற்றங்கள் பின்னடைவுகளாகத் திருப்பியனுப்பப்படும்.

CI-யில் ஒரு நிறுவன API விசையை பயன்படுத்தவும். இந்த ஸ்கிரிப்ட் சூட்டைத் தொடங்கி, தரப்படுத்தலும் ஒப்பீடும் முடியும் வரை polling செய்கிறது; முடிவு 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 ரன் id-யுடன் 202 ஐ வழங்கும். GET /v1/orgs/{org_id}/suites/{suite_id}/runs/{run_id} ஆனது status, verdict, pass_rate, critical_failure_count, மற்றும் அடிப்படையான regressions பட்டியலை வழங்கும். இரண்டு endpoint-களும் URL நிறுவனத்தை API விசையின் நிறுவனத்துடன் பிணைக்கின்றன.

ஒரு சூட்டை அட்டவணைப்படி இயக்கவும்

ஏஜென்ட்டின் சிமுலேட் தாவலைத் திறந்து, வெளியீட்டு கேட் சூட்கள் என்பதைத் தேர்ந்தெடுத்து, ஒரு சூட்டை உருவாக்கவும் அல்லது திருத்தவும். அட்டவணைப்படி இயக்கு என்பதை இயக்கி, அதிர்வெண் மற்றும் நேர மண்டலம் ஆகியவற்றைத் தேர்ந்தெடுக்கவும்; பின்னர் காட்டியபடி மணிநேரத்திற்குப் பின் நிமிடம், உள்ளூர் நேரம், அல்லது நாள் என்பதை அமைக்கவும். சூட்டைச் சேமி என்பதைத் தேர்ந்தெடுக்கவும். அட்டவணைப்படி இயக்கு என்பதன் தேர்வை நீக்கினால் டாஷ்போர்டு அட்டவணை அகற்றப்படும்.

API மூலம்

அட்டவணையைச் சேர்க்க அல்லது மாற்ற சூட்டில் PATCH செய்யவும். முழுமையான சூட் ஆப்ஜெக்ட் மற்றும் endpoint-களுக்கு சூட்கள் (வெளியீட்டு கேட்கள்) என்பதைப் பார்க்கவும்.

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 ஐ வெளியிடும்; சூட்-நிலை நிறைவு webhook எதுவும் இல்லை. அட்டவணையிடப்பட்ட அழைப்புகளுக்கு கைமுறை சூட் ரன்களைப் போன்ற அதே சிமுலேஷன் கட்டணம் விதிக்கப்படும்; மேலும் சூட் ரன்னில் 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-ஐயும் ஒப்பிடவும்.


அடுத்த படிகள்