Pāriet uz saturu

Pamācības

Uzdevumi

Uzdevums ar vienu aģentu sazvana adresātu sarakstu pēc noteikumiem, ko iestatāt iepriekš - budžets, zvanu logs, mēģinājumu skaits. Nekas netiek zvanīts, kamēr uzdevumu paši nepalaižat.

Kas ir uzdevums

Uzdevums (task_...) ir izejoša kampaņa: viens aģents uz volai dzinēja, adresātu saraksts ar tālruņa numuru un neobligātiem mainīgajiem sistēmas uzvednei, un noteikumi (budžets, zvanu logs, maksimālais mēģinājumu skaits un zvana garums). Trīs veidi pēc nolūka - invoice (maksājuma atgādinājums), appointment (laika apstiprinājums) un custom (jebkas cits) - pirmajiem diviem papildus, ja source ir integration, katram adresātam ir atsauce uz dokumentu vai notikumu (externalRefs), ko aģents zvana laikā piemin.

Aģentam jābūt uz volai paša dzinēja (useForOutboundTasks: true izveides brīdī, skatiet POST /v1/agents), nevis uz ElevenLabs - dzinējs prot mainīgos sistēmas uzvednei, zvana garuma robežas un pārbaudi, ka kampaņas laikā nav mainījusies tā konfigurācija. Aģenta melnrakstam jābūt PUBLICĒTAM (PATCH /v1/agents/{id} vai POST /v1/agents/{id}/draft/publish) UN publicētajai versijai jābūt IZMĒĢINĀTAI (POST /v1/agents/{id}/simulate) - ja trūkst kāda soļa, starts atgriež agent_not_ready.

Statusi un pārejas

Praksē uzdevums vienmēr iet no `draft` uzreiz uz `running` (`start`); dzēst (`DELETE`) var tikai atzīmētajos statusos.

