Centar za pomoć
Chat API

Management API

Poslednje ažuriranje:

Pregled Management API-ja

Management API služi za pozadinske poslove koji ne uključuju slanje poruka na čatu:

  • programsko kreiranje bota pomoću POST /v1/management/bots
  • čitanje određenog bota u Vašem vlasništvu pomoću GET /v1/management/bots/{bot_id}
  • ažuriranje određenog bota pomoću PATCH /v1/management/bots/{bot_id}
  • čitanje potrošnje u okviru pretplate pomoću GET /v1/usage

Management ključevi su vezani za Vaš nalog, a ne za nekog određenog bota. Oni su namerno odvojeni od Bot Talk ključeva kako kompromitovani ključ za čet ne bi mogao da menja Vaše botove ili čita podatke o naplati.

Osnovni URL

https://api.chatlab.com/aichat

Sve krajnje tačke (endpoints) u ovom članku navedene su u odnosu na ovaj osnovni URL.

Prvi koraci

  1. Otvorite administratorsku aplikaciju i idite na Account Settings > Management API (Podešavanja naloga > Management API).
  2. Kliknite na Create Management Key (Kreiraj Management ključ), dajte mu naziv, opciono podesite belu listu IP adresa i ograničenje učestalosti zahteva (rate limit), a zatim pošaljite zahtev.
  3. Kopirajte ceo ključ iz iskačućeg prozora za potvrdu uspeha. Tekst ključa u čistom obliku prikazuje se samo jednom.

Ključ izgleda ovako: mk_abcdefghijklmnopqrstuvwxyz012345. Prefiks mk_ ga razlikuje od Bot Talk ključeva (ck_).

Autentifikacija

Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345

