Vejledninger
Opgaver
En opgave ringer en liste af modtagere op med én agent efter de regler, du fastsætter på forhånd - budget, opkaldsvindue, antal forsøg. Intet ringes op, før du selv starter opgaven.
Hvad er en opgave
En opgave (task_...) er en udgående kampagne: én agent på volais motor, en liste af modtagere med telefonnummer og valgfrie variabler til systemprompten samt regler (budget, opkaldsvindue, maksimalt antal forsøg og opkaldets længde). Tre typer efter formål - invoice (betalingspåmindelse), appointment (bekræftelse af en aftale) og custom (alt andet) - hvor hver modtager i de to første, når source er integration, desuden bærer en reference til et dokument eller en begivenhed (externalRefs), som agenten nævner i opkaldet.
Agenten skal ligge på volais egen motor (useForOutboundTasks: true ved oprettelsen, se POST /v1/agents), ikke på ElevenLabs - motoren understøtter variabler til systemprompten, lofter for opkaldets længde og kontrol af, at dens konfiguration ikke ændres, mens kampagnen kører. Agentens kladde skal være OFFENTLIGGJORT (PATCH /v1/agents/{id} eller POST /v1/agents/{id}/draft/publish) OG den offentliggjorte version skal være TESTET (POST /v1/agents/{id}/simulate) - mangler et af trinnene, returnerer start agent_not_ready.
Statusser og overgange
I praksis går en opgave altid direkte fra `draft` til `running` (`start`); sletning (`DELETE`) er kun mulig i de markerede statusser.
draftstart er endnu aldrig kørt. Kan redigeres (PATCH) og slettes.readydraft og running, som start accepterer som udgangspunkt - intet offentligt endpoint (hverken REST eller MCP) overfører dog i dag en opgave til den, så du møder den ikke i praksis. Skulle den opstå, kan den redigeres og slettes på samme måde som draft.runningPATCH returnerer task_not_editable uden undtagelse. Den, der skal ændre variabler, må først stoppe opgaven (POST .../pause) og redigere i paused - og kun så længe ingen modtager endnu er blevet ringet op; efter det første forsøg kan recipients (og dermed variablerne) ikke længere udskiftes (items_immutable), og der er kun at oprette en ny opgave. Kan ikke slettes. Rammer den en opkaldsgrænse (rate_limited - grænsen for udgående minutter på egen motor, loftet for dens samtidige udgående opkald, som standard 10 opkald pr. minut eller 1000 pr. dag), forbliver den running: den sætter lastError: "rate_limited", forsøget tæller ikke med, og ventende kontakter får items[].nextAttemptAt ved grænsens udløb (efter Retry-After, ellers om 5 minutter; ved motorens loft for samtidige opkald sender motoren Retry-After: 30). Når det er udløbet, fortsætter den af sig selv. På samme måde venter den, når kontoens kvote for agentens samtidige opkald er fuld (relay_lease_limit, som standard 2 kørende opkald): lastError: "relay_lease_limit", næste forsøg om et minut, forsøget tæller ikke med. Et optaget nummer (destination_busy - på samme nummer kører der netop et andet opkald, for eksempel fra en anden opgave eller et manuelt opkald, eller nummeret er låst i 15 minutter efter en usikker opringning) får kun den berørte kontakt til at vente, ikke hele opgaven: items[].lastError: "destination_busy", items[].nextAttemptAt efter den resterende låsetid for nummeret (mindst 30 s, højst 16 min, uden lås 90 s), forsøget tæller ikke med (countsAsAttempt: false), og de øvrige kontakter ringes videre op. Efter 6. optagede forsøg i træk (altså efter 5 ventetider) går kontakten til review med reviewReason: "dial:destination_busy". En varig hindring ved nummeret (on_dnc, destination_auto_blocked, cannot_call_own_number, cannot_call_volai_number, invalid_number, unsupported_country, blocked_destination) stopper heller ikke opgaven: kontakten går til review med reviewReason: "dial:<code>" (der opstod intet opkald, så forsøget har countsAsAttempt: false og bruger ikke af maxAttempts), opgaven forbliver running, ringer de øvrige kontakter op og går først til needs_attention, når der ikke er andet arbejde tilbage. Hvis volai-operatøren manuelt sætter opgavens agent på pause, forbliver opgaven running og ringer intet op; efter genoptagelsen fortsætter den af sig selv. En pauseret agent kan ses på suspended: true i GET /v1/agents/{id}.pausedPOST .../pause); et opkald, der allerede er sluppet af sted, kører færdigt. Kan redigeres og slettes, start genoptager den. En pause midt i et opkald efterlader reviewReason: "dispatch_in_flight", indtil reconcile (planlæggeren kører den inden for få minutter) har afregnet opkaldet, og indtil da afviser start med task_needs_attention; derefter forbliver en opgave med arbejde paused, selv om andre kontakter venter i review. En pause, der rammer lige før selve opkaldet (opkaldet er endnu ikke oprettet), efterlader ikke dispatch_in_flight: planlæggeren sætter kontakten tilbage blandt de ventende, og opgaven er straks paused uden årsag. En kontakt, hvis behandling blev afbrudt af et nedbrud, før opkaldet opstod, frigiver reconcile tidligst 15 minutter efter opringningens start (claim 10 minutter plus reserve 5 minutter) og sætter den tilbage blandt de ventende; en opgave, der i mellemtiden blev stoppet af en udløbet claim (dispatch_claim_expired), går derefter til paused. Slutter et opkald, der er sluppet af sted, uden en kendt pris, går opgaven først til needs_attention med reviewReason: "billing_unknown" og vender tilbage til paused, når prisen er kommet (reconcile udfylder den). Sænker du i mellemtiden maxAttempts, så ingen kontakt, der venter på et nyt forsøg, har et ledigt forsøg tilbage, forbliver opgaven paused (en sådan kontakt tæller som arbejde), men start afviser den med task_not_startable, indtil du hæver maxAttempts.completedneeds_attentionagent_version_changed), motoren var midlertidigt utilgængelig (engine_contract_unavailable), eller prisen på et allerede gennemført opkald er endnu ikke kendt (billing_unknown). POST .../reconcile afstemmer tilstanden; kan slettes, så længe ingen post er blevet stående som in_progress. En kontakt i status review håndteres via POST .../items/{itemId}/resolve (retry/skip); en kontakt med en varig hindring ved nummeret (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 eller dial:destination_busy efter 6. optagede forsøg i træk) stopper således først opgaven, når de øvrige kontakter er kørt færdige. Et usikkert resultat af opringningen (f.eks. dial:engine_unavailable) sender opgaven til needs_attention med det samme, og de øvrige kontakter ringes ikke op. Når opkaldet bag en sådan afbrydelse (eller en ukendt pris) er afregnet via reconcile, går opgaven til paused, så længe en kontakt venter på et nyt forsøg, selv om andre er i review; til needs_attention kun når der ikke er andet at ringe op end en kontakt i review, og til completed, når der ikke er noget tilbage. En opringning, hvis resultat forbliver usikkert (opkaldet kan ikke findes), holder opgaven i needs_attention, indtil du beslutter noget om kontakten. Ved en almindelig årsag går opgaven efter den sidste beslutning til paused, hvis der er arbejde tilbage, eller til completed, hvis alle kontakter er færdige eller sprunget over. En årsag på hele opgavens niveau forbliver i needs_attention, indtil den er løst; undtagelsen er budget_exceeded, hvor springet over alle kontakter, der venter på et nyt forsøg, fuldfører opgaven, hvis der ikke længere venter nogen udbyderstatus. Den særlige fremgangsmåde for billing_unknown er beskrevet nedenfor.Den præcise betingelse for sletning: status er en af de ovenfor markerede OG INGEN post har status: "in_progress" (et opkald, der er sluppet af sted og endnu ikke er slut) - ellers task_not_deletable.
Import af modtagere (CSV)
POST /v1/tasks/csv-preview parser CSV-filen og returnerer den med fejl på de enkelte rækker - INTET gemmes, det er blot en forhåndsvisning før oprettelse eller redigering af en opgave. Den samme funktion kaldes af formularen til en ny opgave i portalen.
- Skilletegnet genkendes automatisk (komma eller semikolon) ud fra den første række.
- Der skal findes en kolonne
phone- store og små bogstaver, mellemrum omkring navnet og kolon efter det er ligegyldige, ogtelefon,telellermobilaccepteres også; i forhåndsvisningen returneres kolonnen altid somphone. En ren liste af numre uden overskrift (ét pr. række, én kolonne) accepteres også. Ellers fejler hele CSV-filen med den ene fejlphoneved overskriften. - Hver yderligere kolonne er en variabel til agentens systemprompt (
{{column_name}}) - højst 20 kolonner, navn højst 64 tegn, værdi højst 512 tegn. - Telefonnummeret normaliseres som alle andre steder i API'et (
normalizePhone) - et ugyldigt eller tomt nummer er kun en fejl på DEN række, resten af CSV-filen behandles videre. - En celle, der ligner en formel i et regneark (begynder med
=,+,-eller@), afvises - beskyttelse mod CSV-injektion ved åbning i Excel. - Højst 1000 rækker pr. CSV (samme loft som antallet af modtagere i en opgave) og 1 MB rå tekst; hele opgaven med bilag skal kunne være i 2 MB, ellers returnerer oprettelsen
validation.
Svaret indeholder headers, delimiter, rows (hver række med sine fejl), validRows (kun de fejlfri, præcis i den form, som recipients i POST /v1/tasks forventer) og de samlede errors. Send validRows direkte som recipients ved oprettelse eller redigering af opgaven.
Budget og opkaldsvindue
Budget
budgetHal er et LOFT for forbruget i hundrededele af den lokale mønt for hele opgaven. Ved oprettelsen skal det dække mindst ét forsøg i maksimal længde (ellers budget_too_low); ved start reserveres den højest mulige pris for et forsøg FØR HVER opringning (reservedBudgetHal), og først et besvaret opkald overfører den til spentHal. Reservationen er prisen på opkaldet i præcis længden maxDurationSecs (opkaldsleddet og agentleddet, hver rundet op til nærmeste enhed ligesom ved afregningen), og et opkald afsluttet af længdeloftet afregnes højst for maxDurationSecs, selv om det slutter et brøkdels sekund senere. En opgave bruger aldrig mere, end du giver den i budgetHal.
Opkaldsvindue
callingWindow er {timezone: "Europe/Prague", start, end, days} - i dag er den eneste understøttede tidszone den prag'ske, start/end i formen HH:MM (slut inklusive hele minuttet: vinduet 09:00-18:00 lader det sidste opkald gå igennem kl. 18:00:59, vinduet til 23:59 dækker hele dagen) og days tallene 0-6 (0 = søndag). Uden angivelse gælder hverdage 9:00-18:00. Uden for vinduet returnerer start window_closed - enten vent, til det åbner, eller ret vinduet via PATCH. Den valgfrie expiresAt er kampagnens slutning som et positivt sikkert heltal i Unix-millisekunder. Den kontrolleres ved start og før hver opringning, også den første. Fra dette tidspunkt begynder intet nyt opkald, og forsøget bruges ikke; et igangværende opkald kører færdigt. Gentagelseshorisonten i politikken lorela_enterprise (retryMaxAgeDays, standard 5) regnes derimod som N × 24 timer fra det første medregnede forsøg, ikke fra oprettelsen af opgaven.
Forsøg og opkaldets længde
maxAttempts er uden politik 1-3 (standard 1), med retryPolicy: "lorela_enterprise" 1-4 (ved oprettelsen standard 4). Det bestemmer det højeste antal automatiske opringninger af én kontakt inklusive den første (1 = uden gentagelser). Hvert forsøg, hvor opkaldet kunne forløbe, tælles med, altså også et ubesvaret eller afvist af den opringede og et forsøg med usikkert resultat. Et forsøg, som volai afviste allerede før opringningen (for eksempel et blokeret, eget eller ugyldigt nummer, en Do-not-call-liste, et nummer, hvorpå der netop kører et andet opkald, opkaldsgrænser), tælles ikke med; et sådant forsøg har items[].attempts[].countsAsAttempt: false. Heller ikke et opkald tælles med, hvor operatøren ikke fik destinationen i tide, så den opringedes telefon slet ikke ringede (forsøget har errorCode: "relay_not_routed", opkaldet endReason: "rejected"): kontakten får et nyt forsøg tidligst om et minut (med politikken lorela_enterprise efter dens plan), og efter det tredje sådanne forsøg i træk går den til kontrol med reviewReason: "call:relay_not_routed". Heller ikke et opkald tælles med, som vores stemmemotor aldrig meldte tilbage om, og som vi efter to timer uden besked lukkede som ikke ringet op og uden pris (forsøget har errorCode: "no_provider_report"): kontakten vender tilbage blandt de ventende og får et nyt forsøg tidligst om et minut (med politikken lorela_enterprise efter dens plan). Tre ikke-medregnede forsøg i træk, også blandet med forsøg af typen relay_not_routed, sender kontakten til kontrol med reviewReason efter det sidste af dem, altså call:no_provider_report; kontakter, som et sådant opkald tidligere sendte til kontrol (call:failed, med politikken call:unknown), genoptages ikke af sig selv. Uden politik gælder loftet kun for automatiske opringninger: en kontakt, som du efter opbrugte forsøg giver resolve med action: "retry", får endnu én ekstra opringning. maxDurationSecs (30-300) er loftet for længden af ÉT opkald, hvorefter det afsluttes automatisk - standardlængden er 120 sekunder. Den valgfrie politik lorela_enterprise slås til via API eller MCP før det første forsøg; eksisterende opgaver ændrer sig ikke af sig selv. Det andet forsøg er tidligst 8 minutter fra begyndelsen af det første egentlige forsøg i tidsrummet 08:00-22:00 Europe/Prague. Det tredje går til det næste, andet vindue 08:00-09:00 eller 17:00-19:00, det fjerde til det modsatte vindue den følgende kalenderdag. Altid gælder også callingWindow og dets dage; efter gentagelseshorisonten ringer politikken ikke igen: den valgfrie retryMaxAgeDays er et helt antal dage 1-30 (uden angivelse 5) og gælder kun med politikken. Horisonten slutter N × 24 timer efter kontaktens første medregnede forsøg (faste 24-timers døgn, så den lokale sluttid forskydes med en time over en tidsomstilling). Den kan ændres via PATCH også efter forsøgenes begyndelse (ikke for en opgave i running eller completed, den kan ikke redigeres): en forhøjelse på en pauseret opgave sætter kontakter, der kun faldt fra på grund af horisonten (reviewReason: "retry_age_expired"), tilbage til status failed (venter på et nyt forsøg) med en ny nextAttemptAt, hvis de stadig har et ledigt forsøg, og den nærmeste plads i planen falder inden for den nye horisont og før expiresAt; en sænkning åbner intet. Kun en PATCH, der hæver horisonten, åbner igen, så send retryMaxAgeDays og en forlænget expiresAt i samme anmodning. Kun no_answer, missed, busy, en gennemført telefonsvarer og et besvaret opkald, hvor den opringede intet sagde, gentages (alt uden kontakt med et menneske). Kontakt med et menneske, afvisning og en fejl i motoren stopper den automatiske gentagelse; et uklart resultat går til kontrol. Det sidste tilladte forsøg (maxAttempts), der ender med et sådant gentageligt resultat (ubesvaret, optaget, telefonsvarer eller et besvaret opkald, hvor den opringede intet sagde), lukker kontakten som skipped med reviewReason: "retry_policy_exhausted" (som retry_age_expired efter horisontens udløb): der er intet at kontrollere eller gentage. Et uklart resultat af det sidste forsøg bliver stående i review med samme årsag. Uden politik ændres intet: det sidste ubesvarede forsøg er stadig review. Et verificeret menneskeligt callback efter opbrugte forsøg skifter kontakten til completed. DNC, budget og grænser forbliver gældende: den automatiske blokering efter 3 mislykkede forsøg på 24 timer kan også stoppe et fjerde forsøg. Ved PATCH uden maxAttempts bevares den hidtidige grænse. Med politikken returnerer et manuelt resolve med action: "retry" fejlen validation; kun dens automatisk planlagte forsøg er tilladt. Undtagelsen er genoptagelsen af en påviseligt ikke-ringet udløbet claim før det første egentlige forsøg: uden en aktiv worker, dispatch-hensigt, udbyderens opkalds-ID, reservation, pris eller callback og kun med påviste afvisninger før opringningen i historikken. Genoptagelsen bevarer historikken og lofterne og sætter kontakten tilbage blandt de ventende i en pauseret opgave; den ringer ikke selv. Påmindelser kan ikke genåbnes på denne måde. Et manuelt gentaget forsøg omgår altså ikke fire forsøg, gentagelseshorisonten eller afslutningen efter kontakt med et menneske.
Global gennemstrømning
Opringningen af alle opgaver på HELE platformen (ikke kun din konto) går gennem ét cronjob, der kører hvert 2. minut og behandler højst 20 poster pr. kørsel - MEN dette loft deles mellem samtidigt kørende opgaver, så ingen enkelt opgave kan bruge det op: fra HVER aktiv opgave ringes der pr. kørsel op til præcis ÉN modtager. Selv på en helt tom platform ringer én opgave derfor aldrig op til mere end én modtager pr. 2 minutter - hundrede modtagere bliver således ikke færdige på ~20 minutter, men på omkring 200 minutter (100 x 2 minutter). Planlæg opkaldsvinduet efter det ved tidsfølsomme kampagner (f.eks. appointment dagen før aftalen).
Fremgangsmåde for agenten
Et typisk forløb, i denne rækkefølge:
- Opgavens agent skal være OFFENTLIGGJORT og den offentliggjorte version TESTET (
POST /v1/agents/{id}/draft/publish, derefterPOST /v1/agents/{id}/simulate) - ellers returnerer et senerestartagent_not_ready. - Eventuelt
POST /v1/tasks/csv-preview- kontrollerer modtagernes CSV, før opgaven oprettes. POST /v1/tasks- opretter opgaven i statusdraft. Intet ringes op.GET /v1/tasks/{id}- læsissues(dry-run-validering), og kontrollér, at opgaven er klar til start.- Efter behov
PATCH /v1/tasks/{id}- ret reglerne, ALTID medrevisionfra den seneste læsning. POST /v1/tasks/{id}/start- starter opringningen. Hvert besvaret opkald afregnes straks.POST /v1/tasks/{id}/pausenår som helst under kørslen,POST /v1/tasks/{id}/startgenoptager igen.- Efter en afbrydelse (pause midt i et opkald, udløbet claim, et opkald med endnu ukendt pris eller en usikker opringning, hvor opkaldet blev fundet) afstemmer
POST /v1/tasks/{id}/reconciletilstanden med de faktiske opkald; en sådan opgave med arbejde ender ipaused, selv om nogle kontakter venter ireview, og kan startes igen viastart. En kørende opgave og enhver anden årsag (variables_limit, svigtende kontrol af faktura eller kalender, en usikker opringning, hvor opkaldet ikke blev fundet) ændrerreconcileikke; kontakter til kontrol håndteres viaresolve. - En kontakt, der endte til kontrol (
items[].status: "review"), håndteres medPOST /v1/tasks/{id}/items/{itemId}/resolvemedaction: "retry"eller"skip". Ved en almindelig årsag sætterretrykontakten tilbage blandt de ventende og opgaven tilpaused;skiplukker den, og opgaven går tilpaused, hvis der er arbejde tilbage, eller tilcompleted, hvis alle kontakter er færdige eller sprunget over. En opgave ipausedgenoptages så medPOST /v1/tasks/{id}/start. - Har en kontakt
reviewReason: "dial:destination_auto_blocked", er nummeret automatisk blokeret i 30 dage efter gentagne ubesvarede opkald, og etretryalene ophæver ikke blokeringen - kontakten ville straks vende tilbage tilreview. Ophæv først blokeringen (POST /v1/dnc/{e164}/unblock, i MCPunblock_destination, tag nummeret fraitems[].phone), derefterresolvemedaction: "retry". Veddial:on_dncfjern først nummeret fra Do-not-call-listen (DELETE /v1/dnc/{e164}), ellers spring kontakten over. Ved kontoens eget nummer, en anden volai-kontos nummer, et ugyldigt nummer, et nummer uden for Tjekkiet og Slovakiet og en premium-linje (dial:cannot_call_own_number,dial:cannot_call_volai_number,dial:invalid_number,dial:unsupported_country,dial:blocked_destination) hjælper et nyt forsøg ikke: brug kunskip. - Har en kontakt
reviewReason: "billing_unknown", kan det oprindelige opkald allerede være forløbet, det har blot endnu ikke en kendt pris. Kald førstreconcile, og kontrollér det tilknyttede opkald.retryhusker, at kontakten skal prøves igen, men tillader ikke et nyt opkald, før den oprindelige pris er faldet til ro; derefter går opgaven tilpausedog kræver et nytstart.skipforhindrer et yderligere opkald; det oprindelige opkald forbliver tilknyttet, og dets reservation tæller fortsat med i budgettet, indtil prisen er faldet til ro. Er der arbejde tilbage, går opgaven efterskipstraks tilpausedog kan startes; uden yderligere arbejde venter den ineeds_attentionog ender icompleted, når prisen er faldet til ro. Et opkald, der slet ikke blev ringet op (motoren afviste det), afregnes aldrig og falder straks til ro på 0. - En kontakt, der i mellemtiden har købt eller afmeldt sig, springes over uden opkald via
resolvemedaction: "skip",reason: "customer_purchased"eller"unsubscribed",revision, et fastoperationIdog enevidenceRef, der henviser til dokumentationen for købet eller afmeldingen (aldrig til telefon eller e-mail). Det er muligt for enpendingkontakt i endraft-opgave og forpending/failedi enpaused-opgave uden et uafklaret opkald; forsøg, priser og Do-not-call-listen bevares.GET /v1/tasks/{id}viser så dokumentationen iitems[].resolution(reason,operationId,evidenceRef,resolvedAt); den samme krop kan trygt gentages, en andenreasonellerevidenceRefpå samme kontakt er409 revision_conflict. Overspringningen skriver ikke nummeret på Do-not-call-listen: skal kontakten aldrig ringes op igen, tilføj den viaPOST /v1/dnc. DELETE /v1/tasks/{id}til sidst, hvis opgaven aldrig er kørt eller allerede er kørt færdig, og du vil slette posten.
Næsten hvert skrivende kald (PATCH, start, pause, DELETE) tager revision fra den seneste læsning af opgaven - samme optimistiske samtidighed som ved agentens kladder. En uoverensstemmelse returnerer revision_conflict: hent opgaven igen (GET), og gentag med den aktuelle revision. reconcile er en undtagelse - revision er dér valgfri.
MCP
De samme værktøjer som REST (list_tasks, get_task, create_task, update_task, pause_task, resolve_task_item, reconcile_task, start_task) - bortset fra én forskel ved start.
start_task bekræfter tallene
MCP start_task tager desuden confirmedRecipients og confirmedBudgetHal - de skal præcis svare til det faktiske antal modtagere og opgavens budget, ellers returnerer den validation med de faktiske værdier opført og starter INTET. En fremmed AI-agent kan således ikke på baggrund af en uklart forstået instruktion ved en fejl sætte en betalt kampagne i gang på opdigtede tal - REST POST .../start har ikke denne mekanik, fordi det dér er kontoens ejer, der selv kalder med sin egen nøgle.
delete_task og forhåndsvisningen af CSV findes ikke i MCP - sletning forbliver i REST og portalen (en uigenkaldelig handling med indtastning af navnet), CSV-forhåndsvisningen er kun et trin i formularen.
Fejl
task_not_found- Der er ingen opgave med detteidpå kontoen.task_not_editable- Opgaven kører eller er færdig (running/completed), eller erneeds_attentionuden mulighed for genoptagelse - reglerne kan nu ikke ændres. Den samme kode returnerer ogsåPOST .../items/{itemId}/resolveved en kørende opgave: en kontakt ireviewdukker op, allerede mens opgaven ringer de øvrige kontakter op og stadig errunning- vent, til den går tilneeds_attention, eller sæt den på pause (POST .../pause).items_immutable- Listen af modtagere kan ikke erstattes, når mindst ét opringningsforsøg har fundet sted, eller en kontakt er sprunget over med enreason(køb eller afmelding).budget_too_low- Budgettet dækker ikke engang ét forsøg i opkaldets maksimale længde - hævbudgetHal, eller sænkmaxDurationSecs.task_not_startable- Opgaven er ikke i statusdraft/ready/paused, eller har ingen ventende modtager.task_needs_attention- Før næste start erPOST .../reconcilenødvendig - noget (agentens version, motoren) er ændret under kørslen.agent_not_ready- Agentens kladde er enten ikke offentliggjort, eller den offentliggjorte version er ikke testet - offentliggør den (POST /v1/agents/{id}/draft/publish), og test derefter den offentliggjorte version (POST /v1/agents/{id}/simulate) før start.agent_version_changed- Agentens konfiguration blev ændret UNDER en kørende opgave - test, og genstart viareconcile.engine_required- Opgavens agent er ikke på volais motor (useForOutboundTasks: true) - udgående kampagner kræver i dag motoren, ikke ElevenLabs.engine_contract_unavailable- Motoren annoncerer i øjeblikket ikke understøttelse af variabler og lofter for udgående opgaver - prøv start igen senere.window_closed- Uden for det indstillede opkaldsvindue - vent, til det åbner, eller retcallingWindow.task_not_running- Pause er kun mulig for en kørende opgave.item_not_resolvable- Kontakten er ikke i statusreview- en beslutning (retry/skip) er kun mulig for en kontakt, der venter på kontrol, og kun for en opgave, der ikke kører. Undtagelsen er overspringning med enreason(customer_purchased,unsubscribed): den kræver en inaktivpendingkontakt i endraft-opgave ellerpending/failedi enpaused-opgave, uden et uafklaret opkald.task_not_deletable- Kun en opgave uden en post iin_progressi statusdraft/ready/paused/completed/needs_attentionkan slettes.revision_conflict- Opgaven er i mellemtiden ændret - hent den igen (GET), og gentag med den aktuellerevision.
Den fulde tabel over fejl for hvert endpoint findes i afsnittet Opgaver i REST API-referencen.
Relateret
MCP-server
Forbind Claude Code, Codex CLI, Codex desktop, Cursor og andre AI-editorer.
REST API
Komplet reference for alle endpoints: numre, opkald, sms, mobilnumre til sms, agenter og deres kladder, værktøjer, optagelser, webhooks, ring-ikke-liste, relay, konto, opgaver, saldo, bilag, kalendere og integrationer.
Stemmeagent
Systemprompt, værktøjer, overdragelse til et menneske, optagelser og strukturerede opkaldsdata.