draft
Ko tas nozīmēTikko izveidots, start vēl nekad nav noticis. Labojams (PATCH), dzēšams.
ready
Ko tas nozīmēModeļa statuss starp draft un running, ko start pieņem kā sākumpunktu - taču neviens publisks galapunkts (ne REST, ne MCP) šodien uzdevumu uz to nepārvieto, tāpēc praksē ar to nesastapsities. Ja tas tomēr iestātos, tas ir labojams un dzēšams tāpat kā draft.
running
Ko tas nozīmēZvana adresātiem. NAV LABOJAMS - PATCH bez izņēmuma atgriež task_not_editable. Kam jāmaina mainīgie, tam uzdevums vispirms jāaptur (POST .../pause) un jālabo tikai statusā paused - un tikai tik ilgi, kamēr vēl neviens adresāts nav zvanīts; pēc pirmā mēģinājuma recipients (un līdz ar to mainīgos) vairs nomainīt nevar (items_immutable) un atliek izveidot jaunu uzdevumu. Dzēst nevar. Ja uzdevums sasniedz zvanu limitu (rate_limited - paša dzinēja izejošo minūšu limits, vienlaicīgo izejošo zvanu griesti, noklusējumā 10 zvani minūtē vai 1000 dienā), tas paliek running: iestata lastError: "rate_limited", mēģinājums netiek ieskaitīts un gaidošajiem kontaktiem tiek iestatīts items[].nextAttemptAt uz limita beigām (pēc Retry-After, citādi pēc 5 minūtēm; vienlaicīgo zvanu griestu gadījumā dzinējs sūta Retry-After: 30). Pēc tā beigām turpina pats. Tāpat tas gaida, ja ir pilna aģenta vienlaicīgo zvanu kvota kontam (relay_lease_limit, noklusējumā 2 notiekoši zvani): lastError: "relay_lease_limit", nākamais mēģinājums pēc minūtes, mēģinājums netiek ieskaitīts. Aizņemts numurs (destination_busy - uz to pašu numuru tobrīd notiek cits zvans, piemēram, no cita uzdevuma vai manuāla zvana, vai arī pēc nenoteikta sazvana tas ir bloķēts 15 minūtes) gaida tikai attiecīgais kontakts, nevis viss uzdevums: items[].lastError: "destination_busy", items[].nextAttemptAt pēc atlikušā numura bloķēšanas laika (vismaz 30 s, ne vairāk kā 16 min, bez bloķēšanas 90 s), mēģinājums netiek ieskaitīts (countsAsAttempt: false) un pārējie kontakti tiek zvanīti tālāk. Pēc 6. aizņemtības pēc kārtas (tātad pēc 5 gaidīšanām) kontakts nonāk review ar reviewReason: "dial:destination_busy". Pastāvīgs šķērslis numuram (on_dnc, destination_auto_blocked, cannot_call_own_number, cannot_call_volai_number, invalid_number, unsupported_country, blocked_destination) uzdevumu arī neaptur: kontakts nonāk review ar reviewReason: "dial:<code>" (zvans neradās, tāpēc mēģinājumam ir countsAsAttempt: false un tas netērē maxAttempts), uzdevums paliek running, zvana pārējiem kontaktiem un uz needs_attention pāriet tikai tad, kad cita darba vairs nav. Ja volai operators aģentu uzdevumam pauzē manuāli, uzdevums paliek running un neko nezvana; pēc atjaunošanas turpina pats. Pauzētu aģentu atpazīsiet pēc suspended: true atbildē GET /v1/agents/{id}.
paused
Ko tas nozīmēApturēts pirms nākamā zvana (POST .../pause); jau sāktais zvans tiek pabeigts. Labojams, dzēšams, start to atjauno. Pauze zvana vidū atstāj reviewReason: "dispatch_in_flight", līdz reconcile (plānotājs to palaiž pēc dažām minūtēm) šo zvanu norēķina, un līdz tam start noraida ar task_needs_attention; pēc tam uzdevums ar darbu paliek paused, pat ja citi kontakti gaida review. Pauze, kas iestājas tieši pirms paša zvana (zvans vēl nav radies), dispatch_in_flight neatstāj: plānotājs kontaktu atgriež gaidošo vidū un uzdevums uzreiz ir paused bez iemesla. Kontaktu, kura apstrādi pārtrauca avārija, pirms radās zvans, reconcile atbrīvo ne agrāk kā 15 minūtes pēc sazvana sākuma (claim 10 minūtes plus 5 minūšu rezerve) un atgriež gaidošo vidū; uzdevums, ko pa to laiku apturēja izbeidzies claim (dispatch_claim_expired), tad pāriet uz paused. Ja sāktais zvans beidzas bez zināmas cenas, uzdevums vispirms pāriet uz needs_attention ar reviewReason: "billing_unknown" un uz paused atgriežas, kad cena pienāk (reconcile to papildina). Ja pa to laiku samazināt maxAttempts tā, ka nevienam kontaktam, kas gaida nākamo mēģinājumu, vairs nav brīva mēģinājuma, uzdevums paliek paused (šāds kontakts tiek skaitīts kā darbs), taču start to noraida ar task_not_startable, kamēr maxAttempts nepalielināt.
completed
Ko tas nozīmēVisiem adresātiem ir galīgs rezultāts. Dzēšams (vairs nekas nav spēkā).
needs_attention
Ko tas nozīmēKaut kam nepieciešama iejaukšanās - parasti darbības laikā mainījusies aģenta konfigurācija (agent_version_changed), dzinējs īslaicīgi nebija pieejams (engine_contract_unavailable) vai vēl nav zināma jau notikuša zvana cena (billing_unknown). POST .../reconcile saskaņo stāvokli; dzēšams, kamēr neviena pozīcija nav palikusi in_progress. Kontaktu statusā review atrisinat ar POST .../items/{itemId}/resolve (retry/skip); kontakts ar pastāvīgu šķērsli numuram (dial:on_dnc, dial:destination_auto_blocked, dial:cannot_call_own_number, dial:cannot_call_volai_number, dial:invalid_number, dial:unsupported_country, dial:blocked_destination vai dial:destination_busy pēc 6. aizņemtības pēc kārtas) uzdevumu aptur tikai tad, kad pārējie kontakti ir pabeigti. Nenoteikts sazvana rezultāts (piem., dial:engine_unavailable) uzdevumu nosūta uz needs_attention uzreiz un pārējie kontakti netiek zvanīti. Kad zvans pēc šāda pārtraukuma (vai nezināmas cenas) tiek norēķināts ar reconcile, uzdevums pāriet uz paused, kamēr kāds kontakts gaida nākamo mēģinājumu, pat ja citi ir review; uz needs_attention tikai tad, ja nekas vairs nav jāzvana, izņemot kontaktu review, un uz completed, ja nav atlicis nekas. Sazvans, kura rezultāts paliek nenoteikts (zvanu neizdodas atrast), notur uzdevumu needs_attention, kamēr par kontaktu nenolemjat. Parasta iemesla gadījumā pēc pēdējā lēmuma uzdevums pāriet uz paused, ja darbs vēl ir atlicis, vai uz completed, ja visi kontakti ir pabeigti vai izlaisti. Iemesls visa uzdevuma līmenī paliek needs_attention, līdz tiek atrisināts; izņēmums ir budget_exceeded, kad visu nākamo mēģinājumu gaidošo kontaktu izlaišana uzdevumu pabeidz, ja vairs negaida neviens nodrošinātāja statuss. Īpašā procedūra billing_unknown ir aprakstīta tālāk.

