Přehled Management API
Management API slouží k činnostem v back-office, které nezahrnují odesílání chatových zpráv:
- vytvoření bota programově pomocí
POST /v1/management/bots - načtení konkrétního bota, kterého vlastníte, pomocí
GET /v1/management/bots/{bot_id} - aktualizace konkrétního bota pomocí
PATCH /v1/management/bots/{bot_id} - zjištění využití předplatného pomocí
GET /v1/usage
Klíče Management API jsou vázány na váš účet, nikoli na konkrétního bota. Jsou záměrně odděleny od klíčů Bot Talk API, aby kompromitovaný chatovací klíč nemohl upravovat vaše boty ani číst vaše fakturační údaje.
Základní URL
https://api.chatlab.com/aichat
Všechny koncové body v tomto článku jsou relativní k této základní URL.
Začínáme
- Otevřete administrátorskou aplikaci a přejděte do Account Settings > Management API (Nastavení účtu > Management API).
- Klikněte na Create Management Key (Vytvořit klíč Management), pojmenujte jej, volitelně nastavte povolené IP adresy a limit požadavků a poté formulář odešlete.
- Vyberte pouze ta oprávnění, která vaše integrace potřebuje, a zkopírujte celý klíč z potvrzovacího okna. Text v nezašifrované podobě se zobrazí pouze jednou.
- Uložte jej na svůj server, nikoli do kódu prohlížeče nebo veřejného repozitáře. Pro ověření přístupu proveďte požadavek pouze pro čtení, například
GET /v1/usages oprávněnímusage. - Nepoužívané nebo kompromitované klíče zneplatněte na stránce Management API.
Klíč vypadá jako mk_abcdefghijklmnopqrstuvwxyz012345. Předpona mk_ jej odlišuje od klíčů Bot Talk (ck_).
Autentizace
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Odeslání klíče mk_ na /v1/chat (nebo jakýkoli jiný koncový bod Bot Talk) vrátí chybu 403 key_type_not_allowed. Odeslání klíče ck_ na /v1/management/* vrátí stejnou chybu.
Limity
- Maximálně 5 aktivních klíčů Management API na uživatele
- Maximálně 10 požadavků za minutu na klíč (token bucket, kapacita 10, plynulé doplňování ~1 token každých 6 sekund). Lze snížit při vytvoření - nastavte nižší
rateLimitPerMinute, čímž klesne strop i rychlost doplňování.
Oprávnění
Každý klíč Management nese libovolnou podmnožinu tří níže uvedených oprávnění. Alespoň jedno musí být vybráno při vytvoření; jinak je požadavek odmítnut s chybou 400 invalid_request_error. Volání koncového bodu s klíčem, který postrádá požadované oprávnění, vrátí 403 insufficient_permissions.
bot_read- vyžadováno proGET /v1/management/bots/{bot_id}bot_management- vyžadováno proPOST /v1/management/botsaPATCH /v1/management/bots/{bot_id}usage- vyžadováno proGET /v1/usage
Struktura těla: vnořené sekce odpovídající záložkám v administraci
POST a PATCH přijímají tělo JSON rozdělené do 13 sekcí. Každá sekce odpovídá podzáložce v postranním panelu Bot Settings v administrátorské aplikaci, takže klíče JSON a viditelné záložky si přímo odpovídají: pokud změníte consent.humanSupportRequirePolicyAccept přes API, uvidíte stejný přepínač změněný na záložce Consent & Privacy v administraci.
role- persona bota, nezpracovaný prompt, délka odpovědí, jazyk, kontext webu / společnosti (záložka Role & Behavior)conversation- uvítací zpráva, zpřesňování dotazů, kontinuita konverzace, přepínač hodnocení + tooltipy, obsah navrhovaných otázek + dynamické doplňující otázky (záložka Chat Conversation)chatMemory- přepínač paměti chatu, prompty pro shrnutí, alokace kontextu (záložka Summaries & Memory)appearance- barvy, texty, rozměry, vlastní CSS, uvítací obrazovka, stylování navrhovaných otázek, chování automatického otevření, simulace psaní člověkem, markdown v zápatí (záložka Appearance)humanSupport- formulář pro lidský kontakt (záložka Human Contact Form)leadCollection- formulář pro sběr leadů (záložka Lead Collection)liveChat- předání na live chat (záložka Live Chat)consent- všechny čtyři přepínače souhlasu se zásadami ochrany osobních údajů a text obrazovky se souhlasem (záložka Consent & Privacy)whiteLabel- skrytí loga, odkaz vlastního loga, hosting na vlastní doméně (záložka Whitelabel)security- povolené domény, spamový filtr, limity četnosti zpráv (záložka Security)voice- hlasový vstup a hlasové konverzace: model, hlas, jazyky, prompt, maximální doba trvání (záložka Voice Conversation)multilingual- vícejazyčný režim, výchozí jazyk, nabízené jazyky, práce se znalostmi v různých jazycích (záložka Languages)advanced- model LLM, teplota, velikost kontextu, limit zpráv bota, interní národní prostředí, Offer Cards (záložka Model & Advanced)
Ze zapisovatelných nastavení se pouze name nachází na nejvyšší úrovni, protože bota identifikuje, místo aby patřilo pod konkrétní záložku.
Postranní panel Bot Settings má v současnosti 16 podzáložek a 13 z nich odpovídá výše uvedeným sekcím. Tři podzáložky bez odpovídající sekce jsou Flow, Actions a Forms - všechny tři jsou popsány níže v sekci „Mimo rozsah API“. Těch 13 odpovídajících tvoří Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation a Languages.
Tělo požadavku a tělo odpovědi mají stejnou strukturu. Odpověď obsahuje dva prvky navíc:
meta- pouze pro čtení: ID bota a časová razítka. Odstraňte je, pokud chcete odpověď z GET převést na platné tělo pro POST.apiKey- přítomno pouze při vytvoření - nově vygenerovaný klíč Bot Talk API pro nového bota.
Dvě pole ve sdílené struktuře jsou pouze pro čtení - vrací se v odpovědi, ale při odeslání v požadavku POST/PATCH jsou ignorována:
appearance.avatarUrl- plně kvalifikovaná veřejná URL adresa obrázku avatara bota (např.https://api.chatlab.com/aichat/content/avatar_xyz.png). Pomocí GET z ní přímo stáhnete data. Chcete-li obrázek změnit, nahrajte nový soubor přes multipart částavatar(viz PATCH).whiteLabel.whitelabelLogoUrl- plně kvalifikovaná veřejná URL adresa loga v záhlaví pro White Label. Stejný princip jako uavatarUrl. Chcete-li logo změnit, nahrajte nový soubor přes multipart částwhitelabel_logo(viz PATCH).
Obě URL adresy využívají schéma + hostitele + kontextovou cestu aktuálního požadavku, takže na vlastní doméně s White Label se vrací s kořenem na této doméně (např. https://api.acme.com/aichat/content/...).
Odešlete null pro sekci, kterou chcete v rámci PATCH přeskočit; odešlete null pro pole v rámci sekce, chcete-li přeskočit pouze toto konkrétní pole. Hodnota null na úrovni pole nikdy nemaže uloženou hodnotu - znamená pouze „neměnit“.
Sestavení role a promptu
Systémový prompt, který LLM skutečně obdrží, se sestavuje jedním ze dvou způsobů v závislosti na role.role. Když víte, v jaké větvi se nacházíte, snadno zjistíte, která pole mají vliv a která se sice uloží, ale ignorují.
Větev A - role.role je CUSTOMER_SUPPORT, SALES nebo LEAD_COLLECTION_AGENT (řízeno šablonou)
Backend sestaví prompt z vestavěné šablony a pole role.rawPrompt zcela ignoruje (hodnota zůstává u bota uložena, jen se nepoužije). Šablona zahrnuje:
role.role- označení role (např. „Customer Support“) a automaticky připojené instrukce specifické pro danou roliname- jméno bota vložené do úvodní větyrole.language- hodnota"Auto Detect"přepne bota tak, aby odpovídal v jazyce uživatele; jakákoli jiná hodnota (např."English","Polish") se převede na instrukci „Output in {language}, unless user uses another language“role.responseLength- mapováno na cílový počet slov:Concise≈ 50 slov,Normal≈ 100,Detailed≈ 200role.websiteAddress- volitelné; pokud není prázdné, připojí se jako „for the users of the website {url}“role.companyDescription- volitelné; pokud není prázdné, vloží se jako další odstavec před instrukce k roli
Toto je doporučená větev pro většinu botů - získáte chování vyladěné pro danou roli a bezpečnostní mantinely přímo v základu.
Větev B - role.role je CUSTOM (prompt zadaný volajícím)
Backend použije role.rawPrompt jako prompt role a připojí fixní pokyny platformy ohledně délky odpovědi. To funguje odděleně od role.responseLength: volitelné nastavení Concise/Normal/Detailed se pro roli CUSTOM nevkládá. Stejně tak pole language, websiteAddress a companyDescription se sice uloží, ale do tohoto promptu role se nevkládají. Požadovaný jazyk, cílovou délku odpovědi i kontext společnosti zahrňte přímo do pole rawPrompt sami. Během zpracování dotazu mohou být předány také další runtime instrukce a dohledaný kontext, takže rawPrompt netvoří celý vstup modelu. Instrukce k tónu z předdefinované role se nepřidávají, volba CUSTOM však neodstraňuje veškeré instrukce platformy.
Možnost CUSTOM použijte pouze tehdy, když vám prompt řízený šablonou nevyhovuje (např. potřebujete personu pro velmi specifický obor, vlastní bezpečnostní omezení nebo nestandardní formát výstupu).
Výčtová pole / pole s pevně stanovenou sadou hodnot
Výčtová a omezená pole neplatné hodnoty odmítají s chybou 400 invalid_parameter. Ostatní pole jsou běžné textové řetězce, i když uživatelské rozhraní nabízí pevný seznam. Používejte zdokumentovanou podobu zápisu a ověřujte odesílaná data, místo abyste předpokládali, že každý nepodporovaný řetězec bude automaticky odmítnut.
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- celý anglický název jazyka z rozbalovací nabídky v administraci, např.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindia zhruba 80 dalších. Hodnota se ukládá přesně tak, jak byla zadána, a dosazuje se do šablony promptu. Dvoupísmenné kódy ISO (en,pl) ani jiné hodnoty mimo seznam sice API neodmítne, vytvoří se však zkomolená instrukce typu „Output in en, unless...“. Pokud hodnotu při vytvoření vynecháte, použije se výchozíAuto Detect.advanced.model- viz sekce „Textové modely AI“ níže. Jde o řetězec, nikoli o validovaný výčet ve schématu požadavku; použijte podporovanou hodnotu, nikoli libovolný název modelu.advanced.chatContextSize- použijte8000,16000nebo32000podle rozhraní. Hodnoty přesahující maximum účtu se tiše oříznou; DTO tuto sadu tří hodnot nevynucuje.chatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minified,pillappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- booleovský přepínač. Hodnotatruedonutí uživatele vyplnit formulář pro leady před zahájením konverzace; hodnotafalsenechá rozhodnutí, kdy formulář zobrazit, na umělé inteligenci (výchozí nastavení).
Strukturovaná pole a číselné rozsahy
Pole, která na první pohled vypadají jako jednoduché textové řetězce nebo čísla, ale ve skutečnosti mají specifickou strukturu, rozsah nebo zvláštnosti v administrátorském rozhraní, o kterých je dobré vědět.
-
advanced.temperature- povolený rozsah je0.0až1.0, což odpovídá posuvníku v administraci. Hodnoty mimo tento rozsah jsou odmítnuty s chybou400 invalid_parameter. -
chatMemory.summariesToKnowledgeRatio- celé číslo vyjadřující procenta,10-90; uživatelské rozhraní nabízí kroky po10, ale API přijímá libovolná celá čísla v daném rozsahu. Výchozí hodnota je50. Při zapnuté paměti a kontextu větším než 8k rozděluje rozpočet na znalosti a paměť až po odečtení rezervy pro prompt a nedávnou konverzaci, nikoli z celého kontextu modelu. Při 8k se tímto nastavením žádný rozpočet pro shrnutí nepřiděluje. -
liveChat.schedule- JSON kódovaný jako řetězec, nikoli jako vnořený objekt JSON v odesílaných datech. Server ukládá nezpracovaný řetězec přesně tak, jak přišel; administrátorské rozhraní jej parsuje na straně klienta při vykreslování editoru provozní doby. Po naparsování má řetězec strukturu jedné položky pro každý den v týdnu plus klíčtimezone:- každý klíč dne v týdnu (
monday-sunday) se mapuje na{enabled: boolean, from: "H:MM", to: "H:MM"}ve 24hodinovém formátu timezonepředstavuje název časového pásma IANA (např."Europe/Warsaw","America/New_York")
Příklad hodnoty (všimněte si vnějších uvozovek a escapovaných vnitřních uvozovek - jedná se o jedno textové pole, nikoli o vnořený objekt):
"{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}"Mimo uvedené hodiny se návštěvníkovi zobrazí
liveChat.outOfHoursMessagea předání na live chat je potlačeno. Validace vnitřní struktury probíhá pouze na straně klienta v administrátorském rozhraní - neplatný JSON nebo neznámé klíče API přijme jednoduše jako řetězec a projeví se chybou vykreslování až ve chvíli, kdy bota v administraci otevře člověk. Před odesláním si strukturu na své straně ověřte. - každý klíč dne v týdnu (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- krátké texty zobrazené u prvků hodnocení konverzace 👍 / 👎, pokud je nastavenoconversation.conversationRatingEnabled=true. Výchozí texty jsou „I like the response“ / „I don't like the response“. Viditelné pro koncové uživatele. -
whiteLabel.hideRoboAssistLogo- funkce White Label závislá na limitech vašeho účtu. Skryje řádek „Powered by ChatLab“ v zápatí. Pokud váš účet funkci White Label nezahrnuje, hodnota se sice uloží, ale ignoruje se a zápatí se vždy vykreslí. -
whiteLabel.whitelabelLogoLink- funkce White Label závislá na limitech vašeho účtu. Cílová URL adresa pro kliknutí na vlastní logo, pokud je nastavenohideRoboAssistLogo=truea soubor vlastního loga byl nahrán přes multipart částwhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekundy (nikoli milisekundy), celé číslo0-200. Pauza mezi jednotlivými po sobě jdoucími bublinami bota, pokud platísimulateHumanTyping=true. Výchozí hodnota je5. -
appearance.autoOpenChatDelaySeconds- sekundy, celé číslo. Prodleva před automatickým otevřením widgetu, pokud je nastavenoautoOpenChat=trueaautoOpenChatDelay=true. -
advanced.internalLocale- kód národního prostředí a regionu dle IETF ve tvarull_CC(s podtržítkem, NIKOLIll-CCse spojovníkem). Přijímané hodnoty vycházejí z pevného seznamu zhruba 95 národních prostředí:en_US,pl_PL,de_DE,fr_FR,es_ES,it_IT,pt_PT,nl_NL,ru_RU,zh_CN,zh_TW,ja_JP,ko_KR,ar_SA,hi_IN,tr_TR,cs_CZ,da_DK,fi_FI,sv_SE,no_NO,el_GR,he_ILa mnoha dalších. Odeslání samotného dvoupísmenného kódu ("en") nebo formátu BCP-47 ("en-US") není na seznamu povolených hodnot. Výchozí hodnota jeen_US. Toto národní prostředí se používá pro formátování kalendářních dat a čísel v ovládacích prvcích widgetu, na rozdíl odrole.language(jazyk konverzačního výstupu bota). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- celá čísla (odesílejte jako čísla v JSON, např.30, nikoli"30"). Chcete-li tento limit založený na relaci vypnout, nastavte limit zpráv na0. Při zapnutí uveďte kladnou dobu trvání. Backend vymáhá N zpráv na relaci za danou dobu v sekundách, než návštěvníkovi zobrazísecurity.talkMessagesRateLimitHitMessage. -
advanced.botMessagesLimit- celé číslo (v JSON jako číslo, např.1000). Hodnota0znamená, že pro bota neplatí žádný dodatečný limit a řídí se pouze kreditním rozpočtem účtu; jinak musí jít o násobek 1 000 (1000,2000,10000, ...). Hodnoty jako100nebo1500jsou odmítnuty s chybou400 invalid_parameter. Jedná se o měsíční limit kreditů pro bota, nikoli o počet zpráv v rámci konverzace. Mapovač tuto hodnotu neomezuje podle rozpočtu účtu; skutečné využití je i nadále limitováno rozpočtem účtu.
Textové modely AI (advanced.model)
Při čtení bota nakonfigurovaného s požadovaným modelem v nabídce Settings > Model & Advanced (Nastavení > Model a pokročilé) použijte přesný identifikátor modelu vrácený v poli advanced.model. Aktuální výchozí hodnota při vytvoření je 5.6-LUNA. V identifikátorech záleží na velikosti písmen a liší se od zobrazovaných názvů; například 5.6-LUNA se zobrazuje jako GPT 5.6-luna.
Katalog modelů se v průběhu času mění. Z pouhého faktu, že schéma požadavku přijímá řetězec, nevyvozujte, že je podporován jakýkoli libovolný text nebo veřejné ID modelu od poskytovatele. Než chatbota nasadíte, načtěte si uloženou konfiguraci a otestujte ho.
Přehled polí (kompletní schéma požadavku)
Podporované sekce a pole včetně jejich typů a důležitých omezení. Sémantika PATCH: jakékoli vynechané pole (nebo odeslané jako null) ponechá uloženou hodnotu beze změny. Stejná struktura se používá i pro odpověď (bez binárního obsahu multipart; plus blok meta určený pouze pro čtení u každé odpovědi a apiKey pouze u odpovědi na vytvoření).
Nejvyšší úroveň
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
name |
string | max 150, povinné při vytvoření | Zobrazovaný název bota |
role |
object | Viz § role | |
conversation |
object | Viz § conversation | |
chatMemory |
object | Viz § chatMemory | |
appearance |
object | Viz § appearance | |
humanSupport |
object | Viz § humanSupport | |
leadCollection |
object | Viz § leadCollection | |
liveChat |
object | Viz § liveChat | |
consent |
object | Viz § consent | |
whiteLabel |
object | Viz § whiteLabel | |
security |
object | Viz § security | |
advanced |
object | Viz § advanced |
Prvky přítomné pouze v odpovědi:
meta: { id, createdAt, updatedAt }- pouze pro čtení.apiKey- string, přítomen pouze v odpovědiPOST /v1/management/bots- nově vygenerovaný klíč Bot Talk pro nového bota, vrácený přesně jednou.
§ role
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Předvolba persony; vybírá šablonu promptu (viz „Sestavení role a promptu“) |
language |
string | celý anglický název jazyka (English, Polish, ...) nebo Auto Detect |
Primární jazyk předávaný do šablony promptu |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Požadovaná výřečnost odpovědí AI |
websiteAddress |
string | Web použitý pro kontext promptu | |
companyDescription |
string | Popis společnosti použitý pro kontext promptu | |
rawPrompt |
string | Vlastní systémový prompt - použit doslovně pouze v případě role=CUSTOM |
§ conversation
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
welcomeMessage |
string | První zpráva zobrazená návštěvníkovi po otevření | |
queryRefinementEnabled |
boolean | Pokud je true, zpřesní otázku návštěvníka před vyhledáváním RAG | |
conversationContinuityEnabled |
boolean | Pokud je true, vracející se návštěvníci pokračují ve své poslední konverzaci | |
conversationRatingEnabled |
boolean | Pokud je true, zobrazí ovládací prvky pro hodnocení konverzace palcem nahoru/dolů | |
positiveRatingTooltip |
string | Popisek u tlačítka kladného hodnocení | |
negativeRatingTooltip |
string | Popisek u tlačítka záporného hodnocení | |
suggestedQuestions |
string | Navrhované otázky / podněty ke konverzaci oddělené novým řádkem | |
dynamicSuggestedFollowups |
boolean | Pokud je true, AI po každé odpovědi navrhne doplňující otázky | |
positiveRatingMessage |
string | Zpráva zobrazená po kladném hodnocení | |
negativeRatingMessage |
string | Zpráva zobrazená po záporném hodnocení | |
hideSuggestedQuestionsAfterFirstUse |
boolean | Po použití skrýt statické návrhy | |
dynamicFollowupsAutoIcons |
boolean | Pokud je true, AI automaticky vybere ikony emoji pro dynamické doplňující návrhy |
§ chatMemory
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
enabled |
boolean | Hlavní přepínač funkce paměti chatu | |
summaryConversationsEnabled |
boolean | Ukládat shrnutí jednotlivých konverzací | |
conversationSummaryPrompt |
string | Vlastní prompt použitý ke shrnutí každé konverzace | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Určuje, zda se má použít výchozí nebo vlastní prompt pro shrnutí |
clientSummaryPrompt |
string | Vlastní prompt použitý ke shrnutí informací o klientovi napříč konverzacemi | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Výchozí vs. vlastní prompt pro profil klienta |
summariesToKnowledgeRatio |
int | 10-90 (krok v UI 10) |
% dostupného rozpočtu znalostí/paměti přiděleného shrnutím při kontextech nad 8k |
§ appearance
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
launcherLabelLine1 |
string | max 60 | První řádek textu spouštěče |
launcherLabelLine2 |
string | max 60 | Druhý řádek textu spouštěče |
launcherTextColor |
string | Barva textu spouštěče | |
launcherDismissEnabled |
boolean | Povolit zavření spouštěče | |
widgetFontFamily |
string | inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono |
Rodina písma widgetu |
chatDrawerEnabled |
boolean | Povolit zobrazení ve formě bočního panelu (drawer) | |
launcherColor |
string (hex) | Barva pozadí spouštěče (ikony chatu) | |
headerColor |
string (hex) | Barva pozadí záhlaví chatu | |
titleColor |
string (hex) | Barva nadpisu v záhlaví chatu | |
subtitleColor |
string (hex) | Barva podnadpisu v záhlaví chatu | |
clientMessageBubbleColor |
string (hex) | Barva bubliny zprávy návštěvníka | |
clientMessageTextColor |
string (hex) | Barva textu zprávy návštěvníka | |
responseMessageBubbleColor |
string (hex) | Barva bubliny odpovědi bota | |
responseMessageTextColor |
string (hex) | Barva textu odpovědi bota | |
chatSubheader |
string | Podtitul zobrazený pod názvem chatu | |
senderPlaceholder |
string | Zástupný text v poli pro zadání zprávy | |
resetConversationTooltip |
string | Popisek u tlačítka pro resetování konverzace | |
chatAlignment |
string (enum) | ∈ {left, right} |
Ke které straně obrazovky je chat ukotven |
launcherBottomMargin |
int | 0-500 |
Vzdálenost spouštěče od spodního okraje (px) |
launcherSideMargin |
int | 0-500 |
Vzdálenost spouštěče od bočního okraje (px) |
displayShadow |
boolean | Vržený stín pod widgetem | |
customCss |
string | Přímý kód CSS vložený do prvku iframe widgetu | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Způsob otevírání odkazů ve zprávách bota |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified, pill} |
Minimalizovaný stav: ikona spouštěče, kompaktní lišta odesílatele nebo pilulka |
chatDesktopWidthPx |
int | Šířka widgetu na počítači | |
chatDesktopHeightPx |
int | Výška widgetu na počítači | |
chatMobileSizePercent |
int | Velikost widgetu na mobilu v % výřezu obrazovky | |
messageFontSize |
int | Velikost písma textu zprávy (px) | |
showChatbotBubblesDesktop |
boolean | Zobrazovat plovoucí upoutávací bubliny na počítači | |
showChatbotBubblesMobile |
boolean | Zobrazovat plovoucí upoutávací bubliny na mobilu | |
chatbotBubblesDelaySeconds |
int | Prodleva před zobrazením upoutávacích bublin (sekundy) | |
launcherIconFullSize |
boolean | Vykreslit vlastní ikonu spouštěče od okraje k okraji místo odsazení | |
welcomeScreenEnabled |
boolean | Zobrazit uvítací obrazovku místo přímého přechodu do chatu | |
welcomeScreenQuestionsLabel |
string | Text nad navrhovanými otázkami na uvítací obrazovce | |
welcomeScreenHideHumanContactForm |
boolean | Skrýt akci formuláře lidské podpory v záhlaví po dobu zobrazení uvítací obrazovky. Znovu se objeví po první zprávě návštěvníka. U botů vytvořených před 2026-09-02 je výchozí hodnota true |
|
welcomeScreenHideLiveChat |
boolean | Skrýt akci živého chatu v záhlaví po dobu zobrazení uvítací obrazovky. Znovu se objeví po první zprávě návštěvníka. U botů vytvořených před 2026-09-02 je výchozí hodnota true |
|
headerActionsLayout |
string | ICONS nebo DROPDOWN |
Způsob nabídky živého chatu a formuláře lidské podpory v záhlaví chatu: ICONS (samostatná ikona pro každý) nebo DROPDOWN (seskupeno v nabídce záhlaví). U botů vytvořených před 2026-09-02 je výchozí hodnota ICONS |
stackSuggestedQuestions |
boolean | Řadit navrhované otázky svisle (oproti zobrazení vedle sebe) | |
suggestedQuestionsFontSize |
int | Velikost písma štítků s navrhovanými otázkami (px) | |
suggestedQuestionsTextColor |
string (hex) | Barva textu štítku s navrhovanou otázkou | |
suggestedQuestionsBackgroundColor |
string (hex) | Barva pozadí štítku s navrhovanou otázkou | |
autoOpenChat |
boolean | Automaticky otevřít chat na počítači | |
autoOpenChatOnMobiles |
boolean | Automaticky otevřít chat na mobilu | |
autoOpenChatDelay |
boolean | Použít prodlevu před automatickým otevřením | |
autoOpenChatDelaySeconds |
int | Prodleva automatického otevření (sekundy) | |
simulateHumanTyping |
boolean | Rozdělit odpověď bota do bublin s animací psaní | |
simulateHumanTypingDelay |
int | 0-200 |
Prodleva mezi jednotlivými bublinami zpráv (sekundy) |
footerMarkdown |
string | max 255 | Vlastní zápatí ve formátu markdown zobrazené pod chatem |
avatarUrl |
string | pouze pro čtení | Plně kvalifikovaná veřejná URL adresa avatara; pro změnu nahrajte soubor prostřednictvím multipart části avatar |
Multipart při POST/PATCH: avatar (část se souborem). Těla odpovědí u požadavků GET obsah souboru vynechávají - přenáší se pouze URL adresa.
§ humanSupport
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
enabled |
boolean | Přepínač toku lidské podpory | |
email |
string | povinné (striktní při vytvoření), když enabled=true |
Adresa, která přijímá e-maily lidské podpory |
dialogMessage |
string | Motivační zpráva zobrazená nad formulářem | |
thankYouMessage |
string | Potvrzení zobrazené po odeslání | |
emailMessageSubjectTemplate |
string | Šablona předmětu e-mailu odesílaného operátorovi | |
emailMessageContentTemplate |
string | Šablona těla e-mailu odesílaného operátorovi | |
emailPlaceholder |
string | Zástupný text v poli pro e-mail | |
messagePlaceholder |
string | Zástupný text v poli pro zprávu | |
emailWithConversationContent |
boolean | Pokud je true, zahrne přepis konverzace do těla e-mailu | |
customFormId |
long | ID existujícího vlastního formuláře | Nahradí vestavěný kontaktní formulář vlastním formulářem. Při vytvoření se při vynechání použije vestavěný formulář; u PATCH ponechá null aktuální výběr beze změny |
customFormMapping |
string | řetězec kódovaný jako JSON | Mapuje pole vlastního formuláře na pole e-mailu lidské podpory |
requirePolicyAccept se nachází v consent.humanSupportRequirePolicyAccept, nikoli zde.
§ leadCollection
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
enabled |
boolean | Přepínač formuláře pro sběr kontaktů | |
nameEnabled |
boolean | Sbírat jméno | |
nameLabel |
string | Popisek pole pro jméno | |
emailEnabled |
boolean | Sbírat e-mail | |
emailLabel |
string | povinné (striktní při vytvoření), když enabled=true A ZÁROVEŇ emailEnabled=true |
Popisek pole pro e-mail |
phoneEnabled |
boolean | Sbírat telefon | |
phoneLabel |
string | povinné (striktní při vytvoření), když enabled=true A ZÁROVEŇ phoneEnabled=true |
Popisek pole pro telefon |
leaveDetailsMessage |
string | povinné (striktní při vytvoření), když enabled=true |
Zpráva vyzývající návštěvníka k zanechání údajů |
thankYouMessage |
string | povinné (striktní při vytvoření), když enabled=true |
Potvrzení zobrazené po odeslání |
requireBeforeNewConversation |
boolean | Pokud je true, formulář musí být odeslán před zahájením chatu; pokud je false, AI rozhodne, kdy formulář nabídnout |
|
emailNotificationEnabled |
boolean | Odeslat e-mail majiteli při každém získání kontaktu | |
emailNotificationAddress |
string | Příjemce oznámení (ve výchozím nastavení e-mail účtu) | |
emailWithConversationContent |
boolean | Pokud je true, zahrne přepis konverzace do oznámení |
| customFormId | long | ID existujícího vlastního formuláře | Nahradí vestavěný formulář pro kontakty vlastním formulářem. Při vytvoření se při vynechání použije vestavěný formulář; u PATCH ponechá null aktuální výběr beze změny |
| customFormMapping | string | řetězec kódovaný jako JSON | Mapuje pole vlastního formuláře na jméno / e-mail / telefon |
Pravidlo mezi poli (striktní při vytvoření): enabled=true vyžaduje alespoň jedno z polí emailEnabled nebo phoneEnabled. requirePolicyAccept se nachází v consent.leadCollectionRequirePolicyAccept, nikoli zde.
§ liveChat
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
enabled |
boolean | Přepínač funkce Live Chat | |
infoMessage |
string | Vysvětlující zpráva před předáním | |
startMessage |
string | Zpráva zobrazená při zahájení relace živého chatu | |
endMessage |
string | Zpráva zobrazená při ukončení relace živého chatu | |
nameLabel |
string | Popisek pole pro jméno v předformuláři pro Live Chat | |
emailLabel |
string | Popisek pole pro e-mail v předformuláři pro Live Chat | |
schedule |
string | řetězec kódovaný jako JSON (přepínače dnů v týdnu + from/to + timezone) |
Provozní doba živého chatu - přesný formát najdete v části „Strukturovaná pole a číselné rozsahy“ |
outOfHoursMessage |
string | Zpráva zobrazená mimo provozní dobu | |
closeModalMessage |
string | Název modálního okna „ukončit živý chat?“ | |
closeModalConfirmLabel |
string | Popisek potvrzovacího tlačítka v modálním okně ukončení | |
closeModalCancelLabel |
string | Popisek tlačítka zrušení v modálním okně ukončení | |
closeModalTooltipText |
string | Popisek u prvku pro ukončení chatu | |
operatorHasJoinedLabel |
string | Oznámení zobrazené po připojení operátora | |
operatorDidNotJoinInTimeLabel |
string | Oznámení zobrazené v případě, že se žádný operátor nepřipojí v časovém limitu | |
waitingForOperatorToJoinLabel |
string | Oznámení zobrazené během čekání na operátora | |
waitingForOperatorSeconds |
int | Časový limit pro přijetí konverzace operátorem (sekundy) | |
redirectToHumanSupportForm |
boolean | Pokud je true, při nepřijetí konverzace operátorem přejde na formulář lidské podpory | |
requireAdminOnline |
boolean | Vyžadovat dostupného operátora podle nastavení přítomnosti | |
presenceMode |
string | Režim přítomnosti; použijte hodnotu z bota nakonfigurovaného v UI | |
hideHumanSupportWhenLiveChatAvailable |
boolean | Skrýt kontaktní formulář, pokud je živý chat dostupný | |
missedEmailEnabled |
boolean | výchozí true |
Odeslat majiteli bota e-mail, pokud žádost o živý chat zůstala bez odpovědi. U starších botů není nastaveno, což se interpretuje jako povoleno |
requirePolicyAccept se nachází v consent.liveChatRequirePolicyAccept, nikoli zde.
§ consent
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Vyžadovat souhlas se zásadami ochrany osobních údajů před zahájením nové konverzace | |
humanSupportRequirePolicyAccept |
boolean | Vyžadovat souhlas se zásadami ochrany osobních údajů před odesláním formuláře lidské podpory | |
leadCollectionRequirePolicyAccept |
boolean | Vyžadovat souhlas se zásadami ochrany osobních údajů před odesláním formuláře pro sběr kontaktů | |
liveChatRequirePolicyAccept |
boolean | Vyžadovat souhlas se zásadami ochrany osobních údajů před zahájením relace živého chatu | |
newConversationConsentDescription |
string | Úvodní text obrazovky se souhlasem při zahájení konverzace | |
privacyPolicyConsentCheckboxLabel |
string | Text vedle zaškrtávacího políčka souhlasu (obvykle obsahuje odkaz na zásady ochrany osobních údajů) |
§ whiteLabel
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
hideRoboAssistLogo |
boolean | funkce White Label; závisí na limitech účtu | Skrýt výchozí logo ChatLab v zápatí |
whitelabelLogoLink |
string | funkce White Label; závisí na limitech účtu | URL adresa, na kterou odkazuje vlastní logo v zápatí |
assignToCustomDomain |
boolean | podmíněno funkcí CUSTOM_DOMAIN |
Hostovat chat na nakonfigurované vlastní doméně |
whitelabelLogoUrl |
string | pouze pro čtení | Plně kvalifikovaná veřejná URL adresa loga white-label; pro změnu nahrajte soubor prostřednictvím multipart části whitelabel_logo |
Multipart při POST/PATCH: whitelabel_logo (část se souborem). Těla odpovědí u požadavků GET obsah souboru vynechávají - přenáší se pouze URL adresa.
§ security
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
allowedDomains |
string | Čárkami oddělený seznam domén s povolením vkládat widget (prázdné = bez omezení seznamem povolených domén) | |
spamFilterEnabled |
boolean | Povolit antispamový filtr pro příchozí zprávy daného bota | |
countryFilterMode |
string | BLACKLIST nebo WHITELIST |
Způsob interpretace seznamů zemí. Samotné seznamy zůstávají přístupné pouze správcům |
talkMessagesRateLimit |
int | >= 0; hodnota 0 vypíná |
Maximální povolený počet zpráv od uživatele v okně limitu rychlosti |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Délka okna limitu rychlosti (sekundy) |
talkMessagesRateLimitHitMessage |
string | Zpráva zobrazená návštěvníkovi při dosažení limitu rychlosti |
§ voice
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
inputEnabled |
boolean | Povolit návštěvníkovi diktovat zprávy (převod řeči na text) | |
conversationEnabled |
boolean | vyžaduje hlasovou funkci v tarifu | Povolit plnohodnotné hlasové konverzace |
voiceId |
string | identifikátor hlasu specifický pro poskytovatele (např. alloy) |
Který syntetický hlas mluví |
model |
string | např. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Hlasový model. Účtováno po minutách, sazby se liší podle modelu |
turnDetection |
string | specifické pro poskytovatele | Režim střídání mluvčích |
audioPrompt |
string | Dodatečný systémový prompt použitý pouze při hlasových vstupech | |
welcomeMessage |
string | Mluvená úvodní věta | |
language |
string | kód jazyka | Primární hlasový jazyk |
additionalLanguages |
string | čárkami oddělené kódy jazyků | Další jazyky, které hlasový agent přijímá |
maxDurationSeconds |
int | Pevný limit pro jednu hlasovou konverzaci | |
maxDurationMessage |
string | Zpráva zobrazená při dosažení limitu |
§ multilingual
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
enabled |
boolean | Přepínač vícejazyčného režimu | |
mode |
string | AUTODETECT nebo FIXED_LIST |
Způsob, jakým bot vybírá jazyk odpovědi |
baseLanguage |
string | kód jazyka | Jazyk, ve kterém jsou vytvořeny vlastní texty bota |
languages |
string | čárkami oddělené kódy jazyků | Jazyky nabízené návštěvníkovi |
knowledgeLanguageMode |
string | NONE, MAIN nebo DYNAMIC |
Způsob zacházení se znalostmi v jiných jazycích |
knowledgeLanguageFallback |
string | kód jazyka | Jazyk použitý v případě, že není nalezena žádná shoda |
§ advanced
| Pole | Typ | Omezení | Popis |
|---|---|---|---|
model |
string | závisí na limitech účtu; viz „Textové modely AI“ výše | Identifikátor LLM (např. 5.6-LUNA) |
temperature |
decimal | 0.0-1.0 |
Vzorkovací teplota (odpovídá posuvníku v UI) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; automaticky omezeno na limit vašeho účtu |
Nakonfigurovaný rozpočet kontextu, včetně instrukcí, historie a znalostí |
botMessagesLimit |
long | 0 nebo násobek 1000 (např. 1000, 2000, 10000) |
Měsíční limit kreditů na zprávy bota (0 = bez dodatečného limitu bota; limit účtu stále platí) |
internalLocale |
string | kód národního prostředí ve formátu ll_CC |
Národní prostředí pro popisky rozhraní widgetu (odlišné od role.language) |
productsViewEnabled |
boolean | Pokud je true, zpřístupní karty nabídek Offer Cards pro e-commerce v chatu | |
includeProductsInKnowledgeBase |
boolean | Pokud je true, zaindexuje katalog produktů jako součást znalostní báze |
Mimo rozsah API
Administrátorské UI obsahuje několik oblastí, které záměrně nejsou v této verzi Management API zpřístupněny:
- Trénování a mazání - tyto koncové body neumožňují výpis všech botů, správu trénovacích datových sad ani mazání botů. Pro tyto postupy použijte aplikaci.
- Karta Flow - vizuální editor toku konverzace (Flow Editor - fáze a přechody). Není zpřístupněno přes Management API.
- Karta Actions - spravované integrace pro e-commerce / rezervace, AI Search a vlastní funkce API. Volání nástrojů nikdy nebylo součástí Management API.
- Samotný nástroj pro tvorbu vlastních formulářů - vytváření a úprava vlastních formulářů nejsou zpřístupněny. Můžete však existující formulář k botovi připojit pomocí
leadCollection.customFormIdahumanSupport.customFormId. - Vlastní ikony pro otevření / zavření chatu -
customLauncherIconVisible,openChatIcon,closeChatIcon. API zpřístupňuje pouze hlavní multipart částiavatarawhitelabel_logo. - Seznamy IP adres a zemí - samotné záznamy jsou přístupné pouze správcům. Zpřístupněn je pouze režim interpretace prostřednictvím
security.countryFilterMode.
Koncové body
POST /v1/management/bots
Vytvoří nového bota. Jsou podporovány dva ekvivalentní typy Content-Type; vyberte si ten, který vám více vyhovuje.
Režim A - čistý JSON (doporučeno, pokud v rámci stejného požadavku nepotřebujete nahrát avatar nebo logo):
Content-Type: application/json- Tělo požadavku je přímo konfigurační JSON bota (bez obalového prvku
data) - Soubory (avatar / logo) lze nahrát později prostřednictvím druhého
PATCHv režimu B
Režim B - multipart/form-data (použijte při nahrávání souborů v rámci stejného požadavku):
Content-Type: multipart/form-data; boundary=...- Část
datave formátu JSON (povinná,Content-Type: application/json) - konfigurace bota ve vnořené struktuře popsané výše - Souborová část
avatar(volitelná) - obrázek avatara bota - Souborová část
whitelabel_logo(volitelná) - white-label logo (platí pouze v případě, že váš účet zahrnuje funkci White Label)
V JSONu je povinné pouze pole name; všechna ostatní pole přebírají stejné výchozí hodnoty, jaké by nastavil průvodce v administračním rozhraní.
Příklad těla požadavku
Toto je maximální JSON typu data - se všemi vyplněnými sekcemi. Odesílejte pouze ty sekce, které potřebujete; vše ostatní převezme výchozí hodnoty.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
}
}
Validační pravidla s vlastními chybovými zprávami:
name- povinné, max. 150 znakůadvanced.temperature- mezi0.0a1.0chatMemory.summariesToKnowledgeRatio- celé číslo mezi10a90(procenta, krok10)appearance.launcherBottomMargin,appearance.launcherSideMargin- mezi0a500appearance.footerMarkdown- max. 255 znakůhumanSupport.enabled=truevyžaduje nastaveníhumanSupport.emailleadCollection.enabled=truevyžaduje, aby alespoň jeden z parametrůleadCollection.emailEnabledneboleadCollection.phoneEnabledbyl nastaven na true; aktivovaný kanál zároveň vyžaduje zadání svého popisku a parametrůleaveDetailsMessageathankYouMessageadvanced.chatContextSizeje automaticky omezeno na maximální podporovanou velikost kontextu daného účtu. Nepočítejte s tím, že by se ostatní číselná pole omezovala automaticky.
Pole, jejichž hodnota je na serveru null, jsou v těle JSONu vynechána - přenášejí se pouze pole s hodnotami odlišnými od null.
Příklad těla odpovědi (201)
Stejná struktura jako u požadavku, navíc s blokem meta (pouze pro čtení) a jednorázovým polem apiKey na nejvyšší úrovni. Adresy URL souborů určené pouze pro čtení (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) server vyplní, pokud byly nahrány odpovídající multipart části.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T10:11:02Z"
},
"apiKey": "ck_freshly_minted_bot_talk_key_here"
}
Pole apiKey se zobrazuje pouze při vytvoření - jde o nově vygenerovaný klíč k Bot Talk API svázaný s novým botem. Čistý text klíče se zobrazí pouze jednou a nelze jej z API později znovu získat; okamžitě si jej uložte na své straně.
Hlavička odpovědi Location obsahuje URL nového bota (/v1/management/bots/{id}).
Příklady pro cURL
Režim A - čistý JSON (nejjednodušší):
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d '{"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}}'
Režim B - multipart s avatarem:
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-F 'data={"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}};type=application/json' \
-F 'avatar=@./avatar.png'
GET /v1/management/bots/{bot_id}
Vrátí aktuální konfiguraci bota, který patří k vašemu účtu.
Příklad pro cURL
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Příklad těla odpovědi (200)
Stejná struktura jako u odpovědi POST, bez jednorázového pole apiKey. Blok meta je zahrnut. Pokud bot neexistuje nebo nepatří k vašemu účtu, vrátí kód 404 not_found_error.
Aktuální avatar a white-label logo jsou vráceny jako plně kvalifikované adresy URL pouze pro čtení (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - se stejným schématem, hostitelem a kontextovou cestou, které obsloužily tento požadavek. Samotná data stáhnete přímo metodou GET na tyto adresy URL. Chcete-li některý ze souborů nahradit, nahrajte nový soubor prostřednictvím multipart části avatar / whitelabel_logo v požadavku PATCH. Pokud tato pole s URL odešlete v těle požadavku, budou ignorována.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T11:02:19Z"
}
}
Klonování bota
Tělo požadavku POST /v1/management/bots a tělo odpovědi GET /v1/management/bots/{bot_id} sdílejí stejnou strukturu, takže klonování probíhá ve třech krocích: načtení zdroje pomocí GET, odstranění polí identity spravovaných serverem a odeslání výsledku pomocí POST.
1. Načtěte zdrojového bota pomocí GET.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Odstraňte blok meta na nejvyšší úrovni. Objekt meta (id, createdAt, updatedAt) je spravován serverem a je pouze pro čtení - jeho ponechání v těle POST nezpůsobí žádnou škodu (server ho ignoruje), ale jeho odstranění jasně vyjadřuje záměr a udržuje payload čistý. Volitelně upravte name, aby byl klon odlišitelný od zdroje.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Odešlete upravené tělo pomocí POST pro vytvoření klonu. Úplnou strukturu těla a pravidla validace naleznete v referenci POST /v1/management/bots výše.
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d @clone-body.json
Odpověď obsahuje meta.id nového bota a nově vygenerovaný apiKey (klíč Bot Talk pro daný klon). Nešifrovaná hodnota apiKey se vrací pouze v této odpovědi při vytvoření - zkopírujte si ji dříve, než tělo odpovědi zahodíte; později ji již nelze získat.
Tento postup zkopíruje podporovaná nastavení, nikoli plně natrénovaného chatbota. Trénovací obsah, historie konverzací, integrace/akce, Flow a definice formulářů se těmito koncovými body neklonují. Tato nastavení nakonfigurujte samostatně v aplikaci.
Další důležitá upozornění:
- Soubory se neklonují.
appearance.avatarUrlawhiteLabel.whitelabelLogoUrljsou pouze pro čtení a odkazují na soubory zdrojového bota. Pokud u klonu potřebujete stejného avatara nebo white-label logo, stáhněte si bajty ze zdrojových URL adres a nahrajte je jako části multipartavatar/whitelabel_logo- buď při vytváření pomocí POST (režim B), nebo v následném požadavku PATCH. - Klíče Bot Talk se neklonují. Každý bot má svůj vlastní fond klíčů Bot Talk. Jediný
apiKeyvrácený požadavkem POST při vytvoření je ten, který se vygeneruje automaticky; další klíče vytvořte v případě potřeby na kartě API daného bota.
PATCH /v1/management/bots/{bot_id}
Aktualizujte jedno nebo více polí u bota, kterého vlastníte. Upraví se pouze sekce / pole přítomná v JSON; vše vynechané (nebo odeslané jako null) zůstane beze změny. V rámci odeslané sekce platí sémantika částečné aktualizace pro každé pole.
Podporovány jsou dva rovnocenné typy Content-Type (stejně jako u POST):
Režim A - čistý JSON (doporučeno, pokud aktualizujete pouze nastavení):
Content-Type: application/json- Tělo požadavku je přímo JSON pro patch (bez obalového prvku
data)
Režim B - multipart/form-data (použijte při nahrávání souborů):
- Část JSON
data(volitelná) - samotný patch. Odešlete pouze tehdy, když chcete změnit pole. Zcela vynechte, pokud chcete nahrát pouze avatara nebo logo. - Souborová část
avatar(volitelná) - nahrazení avatara - Souborová část
whitelabel_logo(volitelná) - nahrazení white-label loga (platí pouze v případě, že váš účet zahrnuje funkci White Label)
Všechny tři části jsou u požadavku PATCH volitelné, ale alespoň jedna musí být přítomna, aby volání mělo smysl.
Příklad těla požadavku (více sekcí)
Lze zde odeslat jakékoli pole, které přijímá POST /v1/management/bots. Níže uvedený příklad znázorňuje několik sekcí, nikoli všechna podporovaná pole; v praxi posíláte pouze klíče, které chcete změnit (viz „Minimální částečná aktualizace“ níže) - každý vynechaný klíč (nebo odeslaný jako null) ponechá uloženou hodnotu beze změny.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Concise",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hello there!",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "Pricing\nShipping times\nReturns policy",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about the customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#abcdef",
"headerColor": "#abcdef",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI assistant",
"senderPlaceholder": "Type a message",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we'll get back to you.",
"thankYouMessage": "Thanks!",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details.",
"thankYouMessage": "Thanks!",
"requireBeforeNewConversation": true,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5",
"temperature": 0.2,
"chatContextSize": 32000,
"botMessagesLimit": 2000,
"internalLocale": "en_US",
"productsViewEnabled": false
}
}
Minimální částečná aktualizace
Aktualizujte jedno pole pomocí PATCH odesláním přesně těch klíčů, které chcete změnit - vše ostatní zůstane zachováno.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Příklady pro Curl
Režim A - čistý JSON (nejjednodušší):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d '{"appearance":{"launcherColor":"#abcdef"}}'
Režim B - multipart (při nahrazování avatara / loga):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'data={"appearance":{"launcherColor":"#abcdef"}};type=application/json' \
-F 'avatar=@./new-avatar.png'
Režim B - nahrazení pouze avatara (beze změn polí):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Tělo odpovědi (200)
Stejná struktura jako GET /v1/management/bots/{bot_id} - úplná konfigurace bota po aplikaci patche, včetně bloku meta. Žádné pole apiKey. Pokud bot neexistuje nebo nepatří k vašemu účtu, vrátí se 404 not_found_error.
Níže uvedený příklad ukazuje odpověď po aplikaci výše uvedeného patche Úplné tělo požadavku (více sekcí) na bota z příkladu GET - změněná pole odrážejí nové hodnoty, nedotčená pole jsou zachována a hodnota meta.updatedAt se posune dopředu.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Concise",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hello there!",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "Pricing\nShipping times\nReturns policy",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about the customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#abcdef",
"headerColor": "#abcdef",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI assistant",
"senderPlaceholder": "Type a message",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we'll get back to you.",
"thankYouMessage": "Thanks!",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details.",
"thankYouMessage": "Thanks!",
"requireBeforeNewConversation": true,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5",
"temperature": 0.2,
"chatContextSize": 32000,
"botMessagesLimit": 2000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T12:45:08Z"
}
}
GET /v1/usage
Načtení aktuálního využití předplatného pro účet, který vlastní klíč Management.
Tělo odpovědi (200)
{
"subscriptionType": "your-plan-id",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeje identifikátor aktuálního plánu účtu psaný malými písmeny (your-plan-idje ilustrativní zástupný symbol). Plány pocházejí z dynamického katalogu, takže přesná sada identifikátorů se může v čase měnit podle toho, jak jsou plány přejmenovávány nebo přidávány - přistupujte k tomu jako k neprůhlednému řetězci, nikoli jako k pevnému výčtu (enum).messages.used/limit/remainingpředstavují kredity na zprávy za aktuální kalendářní měsíc, které se resetují první den v měsíci, nikoli v den obnovení předplatného. Jsou váženy kredity, nejedná se o prostý počet odpovědí.bots.used/limit/remainingpočítají vlastněné boty, včetně pozastavených botů, oproti celkovému limitu botů vašeho účtu.
Hlavičky rate limitu
Odpovědi, které dosáhnou fáze rate limitu (tj. prošly autentizací a IP whitelistem), obsahují:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- limit na klíč skutečně použitý pro toto volání (ve výchozím nastavení 10, nebo vaše nakonfigurovaná hodnotarateLimitPerMinute, pokud je nižší).X-RateLimit-Remaining- zbývající tokeny v zásobníku bezprostředně po tomto volání.X-RateLimit-Reset- čas v sekundách Unix epochy, kdy bude k dispozici další token (nejedná se o úplné obnovení zásobníku; zásobník se doplňuje průběžně). Když je zásobník plný, odpovídá tato hodnota aktuálnímu času.
U odpovědí 429 rate_limit_exceeded je nastavena také hlavička Retry-After, vyjádřená v celých sekundách do uvolnění alespoň jednoho tokenu.
Chyby před autentizací (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) a 403 ip_not_whitelisted neobsahují hlavičky X-RateLimit-* - limiter se uplatňuje až po úspěšném ověření autentizace a IP adresy.
Formát chyb
Stejný formát obálky jako u Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Validační chyby používají code: "invalid_parameter" a před zprávu připojují cestu k chybnému poli, takže problematickou část snadno identifikujete:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Neplatné hodnoty pro pole typu enum / uzavřenou množinu hodnot (např. chatMemory.clientSummaryPromptType = "BOGUS") obsahují cestu k poli, odmítnutou hodnotu a seznam povolených hodnot:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Související
Informace o konverzačních endpointech a SSE streamování najdete v dokumentaci Bot Talk API.