Průvodci
Úkoly
Úkol vytočí seznam příjemců jedním agentem podle pravidel, která nastavíš předem - rozpočet, volací okno, počet pokusů. Nic se nevytáčí, dokud úkol sám nespustíš.
Co je úkol
Úkol (task_...) je odchozí kampaň: jeden agent na motoru volai, seznam příjemců s telefonním číslem a volitelnými proměnnými pro systémový prompt, a pravidla (rozpočet, volací okno, maximální počet pokusů a délka hovoru). Tři typy podle účelu - invoice (upomínka platby), appointment (potvrzení termínu) a custom (cokoli jiného) - u prvních dvou navíc, když source je integration, každý příjemce nese referenci na doklad nebo událost (externalRefs), kterou agent v hovoru zmiňuje.
Agent musí být na vlastním motoru volai (useForOutboundTasks: true při založení, viz POST /v1/agents), ne na ElevenLabs - motor umí proměnné pro systémový prompt, stropy délky hovoru a ověření, že se za běhu kampaně nezměnila jeho konfigurace. Koncept agenta musí být PUBLIKOVANÝ (PATCH /v1/agents/{id} nebo POST /v1/agents/{id}/draft/publish) A publikovaná verze musí být OTESTOVANÁ (POST /v1/agents/{id}/simulate) - chybí-li kterýkoli krok, start vrátí agent_not_ready.
Stavy a přechody
V praxi jde úkol vždy ze `draft` rovnou do `running` (`start`); smazat (`DELETE`) jde jen v označených stavech.
draftstart. Editovatelný (PATCH), smazatelný.readydraft a running, který start jako výchozí bod akceptuje - žádný veřejný endpoint (REST ani MCP) do něj ale úkol dnes nepřevádí, takže ho v praxi nepotkáš. Kdyby nastal, je editovatelný a smazatelný stejně jako draft.runningPATCH vrátí task_not_editable bez výjimky. Kdo potřebuje změnit proměnné, musí úkol nejdřív zastavit (POST .../pause) a upravit až v paused - a jen dokud se ještě žádný příjemce nevytáčel; po prvním pokusu už recipients (a tím i proměnné) vyměnit nejde (items_immutable) a zbývá založit nový úkol. Smazat nejde.pausedPOST .../pause); rozvolaný hovor doběhne. Editovatelný, smazatelný, start ho obnoví.completedneeds_attentionagent_version_changed) nebo motor dočasně nešel (engine_contract_unavailable). POST .../reconcile sladí stav; smazatelný, dokud žádná položka nezůstala in_progress.Přesná podmínka smazání: stav je jeden z výše označených A ŽÁDNÁ položka nemá status: "in_progress" (rozvolaný hovor, který ještě neskončil) - jinak task_not_deletable.
Import příjemců (CSV)
POST /v1/tasks/csv-preview naparsuje CSV a vrátí ho zpátky s chybami u jednotlivých řádků - NIC se neukládá, jde jen o náhled před založením nebo úpravou úkolu. Stejnou funkci volá i formulář nového úkolu v portálu.
- Oddělovač se pozná automaticky (čárka nebo středník) podle prvního řádku.
- Musí existovat sloupec
phone(velikost písmen nerozhoduje) - jinak celé CSV padá na chybuphone. - Každý další sloupec je proměnná pro systémový prompt agenta (
{{jméno_sloupce}}) - nejvýš 20 sloupců, název max 64 znaků, hodnota max 512 znaků. - Telefonní číslo se normalizuje stejně jako všude v API (
normalizePhone) - neplatné nebo prázdné číslo je chyba jen na TOM řádku, zbytek CSV se dál zpracuje. - Buňka, která vypadá jako vzorec tabulkového procesoru (začíná
=,+,-nebo@), se odmítne - ochrana proti CSV injection při otevření v Excelu. - Nejvýš 100 řádků na jedno CSV (stejný strop jako počet příjemců úkolu) a 1 MB syrového textu.
Odpověď nese headers, delimiter, rows (každý řádek se svými chybami), validRows (jen bezvadné, přesně ve tvaru, který recipients v POST /v1/tasks očekává) a souhrnné errors. Pošli validRows rovnou jako recipients při založení nebo úpravě úkolu.
Rozpočet a volací okno
Rozpočet
budgetHal je STROP útraty v haléřích za celý úkol. Při založení musí pokrýt aspoň jeden pokus v maximální délce (budget_too_low, jinak); při startu se před KAŽDÝM vytočením rezervuje odhadovaná cena volání (reservedBudgetHal), teprve zvednutý hovor ji promítne do spentHal. Úkol nikdy neutratí víc, než kolik mu dáš do budgetHal.
Volací okno
callingWindow je {timezone: "Europe/Prague", start, end, days} - dnes jediné podporované pásmo je pražské, start/end ve tvaru HH:MM a days čísla 0-6 (0 = neděle). Bez zadání platí pracovní dny 9:00-18:00. Mimo okno start vrátí window_closed - buď počkej na otevření, nebo oknem upravíš přes PATCH.
Pokusy a délka hovoru
maxAttempts (1-3) říká, kolikrát se má nezvednuté číslo zkusit znovu; maxDurationSecs (30-300) je strop délky JEDNOHO hovoru, po kterém se automaticky ukončí - obojí volitelné, motor bez nich použije rozumné výchozí hodnoty.
Globální propustnost
Vytáčení všech úkolů na CELÉ platformě (ne jen tvého účtu) prochází jedním cronem, který běží každé 2 minuty a zpracuje nejvýš 20 položek za běh - ALE tenhle strop se dělí mezi souběžně běžící úkoly, ne že by ho směl vyčerpat jeden úkol: z KAŽDÉHO aktivního úkolu se za jeden běh vytočí právě JEDEN příjemce. I na úplně prázdné platformě proto jeden úkol nikdy nevytočí víc než jednoho příjemce za 2 minuty - sto příjemců tak neproběhne za ~20 minut, ale za zhruba 200 minut (100 x 2 minuty). Naplánuj podle toho volací okno u časově citlivých kampaní (např. appointment den před termínem).
Postup pro agenta
Typický běh, v tomto pořadí:
- Agent úkolu musí být PUBLIKOVANÝ a publikovaná verze OTESTOVANÁ (
POST /v1/agents/{id}/draft/publish, pakPOST /v1/agents/{id}/simulate) - jinak pozdějšístartvrátíagent_not_ready. - Volitelně
POST /v1/tasks/csv-preview- zkontroluje CSV příjemců, než se založí úkol. POST /v1/tasks- založí úkol ve stavudraft. Nic se nevytáčí.GET /v1/tasks/{id}- přečtiissues(dry-run validace) a ověř, že úkol je připravený na start.- Podle potřeby
PATCH /v1/tasks/{id}- uprav pravidla, VŽDY serevisionz posledního čtení. POST /v1/tasks/{id}/start- spustí vytáčení. Každý zvednutý hovor se účtuje ihned.POST /v1/tasks/{id}/pausekdykoli za běhu,POST /v1/tasks/{id}/startznovu obnoví.- Po přerušení (výpadek,
needs_attention)POST /v1/tasks/{id}/reconcilesladí stav se skutečnými hovory. DELETE /v1/tasks/{id}na konci, pokud úkol nikdy neproběhl nebo už doběhl a chceš záznam smazat.
Skoro každé zapisující volání (PATCH, start, pause, DELETE) bere revision z posledního přečtení úkolu - stejná optimistická souběžnost jako u konceptů agenta. Neshoda vrátí revision_conflict: načti úkol znovu (GET) a zopakuj s aktuální revision. reconcile je výjimka - revision je tam nepovinná.
MCP
Stejných sedm nástrojů jako REST (list_tasks, get_task, create_task, update_task, pause_task, reconcile_task, start_task) - kromě jednoho rozdílu u startu.
start_task potvrzuje čísla
MCP start_task bere navíc confirmedRecipients a confirmedBudgetHal - musí přesně sedět na skutečný počet příjemců a rozpočet úkolu, jinak vrátí validation s vypsanými skutečnými hodnotami a NIC nespustí. Cizí AI agent na jednom nejasně pochopeném pokynu tak nemůže omylem rozjet placenou kampaň na vymyšlených číslech - REST POST .../start tuhle mechaniku nemá, protože tam volá přímo vlastník účtu vlastním klíčem.
delete_task a náhled CSV v MCP nejsou - smazání zůstává v REST a portálu (nevratná akce s opsáním názvu), CSV náhled je jen krok formuláře.
Chyby
task_not_found- Žádný úkol s tímhleidna účtu není.task_not_editable- Úkol běží nebo je hotový (running/completed), nebo jeneeds_attentionbez možnosti obnovy - pravidla teď měnit nejdou.items_immutable- Seznam příjemců nejde nahradit poté, co se aspoň jeden pokus o vytočení odehrál.budget_too_low- Rozpočet nepokryje ani jeden pokus v maximální délce hovoru - zvyšbudgetHalnebo snižmaxDurationSecs.task_not_startable- Úkol není ve stavudraft/ready/paused, nebo nemá žádného čekajícího příjemce.task_needs_attention- Před dalším startem je potřebaPOST .../reconcile- něco (verze agenta, motor) se za běhu změnilo.agent_not_ready- Koncept agenta buď není publikovaný, nebo publikovaná verze není otestovaná - publikuj ho (POST /v1/agents/{id}/draft/publish) a pak otestuj publikovanou verzi (POST /v1/agents/{id}/simulate) před startem.agent_version_changed- Konfigurace agenta se změnila BĚHEM běžícího úkolu - otestuj a restartuj přesreconcile.engine_required- Agent úkolu není na motoru volai (useForOutboundTasks: true) - odchozí kampaně dnes vyžadují motor, ne ElevenLabs.engine_contract_unavailable- Motor momentálně neinzeruje podporu pro proměnné a stropy odchozích úkolů - zkus start znovu později.window_closed- Mimo nastavené volací okno - počkej na otevření, nebo upravcallingWindow.task_not_running- Pauza jde jen u běžícího úkolu.task_not_deletable- Smazat jde jen úkol bez položkyin_progressve stavudraft/ready/paused/completed/needs_attention.revision_conflict- Úkol se mezitím změnil - načti ho znovu (GET) a zopakuj s aktuálnírevision.
Úplnou tabulku chyb pro každý endpoint najdeš v sekci Úkoly v REST API referenci.
Související
MCP server
Připojení Claude Code, Cursoru a dalších AI editorů.
REST API
Kompletní reference všech endpointů: čísla, hovory, SMS, agenti a jejich koncepty, nástroje, nahrávky, webhooky, seznam nevolat, relay, Google Kalendář.
Hlasový agent
Systémový prompt, nástroje, přepojení na člověka, nahrávky a zapsané údaje z hovoru.