Precīzs dzēšanas nosacījums: statuss ir viens no iepriekš atzīmētajiem UN NEVIENAI pozīcijai nav status: "in_progress" (sāktais zvans, kas vēl nav beidzies) - citādi task_not_deletable.

Adresātu imports (CSV)

POST /v1/tasks/csv-preview izanalizē CSV un atgriež to atpakaļ ar kļūdām pie atsevišķām rindām - NEKAS netiek saglabāts, tas ir tikai priekšskatījums pirms uzdevuma izveides vai labošanas. To pašu funkciju izsauc arī jaunā uzdevuma veidlapa portālā.

  • Atdalītājs tiek atpazīts automātiski (komats vai semikols) pēc pirmās rindas.
  • Jābūt kolonnai phone - burtu reģistrs, atstarpes ap nosaukumu un kols aiz tā nav svarīgi, un derēs arī telefon, tel vai mobil; priekšskatījumā kolonna vienmēr tiek atgriezta kā phone. Derēs arī tīrs numuru saraksts bez galvenes (viens rindā, viena kolonna). Citādi viss CSV neiztur ar vienu kļūdu phone pie galvenes.
  • Katra nākamā kolonna ir mainīgais aģenta sistēmas uzvednei ({{column_name}}) - ne vairāk kā 20 kolonnas, nosaukums līdz 64 rakstzīmēm, vērtība līdz 512 rakstzīmēm.
  • Tālruņa numurs tiek normalizēts tāpat kā visur API (normalizePhone) - nederīgs vai tukšs numurs ir kļūda tikai UZ ŠĪS rindas, pārējais CSV tiek apstrādāts tālāk.
  • Šūna, kas izskatās pēc izklājlapas formulas (sākas ar =, +, - vai @), tiek noraidīta - aizsardzība pret CSV injekciju atverot Excel.
  • Ne vairāk kā 1000 rindu uz vienu CSV (tādi paši griesti kā uzdevuma adresātu skaitam) un 1 MB neapstrādāta teksta; viss uzdevums kopā ar pielikumiem jāiegulda 2 MB, citādi izveide atgriež validation.

Atbilde satur headers, delimiter, rows (katra rinda ar savām kļūdām), validRows (tikai nevainojamās, tieši tādā formā, kādu recipients gaida POST /v1/tasks) un kopsavilkuma errors. Sūtiet validRows uzreiz kā recipients uzdevuma izveides vai labošanas laikā.