Slanje ključa sa mk_ na /v1/chat (ili bilo koju drugu Bot Talk krajnju tačku) vraća grešku 403 key_type_not_allowed. Slanje ključa sa ck_ na /v1/management/* vraća istu grešku.

Ograničenja

  • Najviše 5 aktivnih Management API ključeva po korisniku
  • Najviše 10 zahteva u minuti po ključu (token bucket, kapacitet 10, ravnomerno dopunjavanje od ~1 tokena na svakih 6 sekundi). Može se konfigurisati na nižu vrednost prilikom kreiranja - ako postavite manji rateLimitPerMinute, gornja granica opada, a brzina dopunjavanja se proporcionalno prilagođava.

Dozvole

Svaki Management ključ nosi bilo koji podskup od sledeće tri dozvole. Najmanje jedna mora biti izabrana prilikom kreiranja; u suprotnom, zahtev se odbija sa 400 invalid_request_error. Pozivanje krajnje tačke ključem koji nema potrebnu dozvolu vraća grešku 403 insufficient_permissions.

  • bot_read - potrebno za GET /v1/management/bots/{bot_id}
  • bot_management - potrebno za POST /v1/management/bots i PATCH /v1/management/bots/{bot_id}
  • usage - potrebno za GET /v1/usage

Struktura tela zahteva: ugnježdene sekcije koje odražavaju kartice administratorskog interfejsa

POST i PATCH prihvataju JSON telo grupisano u 13 sekcija. Svaka sekcija odgovara podkartici u bočnoj traci Bot Settings u administratorskoj aplikaciji, tako da su JSON ključevi i vidljive kartice usklađeni: ako promenite consent.humanSupportRequirePolicyAccept preko API-ja, videćete kako se isti prekidač menja na kartici Consent & Privacy (Pristanak i privatnost) u administratorskoj aplikaciji.

  • role - persona bota, sirovi prompt, dužina odgovora, jezik, kontekst veb-sajta / kompanije (kartica Role & Behavior)
  • conversation - poruka dobrodošlice, preciziranje upita, kontinuitet razgovora, prekidač za ocenjivanje + opisi (tooltips), sadržaj predloženih pitanja + dinamička dodatna pitanja (kartica Chat Conversation)
  • chatMemory - prekidač za memoriju četa, promptovi za rezimee, raspodela konteksta (kartica Summaries & Memory)
  • appearance - boje, tekstovi, dimenzije, prilagođeni CSS, ekran dobrodošlice, stilizovanje predloženih pitanja, ponašanje automatskog otvaranja, simulacija kucanja od strane čoveka, markdown u podnožju (kartica Appearance)
  • humanSupport - obrazac za kontakt sa operaterom (kartica Human Contact Form)
  • leadCollection - obrazac za prikupljanje lidova (kartica Lead Collection)
  • liveChat - preusmeravanje na čet uživo (kartica Live Chat)
  • consent - sva četiri prekidača za pristanak na politiku privatnosti plus tekst na ekranu pristanka (kartica Consent & Privacy)
  • whiteLabel - sakrivanje logotipa, prilagođeni link logotipa, hosting na prilagođenom domenu (kartica Whitelabel)
  • security - dozvoljeni domeni, filter neželjene pošte, ograničenja učestalosti razgovora (kartica Security)
  • voice - glasovni unos i glasovni razgovori: model, glas, jezici, prompt, ograničenje trajanja (kartica Voice Conversation)
  • multilingual - višejezični režim, osnovni jezik, ponuđeni jezici, upravljanje jezikom baze znanja (kartica Languages)
  • advanced - LLM model, temperatura, veličina konteksta, ograničenje poruka bota, interni lokalitet, Offer Cards (kartica Model & Advanced)

Samo se name nalazi na najvišem nivou, jer identifikuje bota umesto da pripada bilo kojoj pojedinačnoj kartici.

Bočna traka Bot Settings trenutno ima 15 podkartica, od kojih 13 odgovara gorenavedenim sekcijama. Dve podkartice koje nemaju odgovarajuću sekciju su Flow i Actions - obe su pokrivene u odeljku „Van opsega API-ja” u nastavku. Tih 13 koje se mapiraju jesu: Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation i Languages.

Telo zahteva i telo odgovora dele istu strukturu. Odgovor dodaje dva dodatna elementa:

  • meta - samo za čitanje: ID bota i vremenske oznake. Uklonite ga da biste odgovor GET zahteva pretvorili u validno telo za POST.
  • apiKey - prisutan samo pri kreiranju - novokreirani Bot Talk API ključ za novog bota.

Dva polja unutar deljene strukture su samo za čitanje - vraćaju se u odgovoru, a ignorišu se ako pokušate da ih pošaljete u POST/PATCH zahtevu:

  • appearance.avatarUrl - potpuno kvalifikovani javni URL slike avatara bota (npr. https://api.chatlab.com/aichat/content/avatar_xyz.png). Pošaljite direktan GET zahtev da preuzmete bajtove. Da biste ga promenili, otpremite novu datoteku putem višedelnog (multipart) segmenta avatar (pogledajte PATCH).
  • whiteLabel.whitelabelLogoUrl - potpuno kvalifikovani javni URL logotipa u zaglavlju za white-label. Isti obrazac kao i za avatarUrl. Da biste ga promenili, otpremite novu datoteku putem višedelnog (multipart) segmenta whitelabel_logo (pogledajte PATCH).

Oba URL-a koriste šemu + domen (host) + putanju konteksta trenutnog zahteva, pa se na white-label prilagođenom domenu vraćaju ukorenjeni na tom domenu (npr. https://api.acme.com/aichat/content/...).

Pošaljite null za sekciju da biste je preskočili u PATCH zahtevu; pošaljite null za polje unutar sekcije da biste preskočili to pojedinačno polje. Vrednost null na nivou polja nikada ne briše sačuvanu vrednost - ona samo znači „ne menjaj”.

Konstrukcija uloge i prompta

Sistemski prompt koji LLM zapravo prima gradi se na jedan od dva načina u zavisnosti od role.role. Poznavanje grane u kojoj se nalazite govori Vam koja su polja važna, a koja se čuvaju, ali ignorišu.

Grana A - role.role je CUSTOMER_SUPPORT, SALES ili LEAD_COLLECTION_AGENT (zasnovano na šablonu)

Bekend sastavlja prompt iz ugrađenog šablona i potpuno ignoriše role.rawPrompt (vrednost se i dalje čuva na botu, samo se ne koristi). Šablon uključuje sledeće:

  • role.role - oznaka uloge (npr. „Customer Support”) i uputstva specifična za ulogu koja se automatski dodaju
  • name - naziv bota, umetnut u uvodnu rečenicu
  • role.language - "Auto Detect" prebacuje bota da prati jezik korisnika; bilo koja druga vrednost (npr. "English", "Polish") postaje „Output in {language}, unless user uses another language”
  • role.responseLength - mapira se na ciljani broj reči: Concise ≈ 50 reči, Normal ≈ 100, Detailed ≈ 200
  • role.websiteAddress - opciono; kada nije prazno, dodaje se kao „for the users of the website {url}”
  • role.companyDescription - opciono; kada nije prazno, umeće se kao dodatni pasus pre uputstava za ulogu

Ovo je preporučena grana za većinu botova - dobijate ponašanje prilagođeno ulozi i bezbednosne mehanizme bez dodatnog truda.

Grana B - role.role je CUSTOM (prompt obezbeđuje pozivalac)

Bekend koristi role.rawPrompt doslovno kao ceo sistemski prompt. Polja responseLength, language, websiteAddress, companyDescription se čuvaju, ali se ne ubacuju u prompt - ako želite da se bilo šta od toga odrazi na ponašanje bota, morate to sami uneti u tekst Vašeg rawPrompt-a. Bezbednosni mehanizmi i smernice za ton komunikacije specifični za ulogu takođe se ne dodaju; Vi sami u potpunosti upravljate promptom.

Koristite CUSTOM samo kada prompt zasnovan na šablonu ne odgovara Vašem slučaju upotrebe (npr. potrebna Vam je persona izuzetno specifična za datu oblast, sopstvena bezbednosna ograničenja, nestandardni format odgovora).

Polja sa nabrajanjem (enum) / zatvorenim skupom vrednosti

Nekoliko polja prihvata samo fiksni skup tekstualnih vrednosti. Slanje bilo čega van liste odbija se sa 400 validation_failed uz putanju do polja u error.param. Vrednosti razlikuju velika i mala slova (case-sensitive).

  • role.role - CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.language - pun engleski naziv jezika iz padajućeg menija u administraciji, npr. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi i još oko 80 drugih. Vrednost se čuva doslovno i unosi u šablon prompta, tako da dvoslovni ISO kodovi (en, pl) i druge vrednosti koje nisu na listi neće biti odbijeni od strane API-ja, ali će proizvesti nepravilno uputstvo poput „Output in en, unless...”. Podrazumevano je Auto Detect kada se izostavi pri kreiranju.
  • advanced.model - pogledajte „AI tekstualni modeli” ispod; skup koji se može izabrati zavisi od ograničenja Vašeg naloga, a svaka vrednost koju Vaš nalog ne može da koristi vraća 400 invalid_parameter
  • advanced.chatContextSize - 8000, 16000, 32000. Zavisi od ograničenja Vašeg naloga; veće vrednosti se automatski i tiho svode na dozvoljenu granicu
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - logički prekidač (boolean). true primorava korisnika da popuni formular za lidove pre započinjanja razgovora; false prepušta AI-ju da odluči kada će prikazati obrazac (podrazumevano).

Struktuirana polja i opsezi

Polja koja izgledaju kao obični tekstualni nizovi ili brojevi, ali zapravo imaju specifične oblike, opsege ili osobenosti u administratorskom interfejsu koje vredi poznavati.

  • advanced.temperature - prihvaćeni opseg je od 0.0 do 1.0, što odgovara klizaču u administratorskom interfejsu. Vrednosti van ovog opsega se odbijaju sa 400 validation_failed.

  • chatMemory.summariesToKnowledgeRatio - ceo broj kao procenat, 10-90 sa korakom 10. Kontroliše koliki deo konteksta četa je rezervisan za istorijske rezimee klijenta u odnosu na ostatak (baza znanja, trenutni razgovor, uputstva). Podrazumevano je 50. Vrednosti van opsega 10-90 se odbijaju sa 400 validation_failed. Primenjuje se samo kada je chatMemory.enabled=true I chatMemory.summaryConversationsEnabled=true.

  • liveChat.schedule - JSON kodiran kao string, a ne ugnježdeni JSON objekat u mrežnom prenosu. Server čuva sirovi string doslovno; administratorski interfejs ga raščlanjuje na strani klijenta prilikom prikazivanja uređivača rasporeda. Kada se raščlani, string sadrži po jedan unos za svaki dan u sedmici plus ključ timezone:

    • ključ svakog dana u sedmici (monday-sunday) mapira se na {enabled: boolean, from: "H:MM", to: "H:MM"} u 24-časovnom formatu
    • timezone je IANA naziv vremenske zone (npr. "Europe/Belgrade", "America/New_York")

    Primer vrednosti (obratite pažnju na spoljašnje navodnike i izbegnute unutrašnje navodnike - to je jedno tekstualno polje, a ne ugnježdeni objekat):

    "{\"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\"}"
    

    Van navedenog radnog vremena, posetiocu se prikazuje liveChat.outOfHoursMessage i preusmeravanje na čet uživo je onemogućeno. Validacija unutrašnje strukture izvršava se samo na strani klijenta u administratorskom interfejsu - neispravan JSON ili neprepoznate ključeve API prihvata kao običan string, a problem će se pojaviti kao greška pri prikazivanju kada čovek kasnije otvori bota u administraciji. Proverite strukturu na svojoj strani pre slanja.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - kratke oznake koje se prikazuju na dugmadima 👍 / 👎 pored svakog AI odgovora kada je conversation.conversationRatingEnabled=true. Podrazumevani tekst je „I like the response” / „I don't like the response”. Vidljivo krajnjim korisnicima.

  • whiteLabel.hideRoboAssistLogo - white-label funkcionalnost, u zavisnosti od ograničenja Vašeg naloga. Sakriva tekst „Powered by ChatLab” u podnožju. Ako Vaš nalog ne uključuje white-label mogućnosti, vrednost se čuva, ali se ignoriše i podnožje se uvek prikazuje.

  • whiteLabel.whitelabelLogoLink - white-label funkcionalnost, u zavisnosti od ograničenja Vašeg naloga. URL na koji vodi klik na prilagođeni logotip kada je hideRoboAssistLogo=true i kada je datoteka prilagođenog logotipa otpremljena putem višedelnog (multipart) segmenta whitelabel_logo.

  • appearance.simulateHumanTypingDelay - sekunde (ne milisekunde), ceo broj 0-200. Pauza između uzastopnih oblačića sa porukama bota kada je simulateHumanTyping=true. Podrazumevano je 5.

  • appearance.autoOpenChatDelaySeconds - sekunde, ceo broj. Vreme čekanja pre nego što se vidžet automatski otvori kada je autoOpenChat=true i autoOpenChatDelay=true.

  • advanced.internalLocale - IETF kod lokaliteta i regiona u formatu ll_CC (sa donjom crtom, NE ll-CC sa crticom). Prihvaćene vrednosti dolaze sa fiksne liste od ~95 lokaliteta: 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_IL i mnogih drugih. Slanje samo dvoslovnog koda ("en") ili BCP-47 ("en-US") nije na listi dozvoljenih. Podrazumevano je en_US. Ovo je lokalitet koji se koristi za formatiranje datuma/brojeva u okviru vidžeta i razlikuje se od role.language (jezika na kojem bot generiše odgovore u razgovoru).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - celi brojevi (šalju se kao JSON brojevi, npr. 30, a ne "30"). 0 onemogućava ograničenje učestalosti po IP adresi. Kada je vrednost različita od nule, vidžet dozvoljava N poruka tokom zadatog trajanja u sekundama pre nego što posetiocu prikaže security.talkMessagesRateLimitHitMessage.

  • advanced.botMessagesLimit - ceo broj (JSON broj, npr. 1000). 0 znači „bez ograničenja”; u suprotnom mora biti umnožak broja 1000 (1000, 2000, 10000, ...). Vrednosti poput 100 ili 1500 se odbijaju sa 400 validation_failed. Nakon toga se vrednost automatski i tiho svodi na gornju granicu Vašeg naloga.

AI tekstualni modeli (advanced.model)

Pošaljite tačnu vrednost za API (leva kolona označena apostrofima). Prikazani naziv u administratorskom interfejsu nalazi se u zagradi. Ograničenja Vašeg naloga određuju koji podskup možete da izaberete; slanje modela koji Vaš nalog ne može da koristi vraća 400 invalid_parameter. Podrazumevani model za nove botove je 5-MINI.

  • 4-O-MINI (GPT 4-o mini)
  • 4-O (GPT 4-o)
  • 4.1-MINI (GPT 4.1-mini)
  • 4.1 (GPT 4.1)
  • 5-MINI (GPT 5-mini)
  • 5 (GPT 5)
  • 5.1 (GPT 5.1)
  • 5.4-MINI (GPT 5.4-mini)
  • 5.4 (GPT 5.4)
  • 5.5 (GPT 5.5)
  • GEMINI 2.5 PRO (Gemini 2.5 Pro)
  • GEMINI 3 Flash (Gemini 3 Flash)
  • GEMINI 3.5 Flash (Gemini 3.5 Flash)
  • GEMINI 3.7 Flash (Gemini 3.7 Flash)
  • GEMINI 3.8 Flash (Gemini 3.8 Flash)
  • GEMINI 3.1 Flash-Lite (Gemini 3.1 Flash-Lite)
  • GEMINI 3 PRO (Gemini 3 Pro)

Referenca polja (puna šema zahteva)

Svako polje u prenosu podataka, sa svojim tipom, ograničenjem i opisom u jednom redu. PATCH semantika: svako izostavljeno polje (ili poslato kao null) ostavlja sačuvanu vrednost nepromenjenom. Isti oblik se koristi i za odgovor (minus multipart binarni sadržaj; plus blok meta samo za čitanje na svakom odgovoru i apiKey isključivo na odgovoru za kreiranje).

Najviši nivo

Polje Tip Ograničenje Opis
name string maks. 150, obavezno pri kreiranju Prikazano ime bota
role object Pogledajte § role
conversation object Pogledajte § conversation
chatMemory object Pogledajte § chatMemory
appearance object Pogledajte § appearance
humanSupport object Pogledajte § humanSupport
leadCollection object Pogledajte § leadCollection
liveChat object Pogledajte § liveChat
consent object Pogledajte § consent
whiteLabel object Pogledajte § whiteLabel
security object Pogledajte § security
advanced object Pogledajte § advanced

Dodaci koji se nalaze samo u odgovoru:

  • meta: { id, createdAt, updatedAt } - samo za čitanje.
  • apiKey - string, prisutan samo u odgovoru za POST /v1/management/bots - sveže generisani Bot Talk ključ za novog bota, vraća se tačno jednom.

§ role

Polje Tip Ograničenje Opis
role string (enum) CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM Unapred podešena persona; bira šablon prompta (pogledajte „Role and prompt construction”)
language string puni engleski naziv jezika (English, Polish, ...) ili Auto Detect Primarni jezik koji se prosleđuje u šablon prompta
responseLength string ∈ {Concise, Normal, Detailed} Željena opširnost AI odgovora
websiteAddress string Veb-sajt koji se koristi za kontekst prompta
companyDescription string Opis kompanije koji se koristi za kontekst prompta
rawPrompt string Prilagođeni sistemski prompt - koristi se doslovno samo kada je role=CUSTOM

§ conversation

Polje Tip Ograničenje Opis
welcomeMessage string Prva poruka prikazana posetiocu prilikom otvaranja
queryRefinementEnabled boolean Ako je tačno, precizira pitanje posetioca pre RAG pretrage
conversationContinuityEnabled boolean Ako je tačno, posetioci koji se vraćaju nastavljaju svoj poslednji razgovor
conversationRatingEnabled boolean Ako je tačno, prikazuje ocenjivanje palcem nagore/nadole na porukama bota
positiveRatingTooltip string Opis alatke (tooltip) na dugmetu za pozitivnu ocenu
negativeRatingTooltip string Opis alatke na dugmetu za negativnu ocenu
suggestedQuestions string Predložena pitanja / pokretači razgovora razdvojeni novim redom
dynamicSuggestedFollowups boolean Ako je tačno, AI predlaže dodatna pitanja nakon svakog odgovora
dynamicFollowupsAutoIcons boolean Ako je tačno, AI automatski bira emodži ikonice za dinamička dodatna pitanja

§ chatMemory

Polje Tip Ograničenje Opis
enabled boolean Glavni prekidač za funkciju memorije ćaskanja
summaryConversationsEnabled boolean Čuvanje rezimea pojedinačnih razgovora
conversationSummaryPrompt string Prilagođeni prompt koji se koristi za rezimiranje svakog razgovora
conversationSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Da li se koristi podrazumevani ili prilagođeni prompt za rezime
clientSummaryPrompt string Prilagođeni prompt koji se koristi za profilisanje klijenta kroz razgovore
clientSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Podrazumevani naspram prilagođenog prompta za profil klijenta
summariesToKnowledgeRatio int 10-90, korak 10 % kontekstnog prozora ćaskanja dodeljen rezimeima naspram RAG baze znanja

§ appearance

Polje Tip Ograničenje Opis
launcherColor string (hex) Boja pozadine pokretača (ikonice za ćaskanje)
headerColor string (hex) Boja pozadine zaglavlja ćaskanja
titleColor string (hex) Boja naslova u zaglavlju ćaskanja
subtitleColor string (hex) Boja podnaslova u zaglavlju ćaskanja
clientMessageBubbleColor string (hex) Boja oblačića sa porukom posetioca
clientMessageTextColor string (hex) Boja teksta poruke posetioca
responseMessageBubbleColor string (hex) Boja oblačića sa odgovorom bota
responseMessageTextColor string (hex) Boja teksta odgovora bota
chatSubheader string Slogan prikazan ispod naslova ćaskanja
senderPlaceholder string Tekst čuvara mesta (placeholder) u polju za unos poruke
resetConversationTooltip string Opis alatke na dugmetu za resetovanje razgovora
chatAlignment string (enum) ∈ {left, right} Strana ekrana uz koju se ćaskanje fiksira
launcherBottomMargin int 0-500 Udaljenost pokretača od donje ivice (px)
launcherSideMargin int 0-500 Udaljenost pokretača od bočne ivice (px)
displayShadow boolean Senka ispod vidžeta
customCss string Izvorni CSS ubačen u iframe vidžeta
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Način na koji se otvaraju linkovi unutar poruka bota
minimizedDisplayMode string (enum) ∈ {icon, minified} Minimizovano stanje: ikonica pokretača ili kompaktna traka za unos
chatDesktopWidthPx int Širina vidžeta na desktopu
chatDesktopHeightPx int Visina vidžeta na desktopu
chatMobileSizePercent int Veličina vidžeta na mobilnim uređajima kao % vidnog polja (viewport)
messageFontSize int Veličina fonta teksta poruke (px)
showChatbotBubblesDesktop boolean Prikaz plutajućih uvodnih oblačića na desktopu
showChatbotBubblesMobile boolean Prikaz plutajućih uvodnih oblačića na mobilnim uređajima
chatbotBubblesDelaySeconds int Kašnjenje pre nego što se pojave uvodni oblačići (sekunde)
launcherIconFullSize boolean Prikaz prilagođene ikonice pokretača od ivice do ivice umesto sa unutrašnjim razmakom
welcomeScreenEnabled boolean Prikaz početnog ekrana Welcome Screen umesto direktnog prelaska na ćaskanje
welcomeScreenQuestionsLabel string Oznaka iznad predloženih pitanja na početnom ekranu
welcomeScreenHideHumanContactForm boolean Sakrivanje opcije za kontakt obrazac sa ljudskom podrškom u zaglavlju dok je prikazan Welcome Screen. Ponovo se pojavljuje nakon prve poruke posetioca. Za botove kreirane pre 2026-09-02 podrazumevana vrednost je true
welcomeScreenHideLiveChat boolean Sakrivanje opcije za ćaskanje uživo u zaglavlju dok je prikazan Welcome Screen. Ponovo se pojavljuje nakon prve poruke posetioca. Za botove kreirane pre 2026-09-02 podrazumevana vrednost je true
headerActionsLayout string DROPDOWN Način na koji su ćaskanje uživo i kontakt obrazac ponuđeni u zaglavlju ćaskanja: ICONS (zasebna ikonica za svaku opciju) ili DROPDOWN (grupisano u meniju zaglavlja). Za botove kreirane pre 2026-09-02 podrazumevana vrednost je ICONS
stackSuggestedQuestions boolean Ređanje predloženih pitanja vertikalno jedno ispod drugog (naspram jedno pored drugog)
suggestedQuestionsFontSize int Veličina fonta elemenata sa predloženim pitanjima (px)
suggestedQuestionsTextColor string (hex) Boja teksta elementa sa predloženim pitanjem
suggestedQuestionsBackgroundColor string (hex) Boja pozadine elementa sa predloženim pitanjem
autoOpenChat boolean Automatsko otvaranje ćaskanja na desktopu
autoOpenChatOnMobiles boolean Automatsko otvaranje ćaskanja na mobilnim uređajima
autoOpenChatDelay boolean Korišćenje vremenskog odlaganja pre automatskog otvaranja
autoOpenChatDelaySeconds int Vreme odlaganja automatskog otvaranja (sekunde)
simulateHumanTyping boolean Deljenje odgovora bota na oblačiće uz animaciju kucanja
simulateHumanTypingDelay int 0-200 Kašnjenje između poruka u oblačićima (sekunde)
footerMarkdown string maks. 255 Prilagođeni markdown podnožja koji se prikazuje ispod ćaskanja
avatarUrl string samo za čitanje Potpuno kvalifikovani javni URL avatara; da biste ga promenili, pošaljite datoteku putem multipart dela avatar

Multipart pri POST/PATCH: avatar (deo sa datotekom). GET / tela odgovora izostavljaju sadržaj datoteke - u prenosu se šalje samo URL.

§ humanSupport

Polje Tip Ograničenje Opis
enabled boolean Prekidač toka ljudske podrške
email string obavezno (create-strict) kada je enabled=true Adresa koja prima imejlove ljudske podrške
dialogMessage string Poruka ohrabrenja prikazana iznad obrasca
thankYouMessage string Potvrda prikazana nakon slanja
emailMessageSubjectTemplate string Šablon naslova imejla koji se šalje agentu
emailMessageContentTemplate string Šablon tela imejla koji se šalje agentu
emailPlaceholder string Čuvar mesta u polju za unos imejla
messagePlaceholder string Čuvar mesta u polju za unos poruke
emailWithConversationContent boolean Ako je tačno, uključuje transkript razgovora u telo imejla
customFormId long id postojećeg prilagođenog obrasca Zamena ugrađenog kontakt obrasca prilagođenim obrascem. null zadržava ugrađeni obrazac
customFormMapping string JSON kodirani string Mapira polja prilagođenog obrasca na polja imejla ljudske podrške

requirePolicyAccept se nalazi u consent.humanSupportRequirePolicyAccept, a ne ovde.

§ leadCollection

Polje Tip Ograničenje Opis
enabled boolean Prekidač obrasca za prikupljanje lidova
nameEnabled boolean Prikupljanje imena
nameLabel string Oznaka na polju za unos imena
emailEnabled boolean Prikupljanje imejla
emailLabel string obavezno (create-strict) kada je enabled=true I emailEnabled=true Oznaka na polju za unos imejla
phoneEnabled boolean Prikupljanje telefona
phoneLabel string obavezno (create-strict) kada je enabled=true I phoneEnabled=true Oznaka na polju za unos telefona
leaveDetailsMessage string obavezno (create-strict) kada je enabled=true Poruka koja podstiče posetioca da ostavi svoje podatke
thankYouMessage string obavezno (create-strict) kada je enabled=true Potvrda prikazana nakon slanja
requireBeforeNewConversation boolean Ako je true, obrazac se mora poslati pre početka ćaskanja; ako je false, AI odlučuje kada će prikazati obrazac
emailNotificationEnabled boolean Slanje imejla vlasniku svaki put kada se prikupi lid
emailNotificationAddress string Primalac obaveštenja (podrazumevano je imejl naloga)
emailWithConversationContent boolean Ako je tačno, uključuje transkript razgovora u obaveštenje

Unakrsno pravilo pri kreiranju (create-strict): enabled=true zahteva da barem jedno od polja emailEnabled ili phoneEnabled bude omogućeno. requirePolicyAccept se nalazi u consent.leadCollectionRequirePolicyAccept, a ne ovde.

| customFormId | long | id postojećeg prilagođenog obrasca | Zamena ugrađenog obrasca za lidove prilagođenim obrascem. null zadržava ugrađeni obrazac | | customFormMapping | string | JSON kodirani string | Mapira polja prilagođenog obrasca na ime / imejl / telefon |

§ liveChat

Polje Tip Ograničenje Opis
enabled boolean Prekidač funkcije Live Chat (ćaskanje uživo)
infoMessage string Objašnjenje prikazano pre preusmeravanja
startMessage string Poruka prikazana kada sesija uživo počne
endMessage string Poruka prikazana kada se sesija uživo završi
nameLabel string Oznaka na polju za unos imena u obrascu pre ćaskanja uživo
emailLabel string Oznaka na polju za unos imejla u obrascu pre ćaskanja uživo
schedule string JSON kodirani string (prekidači po danima + from/to + timezone) Radno vreme za ćaskanje uživo - pogledajte „Structured fields and ranges” za tačan format
outOfHoursMessage string Poruka prikazana van radnog vremena
closeModalMessage string Naslov modalnog prozora „zatvoriti ćaskanje uživo?”
closeModalConfirmLabel string Oznaka dugmeta za potvrdu u modalnom prozoru za zatvaranje
closeModalCancelLabel string Oznaka dugmeta za otkazivanje u modalnom prozoru za zatvaranje
closeModalTooltipText string Opis alatke na dugmetu za zatvaranje ćaskanja
operatorHasJoinedLabel string Oznaka prikazana kada se operater pridruži
operatorDidNotJoinInTimeLabel string Oznaka prikazana ako se nijedan operater ne pridruži u predviđenom roku
waitingForOperatorToJoinLabel string Oznaka prikazana tokom čekanja na operatera
waitingForOperatorSeconds int Vreme čekanja da operater prihvati razgovor (sekunde)
redirectToHumanSupportForm boolean Ako je tačno, preusmerava na kontakt obrazac ljudske podrške kada se nijedan operater ne javi
missedEmailEnabled boolean podrazumevano true Slanje imejla vlasniku bota kada zahtev za ćaskanje uživo ostane neodgovoren. Kod starijih botova nije postavljeno, što se tumači kao omogućeno

requirePolicyAccept se nalazi u consent.liveChatRequirePolicyAccept, a ne ovde.

§ consent

Polje Tip Ograničenje Opis
newConversationRequirePolicyAccept boolean Zahtevanje pristanka na politiku privatnosti pre započinjanja novog razgovora
humanSupportRequirePolicyAccept boolean Zahtevanje pristanka na politiku privatnosti pre slanja obrasca za ljudsku podršku
leadCollectionRequirePolicyAccept boolean Zahtevanje pristanka na politiku privatnosti pre slanja obrasca za prikupljanje lidova
liveChatRequirePolicyAccept boolean Zahtevanje pristanka na politiku privatnosti pre započinjanja sesije ćaskanja uživo
newConversationConsentDescription string Uvodni tekst na ekranu za pristanak pri pokretanju razgovora
privacyPolicyConsentCheckboxLabel string Oznaka pored polja za potvrdu pristanka (obično sadrži link ka politici privatnosti)

§ whiteLabel

Polje Tip Ograničenje Opis
hideRoboAssistLogo boolean White Label mogućnost; zavisi od ograničenja naloga Sakrivanje podrazumevanog ChatLab logotipa u podnožju
whitelabelLogoLink string White Label mogućnost; zavisi od ograničenja naloga URL na koji vodi prilagođeni logotip u podnožju
assignToCustomDomain boolean uslovljeno funkcijom CUSTOM_DOMAIN Hostovanje ćaskanja na podešenom prilagođenom domenu
whitelabelLogoUrl string samo za čitanje Potpuno kvalifikovani javni URL White Label logotipa; da biste ga promenili, pošaljite ga putem multipart dela whitelabel_logo

Multipart pri POST/PATCH: whitelabel_logo (deo sa datotekom). GET / tela odgovora izostavljaju sadržaj datoteke - u prenosu se šalje samo URL.

§ security

Polje Tip Ograničenje Opis
allowedDomains string Spisak domena razdvojenih zarezom kojima je dozvoljeno ugrađivanje vidžeta (prazno = bez liste dozvoljenih)
spamFilterEnabled boolean Omogućavanje filtera neželjene pošte za dolazne poruke na nivou bota
countryFilterMode string BLACKLIST ili WHITELIST Način na koji se tumače liste zemalja. Same liste ostaju dostupne samo administratorima
talkMessagesRateLimit int >= 0; 0 onemogućava Maksimalan broj korisničkih poruka dozvoljenih u vremenskom okviru ograničenja
talkMessagesRateLimitDurationSeconds int >= 0 Dužina vremenskog okvira za ograničenje učestalosti (sekunde)
talkMessagesRateLimitHitMessage string Poruka prikazana posetiocu kada se dostigne ograničenje učestalosti

§ voice

Polje Tip Ograničenje Opis
inputEnabled boolean Omogućavanje posetiocu da diktira poruke (govor u tekst)
conversationEnabled boolean zahteva glasovnu funkciju u planu Omogućavanje potpunih glasovnih razgovora
voiceId string ID glasa specifičan za provajdera (npr. alloy) Sintetički glas koji govori
model string npr. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* Glasovni model. Tarifira se po minutu, cene se razlikuju po modelu
turnDetection string specifično za provajdera Režim smenjivanja govornika
audioPrompt string Dodatni sistemski prompt koji se koristi samo za glasovne segmente
welcomeMessage string Izgovorena uvodna rečenica
language string kod jezika Primarni glasovni jezik
additionalLanguages string kodovi jezika razdvojeni zarezom Dodatni jezici koje glasovni agent prihvata
maxDurationSeconds int Strogo ograničenje trajanja pojedinačnog glasovnog razgovora
maxDurationMessage string Poruka prikazana kada se dostigne maksimalno trajanje

§ multilingual

Polje Tip Ograničenje Opis
enabled boolean Prekidač višejezičnog režima
mode string AUTODETECT ili režim fiksne liste Način na koji bot bira jezik za odgovor
baseLanguage string kod jezika Jezik na kojem su napisani tekstovi samog bota
languages string kodovi jezika razdvojeni zarezom Jezici ponuđeni posetiocu
knowledgeLanguageMode string Način na koji se tretira znanje na drugim jezicima
knowledgeLanguageFallback string kod jezika Jezik koji se koristi kada nema pronađenog podudaranja

§ advanced

Polje Tip Ograničenje Opis
model string zavisi od ograničenja naloga; pogledajte odeljak „AI text models” iznad Identifikator LLM modela (npr. 5-MINI)
temperature decimal 0.0-1.0 Temperatura uzorkovanja (odgovara klizaču u korisničkom interfejsu)
chatContextSize int ∈ {8000, 16000, 32000}; automatski se prilagođava ograničenju vašeg naloga Veličina kontekstnog prozora u tokenima za istoriju ćaskanja
botMessagesLimit long 0 ili umnožak broja 1000 (npr. 1000, 2000, 10000) Maksimalan broj odgovora bota po razgovoru (0 = bez ograničenja)
internalLocale string kod lokaliteta u obliku ll_CC Lokalitet za oznake interfejsa vidžeta (razlikuje se od role.language)
productsViewEnabled boolean Ako je tačno, prikazuje e-commerce Offer Cards unutar ćaskanja
includeProductsInKnowledgeBase boolean Ako je tačno, indeksira katalog proizvoda kao deo baze znanja

Van opsega API-ja

Administratorski interfejs sadrži nekoliko oblasti koje namerno nisu izložene u ovoj verziji Management API-ja:

  • Kartica Flow (Tok) - vizuelni Flow Editor (uređivač toka razgovora - faze i prelazi). Nije izloženo putem Management API-ja.
  • Kartica Actions (Radnje) - integracije za e-commerce / rezervacije, AI Search i prilagođene API funkcije. Pozivanje alata nikada nije bilo deo Management API-ja.
  • Sam kreator prilagođenih obrazaca - kreiranje i uređivanje prilagođenih obrazaca nije podržano. Međutim, možete dodeliti postojeći obrazac botu putem leadCollection.customFormId i humanSupport.customFormId.
  • Prilagođene ikonice za otvaranje / zatvaranje ćaskanja - customLauncherIconVisible, openChatIcon, closeChatIcon. API izlaže samo glavne multipart elemente avatar i whitelabel_logo.
  • Liste IP adresa i zemalja - sami unosi su rezervisani isključivo za administratore. Izložen je samo način interpretacije, putem security.countryFilterMode.

Endpoints (Krajnje tačke)

POST /v1/management/bots

Kreirajte novog bota. Prihvataju se dva ekvivalentna Content-Type zaglavlja; izaberite ono koje Vam više odgovara.

Režim A - običan JSON (preporučuje se kada ne morate da otpremate avatar / logotip u istom zahtevu):

  • Content-Type: application/json
  • Telo zahteva jeste konfiguracioni JSON bota (nema omotača data)
  • Fajlovi (avatar / logotip) se mogu otpremiti kasnije putem drugog PATCH zahteva koristeći režim B

Režim B - multipart/form-data (koristite prilikom otpremanja fajlova u istom zahtevu):

  • Content-Type: multipart/form-data; boundary=...
  • data JSON deo (obavezno, Content-Type: application/json) - konfiguracija bota u ugnježdenom formatu opisanom iznad
  • avatar fajl deo (opciono) - slika avatara bota
  • whitelabel_logo file deo (opciono) - white-label logotip (primenjuje se samo ako Vaš nalog uključuje White Label)

Samo je name obavezno u JSON-u; sva ostala polja dobijaju iste podrazumevane vrednosti koje bi postavio čarobnjak u administratorskom interfejsu.

Puno telo zahteva

Ovo je maksimalni data JSON - gde je svaki odeljak popunjen. Pošaljite samo one odeljke koji su Vam važni; sve ostalo preuzima podrazumevane vrednosti.

{
  "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-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  }
}

Pravila validacije sa sopstvenim porukama o greškama:

  • name - obavezno, najviše 150 znakova
  • advanced.temperature - između 0.0 i 1.0
  • chatMemory.summariesToKnowledgeRatio - ceo broj između 10 i 90 (procenat, korak 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - između 0 i 500
  • appearance.footerMarkdown - najviše 255 znakova
  • humanSupport.enabled=true zahteva da polje humanSupport.email bude postavljeno
  • leadCollection.enabled=true zahteva da barem jedno od polja leadCollection.emailEnabled ili leadCollection.phoneEnabled ima vrednost true; kanal koji je uključen takođe zahteva svoju oznaku, kao i polja leaveDetailsMessage i thankYouMessage
  • Polja sa gornjom granicom (advanced.chatContextSize, advanced.botMessagesLimit, itd.) automatski se i bez obaveštenja prilagođavaju limitima Vašeg naloga

Polja čija je vrednost null na serveru izostavljaju se iz JSON tela - preko mreže se prenose samo polja sa vrednostima koje nisu null.

Puno telo odgovora (201)

Isti format kao i zahtev, uz dodatak read-only bloka meta i jednokratnog ključa apiKey na najvišem nivou. Read-only URL adrese fajlova (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) server popunjava kada su odgovarajući multipart delovi otpremljeni.

{
  "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-MINI",
    "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"
}

Polje apiKey se pojavljuje samo prilikom kreiranja - to je novokreirani Bot Talk ključ povezan sa novim botom. Čist tekst se prikazuje samo jednom i ne može se naknadno preuzeti iz API-ja; sačuvajte ga odmah na svojoj strani.

Zaglavlje odgovora Location sadrži URL novog bota (/v1/management/bots/{id}).

Curl primeri

Režim A - običan JSON (najjednostavniji):

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 sa avatarom:

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}

Vraća trenutnu konfiguraciju bota čiji ste vlasnik.

Curl primer

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..."

Puno telo odgovora (200)

Isti format kao i POST odgovor, bez jednokratnog ključa apiKey. Blok meta je uključen. Vraća 404 not_found_error ako bot ne postoji ili ne pripada Vašem nalogu.

Trenutni avatar i white-label logotip prikazani su kao potpuno kvalifikovane read-only URL adrese (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - koje potiču iz iste scheme + host + context path strukture koja je obradila ovaj zahtev. Preuzmite bajtove direktnim slanjem GET zahteva na te URL adrese; da biste zamenili bilo koji od fajlova, otpremite novi putem multipart dela avatar / whitelabel_logo u okviru PATCH zahteva. Ova URL polja se ignorišu ako se pošalju u telu zahteva.

{
  "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-MINI",
    "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"
  }
}

Kloniranje bota

Telo zahteva za POST /v1/management/bots i telo odgovora za GET /v1/management/bots/{bot_id} imaju isti oblik, tako da je kloniranje proces u tri koraka: pošaljite GET zahtev za izvorni bot, uklonite polja identifikacije kojima upravlja server i pošaljite rezultat putem POST zahteva.

1. Pošaljite GET zahtev za izvorni bot.

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -o source-bot.json

2. Uklonite meta blok najvišeg nivoa. Objektom meta (id, createdAt, updatedAt) upravlja server i on je samo za čitanje - ako ga ostavite u telu POST zahteva, to neće napraviti problem (server ga ignoriše), ali njegovo uklanjanje jasno izražava nameru i održava sadržaj čistim. Opciono izmenite name kako bi se klon razlikovao od izvornog bota.

jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json

3. Pošaljite pročišćeno telo putem POST zahteva da biste kreirali klon. Pogledajte referencu za POST /v1/management/bots iznad za kompletan oblik tela i pravila validacije.

curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
  -H "Authorization: Bearer mk_..." \
  -H "Content-Type: application/json" \
  -d @clone-body.json

Odgovor sadrži meta.id novog bota, kao i novoizgenerisani apiKey (Bot Talk ključ za klon). Čist tekst vrednosti apiKey vraća se samo u ovom odgovoru na kreiranje - kopirajte ga pre nego što odbacite telo odgovora; kasnije se više ne može preuzeti.

Dve napomene:

  • Datoteke se ne kloniraju. Polja appearance.avatarUrl i whiteLabel.whitelabelLogoUrl služe samo za čitanje i pokazuju na datoteke izvornog bota. Ako su vam na klonu potrebni isti avatar ili white-label logotip, preuzmite bajtove sa izvornih URL adresa i otpremite ih kao višedelne (multipart) delove avatar / whitelabel_logo - bilo prilikom POST zahteva za kreiranje (Režim B) ili u naknadnom PATCH zahtevu.
  • Bot Talk ključevi se ne kloniraju. Svaki bot ima svoj skup Bot Talk ključeva. Jedini apiKey vraćen u POST zahtevu za kreiranje jeste onaj koji se generiše automatski; ako je potrebno, kreirajte dodatne ključeve na kartici API (API) bota.

PATCH /v1/management/bots/{bot_id}

Ažurirajte jedno ili više polja na botu koji posedujete. Menjaju se samo sekcije / polja prisutna u JSON-u; sve što je izostavljeno (ili poslato kao null) ostaje netaknuto. Semantika delimičnog ažuriranja primenjuje se po polju unutar poslate sekcije.

Prihvataju se dva ekvivalentna Content-Type zaglavlja (isto kao i kod POST):

Režim A - običan JSON (preporučuje se kada ažurirate samo podešavanja):

  • Content-Type: application/json
  • Telo zahteva jeste patch JSON (bez omotača data)

Režim B - multipart/form-data (koristi se prilikom otpremanja datoteka):

  • data JSON deo (opciono) - patch izmena. Šaljite samo ako želite da promenite polja. Izostavite u potpunosti ako želite samo da otpremite avatar ili logotip.
  • avatar deo datoteke (opciono) - zamenjuje avatar
  • whitelabel_logo deo datoteke (opciono) - zamenjuje white-label logotip (primenjuje se samo ako vaš nalog uključuje funkciju white-label)

Sva tri dela su opciona u PATCH zahtevu, ali barem jedan mora biti prisutan da bi poziv imao smisla.

Puno telo zahteva (maksimalni opseg)

Bilo koje polje koje prihvata POST /v1/management/bots može se poslati i ovde. Primer u nastavku predstavlja puni opseg; u praksi šaljete samo ključeve koje želite da promenite (pogledajte odeljak „Minimalno delimično ažuriranje” niže) - svaki ključ koji je izostavljen (ili poslat kao null) ostavlja sačuvanu vrednost netaknutom.

{
  "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
  }
}

Minimalno delimično ažuriranje

Ažurirajte jedno polje putem PATCH zahteva tako što ćete poslati tačno one ključeve koje želite da promenite - sve ostalo ostaje sačuvano.

{
  "appearance": {
    "launcherColor": "#abcdef"
  }
}

Primeri sa cURL-om

Režim A - običan JSON (najjednostavniji):

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 (prilikom zamene avatara / logotipa):

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 - zamena samo avatara (bez promena polja):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -F 'avatar=@./new-avatar.png'

Telo odgovora (200)

Isti oblik kao i kod GET /v1/management/bots/{bot_id} - kompletna konfiguracija bota nakon što je patch primenjen, uključujući i blok meta. Nema polja apiKey. Vraća 404 not_found_error ako bot ne postoji ili ne pripada vašem nalogu.

Primer u nastavku prikazuje odgovor nakon primene izmene iz odeljka Puno telo zahteva (maksimalni opseg) iznad na bot iz GET primera - promenjena polja odražavaju nove vrednosti, netaknuta polja su sačuvana, a polje meta.updatedAt se ažurira.

{
  "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

Očitajte trenutnu potrošnju pretplate za nalog koji poseduje Management ključ.

Telo odgovora (200)

{
  "subscriptionType": "standard",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • subscriptionType je identifikator trenutnog plana naloga napisan malim slovima (npr. standard u primeru). Planovi potiču iz dinamičkog kataloga, tako da se tačan skup identifikatora može menjati tokom vremena kako se planovi preimenuju ili dodaju - tretirajte ovo kao neproziran string (opaque string), a ne kao fiksni enum.
  • messages.used / limit / remaining predstavljaju kredite za poruke u tekućem obračunskom periodu.
  • bots.used / limit / remaining broje aktivne botove u odnosu na ograničenje botova za vaš nalog.

Zaglavlja ograničenja stope (rate limit)

Odgovori koji stignu do faze provere ograničenja stope (tj. autentifikacija i bela lista IP adresa su prošle) sadrže:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - ograničenje po ključu koje je stvarno primenjeno na ovaj poziv (podrazumevano 10, ili Vaš konfigurisani rateLimitPerMinute ako je niži).
  • X-RateLimit-Remaining - preostali tokeni u skladištu (bucket) odmah nakon ovog poziva.
  • X-RateLimit-Reset - Unix epoha u sekundama kada sledeći token postaje dostupan (ne potpuno resetovanje skladišta; skladište se neprekidno dopunjava). Kada je skladište puno, ovo je trenutno vreme.

Pri odgovorima 429 rate_limit_exceeded, postavlja se i Retry-After, izražen u celim sekundama dok se ne oslobodi barem jedan token.

Greške pre autentifikacije (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) i 403 ip_not_whitelisted ne sadrže X-RateLimit-* zaglavlja - limiter se konsultuje tek nakon što autentifikacija i provere IP adrese uspeju.

Format grešaka

Isti omot (envelope) kao i za Bot Talk API:

{
  "error": {
    "type": "permission_error",
    "code": "key_type_not_allowed",
    "message": "This endpoint requires a MANAGEMENT API key.",
    "param": null
  }
}

Greške validacije koriste code: "invalid_parameter" i dodaju putanju polja koje nije prošlo proveru na početak poruke, tako da se problematični deo lako uočava:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
  }
}

Neispravne vrednosti za enum / polja sa zatvorenim skupom vrednosti (npr. chatMemory.clientSummaryPromptType = "BOGUS") uključuju putanju polja, odbijenu vrednost i listu dozvoljenih vrednosti:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
  }
}

Povezano

Za krajnje tačke razgovora i SSE strimovanje, pogledajte Bot Talk API.