Budžets un zvanu logs

Budžets

budgetHal ir izdevumu GRIESTI haléros par visu uzdevumu. Izveides brīdī tam jāsedz vismaz viens mēģinājums maksimālajā garumā (budget_too_low, citādi); startā pirms KATRA sazvana tiek rezervēta augstākā iespējamā mēģinājuma cena (reservedBudgetHal), un tikai pacelts zvans to pārnes uz spentHal. Rezervācija ir zvana cena tieši maxDurationSecs garumā (zvana kājas un aģenta kājas, katra noapaļota uz augšu līdz halérim tāpat kā rēķinot) un zvans, ko pārtrauc garuma griesti, tiek rēķināts ne vairāk kā par maxDurationSecs, pat ja beidzas sekundes daļu vēlāk. Uzdevums nekad neiztērēs vairāk, nekā budgetHal norādāt.

Zvanu logs

callingWindow ir {timezone: "Europe/Prague", start, end, days} - šodien vienīgā atbalstītā josla ir Prāgas, start/end formātā HH:MM (beigas ieskaitot visu minūti: logs 09:00-18:00 ielaiž pēdējo zvanu 18:00:59, logs līdz 23:59 aptver visu dienu) un days ir skaitļi 0-6 (0 = svētdiena). Bez norādes spēkā ir darbdienas 9:00-18:00. Ārpus loga start atgriež window_closed - vai nu gaidiet atvēršanos, vai logu izlabojiet ar PATCH. Neobligātais expiresAt ir kampaņas beigas kā pozitīvs drošs vesels skaitlis Unix milisekundēs. Tas tiek pārbaudīts startā un pirms katra sazvana, ieskaitot pirmo. Kopš šī brīža jauns zvans nesākas un mēģinājums netiek izlietots; notiekošais zvans tiek pabeigts. Politikas lorela_enterprise atkārtošanas horizonts (retryMaxAgeDays, noklusējumā 5), gluži otrādi, tiek skaitīts kā N × 24 stundas no pirmā ieskaitītā mēģinājuma, nevis no uzdevuma izveides.

Mēģinājumi un zvana garums

maxAttempts bez politikas ir 1-3 (noklusējumā 1), ar retryPolicy: "lorela_enterprise" 1-4 (izveidojot noklusējumā 4). Tas nosaka augstāko automātisko sazvanu skaitu vienam kontaktam, ieskaitot pirmo (1 = bez atkārtojumiem). Tiek skaitīts katrs mēģinājums, kurā zvans varēja notikt, tātad arī nepacelts vai zvanītā noraidīts, un mēģinājums ar nenoteiktu rezultātu. Netiek skaitīts mēģinājums, ko volai noraidīja jau pirms sazvana (piemēram, bloķēts, paša vai nederīgs numurs, nezvanīšanas saraksts, numurs, uz kuru tobrīd notiek cits zvans, zvanu limiti); šādam mēģinājumam ir items[].attempts[].countsAsAttempt: false. Netiek skaitīts arī zvans, kam operators laikus nesaņēma mērķi, tāpēc zvanītā tālrunis vispār nezvanīja (mēģinājumam ir errorCode: "relay_not_routed", zvanam endReason: "rejected"): kontakts saņem jaunu mēģinājumu ne agrāk kā pēc minūtes (ar politiku lorela_enterprise pēc tās grafika) un pēc trešā šāda mēģinājuma pēc kārtas nonāk pārbaudē ar reviewReason: "call:relay_not_routed". Netiek skaitīts arī zvans, par kuru mūsu balss dzinējs nekad nedeva ziņu un kuru pēc divām stundām bez ziņojuma slēdzām kā nesazvanītu un bez cenas (mēģinājumam ir errorCode: "no_provider_report"): kontakts atgriežas gaidošo vidū un saņem jaunu mēģinājumu ne agrāk kā pēc minūtes (ar politiku lorela_enterprise pēc tās grafika). Trīs neskaitīti mēģinājumi pēc kārtas, arī sajaukti ar relay_not_routed mēģinājumiem, nosūta kontaktu pārbaudē ar reviewReason pēc pēdējā no tiem, tātad call:no_provider_report; kontakti, kurus šāds zvans pārbaudē nosūtīja agrāk (call:failed, ar politiku call:unknown), paši neatjaunojas. Bez politikas griesti attiecas tikai uz automātiskajiem sazvaniem: kontaktam, kuram pēc mēģinājumu izsmelšanas piemērojat resolve ar action: "retry", tiek dots vēl viens papildu sazvans. maxDurationSecs (30-300) ir VIENA zvana garuma griesti, pēc kuriem tas tiek automātiski pārtraukts - noklusējuma garums ir 120 sekundes. Neobligāto politiku lorela_enterprise ieslēdz ar API vai MCP pirms pirmā mēģinājuma; esošie uzdevumi paši nemainās. Otrais mēģinājums ir ne agrāk kā 8 minūtes no pirmā faktiskā mēģinājuma sākuma laikā 08:00-22:00 Europe/Prague. Trešais iet nākamajā citā logā 08:00-09:00 vai 17:00-19:00, ceturtais pretējā logā nākamajā kalendārajā dienā. Vienmēr ir spēkā arī callingWindow un tā dienas; pēc atkārtošanas horizonta politika vairs nezvana: neobligātais retryMaxAgeDays ir vesels dienu skaitlis 1-30 (bez norādes 5) un darbojas tikai ar politiku. Horizonts beidzas N × 24 stundas pēc kontakta pirmā ieskaitītā mēģinājuma (fiksētas 24 stundu dienas, tāpēc laika maiņas gadījumā beigu vietējais laiks nobīdās par stundu). To var mainīt ar PATCH arī pēc mēģinājumu sākuma (ne uzdevumam running vai completed, to labot nevar): palielinājums pauzētam uzdevumam atgriež kontaktus, kas izkrita tikai horizonta dēļ (reviewReason: "retry_age_expired"), atpakaļ statusā failed (gaida nākamo mēģinājumu) ar jaunu nextAttemptAt, ja tiem vēl ir brīvs mēģinājums un tuvākais grafika slots iekrīt jaunajā horizontā un pirms expiresAt; samazinājums neko neatver. Atkal atver tikai PATCH, kas horizontu palielina, tāpēc retryMaxAgeDays un pagarināto expiresAt sūtiet vienā pieprasījumā. Atkārto tikai no_answer, missed, busy, pabeigtu balss pastu un pacelta zvana, kurā zvanītais neko neteica (viss bez kontakta ar cilvēku). Kontakts ar cilvēku, noraidījums un dzinēja kļūda automātisko atkārtošanu aptur; neskaidrs rezultāts iet pārbaudē. Pēdējais atļautais mēģinājums (maxAttempts), kas beidzas ar šādu atkārtojamu rezultātu (nepacelts, aizņemts, balss pasts vai pacelts zvans, kurā zvanītais neko neteica), kontaktu slēdz kā skipped ar reviewReason: "retry_policy_exhausted" (kā retry_age_expired pēc horizonta beigām): nav ko pārbaudīt vai atkārtot. Neskaidrs pēdējā mēģinājuma rezultāts paliek review ar to pašu iemeslu. Bez politikas nekas nemainās: pēdējais nepacelts mēģinājums joprojām ir review. Apstiprināts cilvēka atzvans pēc mēģinājumu izsmelšanas kontaktu pārslēdz uz completed. DNC, budžets un limiti paliek spēkā: automātiska bloķēšana pēc 3 neveiksmēm 24 stundās var apturēt pat ceturto mēģinājumu. PATCH bez maxAttempts līdzšinējais limits saglabājas. Ar politiku manuāls resolve ar action: "retry" atgriež kļūdu validation; atļauti ir tikai tās automātiski ieplānotie mēģinājumi. Izņēmums ir pierādāmi nesazvanīta izbeigta claim atjaunošana pirms pirmā faktiskā mēģinājuma: bez aktīva darbinieka, dispatch nodoma, nodrošinātāja zvana ID, rezervācijas, cenas vai callback un tikai ar pierādītiem noraidījumiem pirms sazvana vēsturē. Atjaunošana saglabā vēsturi un griestus un atgriež kontaktu gaidošo vidū pauzētā uzdevumā; pati nezvana. Atgādinājumus šādi atkārtoti atvērt nevar. Manuāls atkārtojums tātad neapiet četrus mēģinājumus, atkārtošanas horizontu vai pārtraukšanu pēc kontakta ar cilvēku.

Globālā caurlaidspēja

Visu uzdevumu zvani VISĀ platformā (ne tikai jūsu kontā) iet caur vienu cron, kas darbojas ik pēc 2 minūtēm un vienā palaišanā apstrādā ne vairāk kā 20 pozīciju - BET šie griesti tiek dalīti starp vienlaikus notiekošiem uzdevumiem, nevis tos drīkst izsmelt viens uzdevums: no KATRA aktīvā uzdevuma vienā palaišanā tiek sazvanīts tieši VIENS adresāts. Arī pilnīgi tukšā platformā viens uzdevums tāpēc nekad nesazvana vairāk kā vienu adresātu ik pēc 2 minūtēm - simts adresātu tā netiek apzvanīti ~20 minūtēs, bet aptuveni 200 minūtēs (100 x 2 minūtes). Zvanu logu laikam jutīgām kampaņām (piem., appointment dienu pirms laika) plānojiet atbilstoši.

Darbību secība aģentam

Tipiska norise šādā secībā:

  1. Uzdevuma aģentam jābūt PUBLICĒTAM un publicētajai versijai IZMĒĢINĀTAI (POST /v1/agents/{id}/draft/publish, tad POST /v1/agents/{id}/simulate) - citādi vēlāks start atgriež agent_not_ready.
  2. Pēc izvēles POST /v1/tasks/csv-preview - pārbauda adresātu CSV, pirms tiek izveidots uzdevums.
  3. POST /v1/tasks - izveido uzdevumu statusā draft. Nekas netiek zvanīts.
  4. GET /v1/tasks/{id} - izlasiet issues (dry-run validācija) un pārliecinieties, ka uzdevums ir gatavs startam.
  5. Pēc vajadzības PATCH /v1/tasks/{id} - labojiet noteikumus, VIENMĒR ar revision no pēdējās nolasīšanas.
  6. POST /v1/tasks/{id}/start - sāk zvanīšanu. Katrs pacelts zvans tiek rēķināts uzreiz.
  7. POST /v1/tasks/{id}/pause jebkurā brīdī darbības laikā, POST /v1/tasks/{id}/start atkal atjauno.
  8. Pēc pārtraukuma (pauze zvana vidū, izbeidzies claim, zvans ar vēl nezināmu cenu vai nenoteikts sazvans, pie kura zvans tika atrasts) POST /v1/tasks/{id}/reconcile saskaņo stāvokli ar faktiskajiem zvaniem; šāds uzdevums ar darbu beidzas paused, pat ja daži kontakti gaida review, un to var atkal palaist ar start. Notiekošu uzdevumu vai citu iemeslu (variables_limit, rēķina vai kalendāra pārbaudes neveiksme, nenoteikts sazvans, pie kura zvanu neizdevās atrast) reconcile nemaina; kontaktus pārbaudei atrisiniet ar resolve.
  9. Kontaktu, kas nonāca pārbaudē (items[].status: "review"), atrisiniet ar POST /v1/tasks/{id}/items/{itemId}/resolve ar action: "retry" vai "skip". Parasta iemesla gadījumā retry atgriež kontaktu gaidošo vidū un uzdevumu uz paused; skip to slēdz un uzdevums pāriet uz paused, ja darbs vēl ir atlicis, vai uz completed, ja visi kontakti ir pabeigti vai izlaisti. Uzdevumu paused pēc tam atjaunojiet ar POST /v1/tasks/{id}/start.
  10. Ja kontaktam ir reviewReason: "dial:destination_auto_blocked", numurs ir automātiski bloķēts uz 30 dienām pēc atkārtoti nepacelta zvana un pats retry to neatbloķē - kontakts uzreiz atgrieztos review. Vispirms atceliet bloķēšanu (POST /v1/dnc/{e164}/unblock, MCP unblock_destination, numuru ņemiet no items[].phone), pēc tam resolve ar action: "retry". Pie dial:on_dnc vispirms izņemiet numuru no nezvanīšanas saraksta (DELETE /v1/dnc/{e164}), citādi kontaktu izlaidiet. Konta paša numuram, cita volai konta numuram, nederīgam numuram, numuram ārpus Čehijas un Slovākijas un maksas līnijai (dial:cannot_call_own_number, dial:cannot_call_volai_number, dial:invalid_number, dial:unsupported_country, dial:blocked_destination) nākamais mēģinājums nelīdz: izmantojiet tikai skip.
  11. Ja kontaktam ir reviewReason: "billing_unknown", sākotnējais zvans jau varēja notikt, tikai tā cena vēl nav zināma. Vispirms izsauciet reconcile un pārbaudiet saistīto zvanu. retry iegaumē, ka kontaktu jāmēģina vēlreiz, bet jaunu zvanu neatļauj, kamēr sākotnējā cena nav nostabilizējusies; pēc tam uzdevums pāriet uz paused un prasa jaunu start. skip novērš nākamo zvanu; sākotnējais zvans paliek saistīts un tā rezervācija turpina ieskaitīties budžetā, līdz cena nostabilizējas. Ja darbs ir atlicis, uzdevums pēc skip pāriet uzreiz uz paused un to var palaist; bez cita darba tas gaidīs needs_attention un pēc cenas nostabilizēšanās beigsies completed. Zvans, kas vispār netika sazvanīts (dzinējs to noraidīja), nekad netiek rēķināts un nostabilizējas uzreiz uz 0.
  12. Kontaktu, kas pa to laiku nopirka vai atrakstījās, izlaidiet bez zvana ar resolve ar action: "skip", reason: "customer_purchased" vai "unsubscribed", revision, stabilu operationId un evidenceRef, kas norāda uz pirkuma vai atrakstīšanās dokumentu (nekad uz tālruni vai e-pastu). To var darīt ar pending kontaktu draft uzdevumā un ar pending/failed paused uzdevumā bez neizskaidrota zvana; mēģinājumi, cenas un nezvanīšanas saraksts paliek. GET /v1/tasks/{id} pēc tam parāda dokumentu items[].resolution (reason, operationId, evidenceRef, resolvedAt); to pašu pieprasījuma pamattekstu var droši atkārtot, cits reason vai evidenceRef tam pašam kontaktam ir 409 revision_conflict. Izlaišana numuru nezvanīšanas sarakstā neieraksta: ja kontaktu vairs nekad nedrīkst zvanīt, pievienojiet to ar POST /v1/dnc.
  13. DELETE /v1/tasks/{id} beigās, ja uzdevums nekad nav norisinājies vai jau ir beidzies un ierakstu vēlaties izdzēst.

Gandrīz katrs rakstošais izsaukums (PATCH, start, pause, DELETE) ņem revision no uzdevuma pēdējās nolasīšanas - tāda pati optimistiskā vienlaicība kā aģenta melnrakstiem. Neatbilstība atgriež revision_conflict: ielādējiet uzdevumu vēlreiz (GET) un atkārtojiet ar aktuālo revision. reconcile ir izņēmums - revision tur nav obligāts.

MCP

Tie paši rīki kā REST (list_tasks, get_task, create_task, update_task, pause_task, resolve_task_item, reconcile_task, start_task) - izņemot vienu atšķirību startā.

start_task apstiprina skaitļus

MCP start_task papildus ņem confirmedRecipients un confirmedBudgetHal - tiem precīzi jāatbilst uzdevuma faktiskajam adresātu skaitam un budžetam, citādi tas atgriež validation ar izrakstītajām faktiskajām vērtībām un NEKO nepalaiž. Svešs AI aģents uz viena neskaidri saprasta norādījuma tādējādi nevar kļūdaini palaist maksas kampaņu ar izdomātiem skaitļiem - REST POST .../start šādas mehānikas nav, jo tur tieši ar savu atslēgu zvana konta īpašnieks.

delete_task un CSV priekšskatījuma MCP nav - dzēšana paliek REST un portālā (neatgriezeniska darbība ar nosaukuma pārrakstīšanu), CSV priekšskatījums ir tikai veidlapas solis.

Kļūdas

  • task_not_found - Kontā nav uzdevuma ar šādu id.
  • task_not_editable - Uzdevums darbojas vai ir pabeigts (running/completed), vai ir needs_attention bez atjaunošanas iespējas - noteikumus tagad mainīt nevar. To pašu kodu atgriež arī POST .../items/{itemId}/resolve darbojošam uzdevumam: kontakts review parādās jau tad, kad uzdevums zvana pārējiem kontaktiem un vēl ir running - uzgaidiet, līdz tas pāriet uz needs_attention, vai to apturiet (POST .../pause).
  • items_immutable - Adresātu sarakstu nevar aizstāt pēc tam, kad ir noticis vismaz viens sazvana mēģinājums vai kontakts ir izlaists ar reason (pirkums vai atrakstīšanās).
  • budget_too_low - Budžets nesedz pat vienu mēģinājumu maksimālajā zvana garumā - palieliniet budgetHal vai samaziniet maxDurationSecs.
  • task_not_startable - Uzdevums nav statusā draft/ready/paused vai tam nav neviena gaidoša adresāta.
  • task_needs_attention - Pirms nākamā starta nepieciešams POST .../reconcile - kaut kas (aģenta versija, dzinējs) darbības laikā ir mainījies.
  • agent_not_ready - Aģenta melnraksts vai nav publicēts, vai publicētā versija nav izmēģināta - publicējiet to (POST /v1/agents/{id}/draft/publish) un pēc tam izmēģiniet publicēto versiju (POST /v1/agents/{id}/simulate) pirms starta.
  • agent_version_changed - Aģenta konfigurācija mainījās UZDEVUMA DARBĪBAS LAIKĀ - izmēģiniet un restartējiet ar reconcile.
  • engine_required - Uzdevuma aģents nav uz volai dzinēja (useForOutboundTasks: true) - izejošās kampaņas šodien prasa dzinēju, nevis ElevenLabs.
  • engine_contract_unavailable - Dzinējs pašlaik nepiedāvā atbalstu mainīgajiem un izejošo uzdevumu griestiem - mēģiniet startu vēlāk vēlreiz.
  • window_closed - Ārpus iestatītā zvanu loga - uzgaidiet atvēršanos vai labojiet callingWindow.
  • task_not_running - Pauze iespējama tikai darbojošam uzdevumam.
  • item_not_resolvable - Kontakts nav statusā review - izlemt (retry/skip) var tikai par kontaktu, kas gaida pārbaudi, un tikai uzdevumā, kas nedarbojas. Izņēmums ir izlaišana ar reason (customer_purchased, unsubscribed): tai nepieciešams neaktīvs pending kontakts draft uzdevumā vai pending/failed paused uzdevumā bez neizskaidrota zvana.
  • task_not_deletable - Dzēst var tikai uzdevumu bez pozīcijas in_progress statusā draft/ready/paused/completed/needs_attention.
  • revision_conflict - Uzdevums pa to laiku ir mainījies - ielādējiet to vēlreiz (GET) un atkārtojiet ar aktuālo revision.

Pilnu kļūdu tabulu katram galapunktam atradīsiet sadaļā Uzdevumi REST API atsaucē.