Pregled Management API-ja
Management API je namenjen za administrativne poslove u pozadini koji ne uključuju slanje chat poruka:
- 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. Namerno su odvojeni od Bot Talk ključeva kako kompromitovani chat ključ ne bi mogao da menja Vaše botove ili čita Vaše podatke o naplati.
Osnovni URL (Base URL)
https://api.chatlab.com/aichat
Sve krajnje tačke (endpoints) u ovom članku su relativne u odnosu na ovaj osnovni URL.
Prvi koraci
- Otvorite administratorsku aplikaciju i idite na Account Settings > Management API (Podešavanja naloga > Management API).
- Kliknite na Create Management Key (Kreiraj Management ključ), dajte mu naziv, opciono podesite belu listu IP adresa i ograničenje brzine (rate limit), a zatim pošaljite zahtev.
- Izaberite samo one dozvole koje su potrebne Vašoj integraciji i kopirajte ceo ključ iz modalnog prozora sa obaveštenjem o uspehu. Tekst ključa u čistom formatu prikazuje se samo jednom.
- Sačuvajte ga na svom serveru, a ne u kodu pregledača ili javnom repozitorijumu. Pošaljite zahtev samo za čitanje, kao što je
GET /v1/usagesa dozvolomusage, kako biste verifikovali pristup. - Opozovite nekorišćene ili kompromitovane ključeve na stranici Management API.
Ključ izgleda ovako: mk_abcdefghijklmnopqrstuvwxyz012345. Prefiks mk_ ga razlikuje od Bot Talk ključeva (ck_).
Autentifikacija
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Slanje ključa sa prefiksom 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 prefiksom ck_ na /v1/management/* vraća istu grešku.
Ograničenja
- Maksimalno 5 aktivnih Management API ključeva po korisniku
- Maksimalno 10 zahteva u minuti po ključu (token bucket algoritam, kapacitet 10, ravnomerno dopunjavanje od približno 1 tokena na svakih 6 sekundi). Može se konfigurisati na nižu vrednost prilikom kreiranja - postavite manji
rateLimitPerMinutei gornja granica opada, a brzina dopunjavanja se srazmerno prilagođava.
Dozvole
Svaki Management ključ nosi bilo koji podskup od sledeće tri dozvole. Najmanje jedna mora biti izabrana prilikom kreiranja; u suprotnom se zahtev odbija uz grešku 400 invalid_request_error. Pozivanje krajnje tačke ključem koji nema potrebnu dozvolu vraća 403 insufficient_permissions.
bot_read- obavezno zaGET /v1/management/bots/{bot_id}bot_management- obavezno zaPOST /v1/management/botsiPATCH /v1/management/bots/{bot_id}usage- obavezno zaGET /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 jednoj 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 putem API-ja, videćete da se isti prekidač promenio na kartici Consent & Privacy (Pristanak i privatnost) u administratorskoj aplikaciji.
role- persona bota, osnovni prompt, dužina odgovora, jezik, kontekst veb-sajta / kompanije (kartica Role & Behavior)conversation- poruka dobrodošlice, preciziranje upita, kontinuitet razgovora, prekidač za ocenjivanje + opisi alatki (tooltips), sadržaj predloženih pitanja + dinamička dodatna pitanja (kartica Chat Conversation)chatMemory- prekidač memorije ćaskanja, promptovi za sažetak, dodela konteksta (kartica Summaries & Memory)appearance- boje, tekstovi, dimenzije, prilagođeni CSS, ekran dobrodošlice, stilizovanje predloženih pitanja, ponašanje automatskog otvaranja, simulacija ljudskog kucanja, markdown u podnožju (kartica Appearance)humanSupport- formular za kontakt sa čovekom (kartica Human Contact Form)leadCollection- formular za prikupljanje lidova (kartica Lead Collection)liveChat- preusmeravanje na razgovor uživo (kartica Live Chat)consent- sva četiri prekidača za pristanak na politiku privatnosti plus tekst na ekranu za pristanak (kartica Consent & Privacy)whiteLabel- sakrivanje logotipa, prilagođeni link logotipa, hosting na prilagođenom domenu (kartica Whitelabel)security- dozvoljeni domeni, filter za neželjenu poštu, ograničenja brzine 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, rukovanje jezikom baze znanja (kartica Languages)advanced- LLM model, temperatura, veličina konteksta, ograničenje poruka bota, interni lokalitet, Offer Cards (kartica Model & Advanced)
Od postavki koje se mogu menjati, 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 16 podkartica, a njih 13 odgovara gorenavedenim sekcijama. Tri podkartice koje nemaju odgovarajuću sekciju su Flow, Actions i Forms - sve tri su pokrivene u odeljku "Izvan opsega API-ja" u nastavku. Tih 13 koje imaju odgovarajuću sekciju su 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 imaju istu strukturu. Odgovor dodaje dva dodatna elementa:
meta- samo za čitanje: ID bota i vremenske oznake. Uklonite ga kako biste pretvorili GET odgovor u važeće POST telo.apiKey- prisutan samo prilikom kreiranja - novokreirani Bot Talk API ključ za novog bota.
Dva polja unutar zajedničke 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 GET zahtev direktno na njega da preuzmete bajtove. Da biste ga promenili, otpremite novu datoteku putem multipart delaavatar(pogledajte PATCH).whiteLabel.whitelabelLogoUrl- potpuno kvalifikovani javni URL logotipa u zaglavlju za white-label. Isti obrazac kao i zaavatarUrl. Da biste ga promenili, otpremite novu datoteku putem multipart delawhitelabel_logo(pogledajte PATCH).
Oba URL-a koriste šemu + host + putanju konteksta trenutnog zahteva, pa se na white-label prilagođenom domenu vraćaju sa korenom na tom domenu (npr. https://api.acme.com/aichat/content/...).
Pošaljite null za sekciju kako biste je preskočili u PATCH zahtevu; pošaljite null za polje unutar sekcije kako biste preskočili samo to pojedinačno polje. Vrednost null na nivou polja nikada ne briše sačuvanu vrednost - ona samo znači "ne diraj".
Uloga i konstrukcija prompta
Sistemski prompt koji LLM zapravo prima gradi se na jedan od dva načina, u zavisnosti od role.role. Poznavanje grane na kojoj se nalazite govori Vam koja su polja važna, a koja su sačuvana, ali se ignorišu.
Grana A - role.role je CUSTOMER_SUPPORT, SALES ili LEAD_COLLECTION_AGENT (zasnovano na šablonu)
Backend sastavlja prompt iz ugrađenog šablona i potpuno ignoriše role.rawPrompt (vrednost se i dalje čuva na botu, samo se ne koristi). Šablon obuhvata:
role.role- oznaka uloge (npr. "Customer Support") i uputstva specifična za ulogu koja se dodaju automatskiname- ime bota, ubačeno u uvodnu rečenicurole.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- mapirano na ciljani broj reči:Concise≈ 50 reči,Normal≈ 100,Detailed≈ 200role.websiteAddress- opciono; kada nije prazno, dodaje se kao "for the users of the website {url}"role.companyDescription- opciono; kada nije prazno, dodaje se na početak kao dodatni pasus pre uputstava za ulogu
Ovo je preporučena grana za većinu botova - besplatno dobijate ponašanje prilagođeno ulozi i bezbednosne smernice.
Grana B - role.role je CUSTOM (prompt obezbeđuje pozivalac)
Backend koristi role.rawPrompt kao prompt za ulogu i dodaje fiksne smernice platforme o dužini odgovora. Ovo je odvojeno od role.responseLength: opciono podešavanje Concise/Normal/Detailed se ne ubacuje za ulogu CUSTOM. Isto tako, language, websiteAddress i companyDescription se čuvaju, ali se ne ubacuju u ovaj prompt za ulogu. Sami uključite željeni jezik, ciljnu dužinu odgovora ili kontekst kompanije u rawPrompt. Takođe se mogu obezbediti dodatna uputstva tokom izvršavanja i preuzeti kontekst, tako da rawPrompt ne predstavlja celokupan unos za model. Uputstva o tonu za unapred definisane uloge se ne dodaju, ali izbor opcije CUSTOM ne uklanja sva uputstva platforme.
Koristite CUSTOM samo kada prompt zasnovan na šablonu ne odgovara Vašem slučaju upotrebe (npr. potrebna Vam je persona izuzetno specifična za određenu oblast, sopstvena bezbednosna ograničenja, nestandardni izlazni format).
Polja sa enumeracijama / zatvorenim skupom vrednosti
Polja sa enumeracijama i ograničenim skupom vrednosti odbijaju nevažeće vrednosti uz 400 invalid_parameter. Druga polja su obični tekstualni nizovi (strings), čak i tamo gde interfejs nudi fiksnu listu. Koristite dokumentovani način pisanja i validirajte svoje podatke umesto da pretpostavljate da se svaki nepodržani niz odbija.
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- pun engleski naziv jezika iz padajućeg menija u administratorskom delu, npr.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindii još oko 80 drugih. Vrednost se čuva doslovno i zamenjuje u šablonu prompta, tako da dvoslovni ISO kodovi (en,pl) i druge vrednosti van liste neće biti odbijeni od strane API-ja, ali proizvode iskvareno uputstvo poput "Output in en, unless...". Podrazumevana vrednost jeAuto Detectkada se izostavi prilikom kreiranja.advanced.model- pogledajte "AI tekstualni modeli" u nastavku. Ovo je string, a ne validirana enumeracija u šemi zahteva; koristite podržanu vrednost, a ne proizvoljan naziv modela.advanced.chatContextSize- koristite8000,16000ili32000, u skladu sa korisničkim interfejsom. Vrednosti iznad maksimuma naloga se automatski i nečujno ograničavaju; DTO ne nameće ovaj skup od tri vrednosti.chatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minified,pillappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- logički prekidač (boolean). Vrednosttrueprimorava korisnika da popuni formular za lidove pre započinjanja razgovora;falseprepušta AI-ju da odluči kada će prikazati formular (podrazumevano).
Struktuirana polja i opsezi
Polja koja izgledaju kao jednostavni tekstualni nizovi ili brojevi, ali zapravo imaju specifične oblike, opsege ili specifičnosti administratorskog interfejsa koje vredi znati.
-
advanced.temperature- prihvaćeni opseg je od0.0do1.0, što odgovara klizaču u administratorskom interfejsu. Vrednosti van ovog opsega se odbijaju uz400 invalid_parameter. -
chatMemory.summariesToKnowledgeRatio- ceo broj kao procenat,10-90; interfejs koristi korake od10, ali API prihvata cele brojeve u celom opsegu. Podrazumevana vrednost je50. Kada je memorija omogućena i kontekst veći od 8k, ovo deli budžet za znanje i memoriju nakon rezervacije za prompt/nedavni razgovor, a ne celokupan kontekst modela. Pri 8k ovim podešavanjem se ne dodeljuje budžet za sažetke. -
liveChat.schedule- JSON kodiran kao string, a ne ugnježdeni JSON objekat u prenosu. Server čuva sirovi string doslovno; administratorski interfejs ga parsira na strani klijenta prilikom prikazivanja uređivača rasporeda. Kada se parsira, string je strukturiran kao jedan unos po danu u nedelji plus ključtimezone:- svaki ključ za dan u nedelji (
monday-sunday) mapira se na{enabled: boolean, from: "H:MM", to: "H:MM"}u 24-časovnom formatu vremena timezoneje naziv IANA vremenske zone (npr."Europe/Warsaw","America/New_York")
Primer vrednosti (obratite pažnju na spoljne navodnike i izbegnute unutrašnje navodnike - to je jedno polje sa stringom, 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.outOfHoursMessagei preusmeravanje na razgovor uživo se potiskuje. Validacija unutrašnje strukture se izvršava samo na strani klijenta u administratorskom interfejsu - neispravan JSON ili neprepoznate ključeve API prihvata kao običan string i prikazaće se kao greška pri renderovanju kada čovek kasnije otvori bota u administratorskom delu. Validirajte strukturu na svojoj strani pre slanja. - svaki ključ za dan u nedelji (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- kratke oznake koje se prikazuju na kontrolama za ocenjivanje razgovora 👍 / 👎 kada jeconversation.conversationRatingEnabled=true. Podrazumevani tekst je "I like the response" / "I don't like the response". Vidljivo krajnjim korisnicima. -
whiteLabel.hideRoboAssistLogo- mogućnost white-label funkcije, u zavisnosti od ograničenja Vašeg naloga. Sakriva red u podnožju "Powered by ChatLab". Ako Vaš nalog ne uključuje white-labeling, vrednost se čuva, ali se ignoriše i podnožje se uvek prikazuje. -
whiteLabel.whitelabelLogoLink- mogućnost white-label funkcije, u zavisnosti od ograničenja Vašeg naloga. URL na koji vodi klik na prilagođeni logotip kada jehideRoboAssistLogo=truei kada je datoteka prilagođenog logotipa otpremljena preko multipart delawhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekunde (ne milisekunde), ceo broj0-200. Pauza između uzastopnih oblačića bota kada jesimulateHumanTyping=true. Podrazumevana vrednost je5. -
appearance.autoOpenChatDelaySeconds- sekunde, ceo broj. Odlaganje pre nego što se vidžet automatski otvori kada jeautoOpenChat=trueiautoOpenChatDelay=true. -
advanced.internalLocale- IETF kod lokaliteta i regiona u oblikull_CC(sa donjom crtom, NEll-CCsa crticom). Prihvaćene vrednosti dolaze sa fiksne liste od oko 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_ILi mnogi drugi. Slanje samo dvoslovnog koda ("en") ili BCP-47 formata ("en-US") se ne nalazi na listi dozvoljenih. Podrazumevana vrednost jeen_US. Ovo je lokalitet koji se koristi za formatiranje datuma/brojeva u elementima okruženja vidžeta, različito odrole.language(jezika na kom bot vodi razgovor). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- celi brojevi (šalju se kao JSON brojevi, npr.30, a ne"30"). Postavite ograničenje poruka na0da biste onemogućili ovo ograničenje po sesiji. Kada ga omogućavate, unesite pozitivno trajanje. Backend primenjuje N poruka po sesiji tokom trajanja u sekundama pre nego što posetiocu prikažesecurity.talkMessagesRateLimitHitMessage. -
advanced.botMessagesLimit- ceo broj (JSON broj, npr.1000). Vrednost0znači da nema dodatnog ograničenja po botu, dok se budžet kredita naloga i dalje primenjuje; u suprotnom mora biti umnožak broja 1000 (1000,2000,10000, ...). Vrednosti poput100ili1500se odbijaju uz400 invalid_parameter. Ovo je mesečno ograničenje kredita za bota, a ne broj poruka po razgovoru. Maper ne ograničava ovu vrednost na budžet naloga; budžet naloga i dalje ograničava stvarnu upotrebu.
AI tekstualni modeli (advanced.model)
Koristite tačan identifikator modela koji se vraća u advanced.model kada čitate bota konfigurisanog sa Vašim željenim modelom u Settings > Model & Advanced (Podešavanja > Model i napredno). Trenutna podrazumevana vrednost pri kreiranju je 5.6-LUNA. Identifikatori razlikuju velika i mala slova i razlikuju se od prikazanih naziva; na primer 5.6-LUNA se prikazuje kao GPT 5.6-luna.
Katalog modela se vremenom menja. Nemojte zaključivati da je proizvoljan string ili javni ID modela pružaoca usluge podržan samo zato što šema zahteva prihvata string. Ponovo pročitajte sačuvanu konfiguraciju i testirajte dobijenog chatbota pre nego što ga pustite u rad.
Field reference (full request schema)
Podržani odeljci i polja, sa svojim tipovima i važnim ograničenjima. Semantika PATCH metode: svako izostavljeno polje (ili poslato kao null) ostavlja sačuvanu vrednost nepromenjenom. Isti format se koristi i za odgovor (bez multipart binarnog sadržaja; uz meta blok samo za čitanje na svakom odgovoru i apiKey samo na odgovoru za kreiranje).
Top level
| Field | Type | Constraint | Description |
|---|---|---|---|
name |
string | max 150, required on create | 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 prisutni samo u odgovoru:
meta: { id, createdAt, updatedAt }- samo za čitanje.apiKey- string, prisutan samo u odgovoru zaPOST /v1/management/bots- novokreirani Bot Talk ključ za novog bota, koji se vraća tačno jednom.
§ role
| Field | Type | Constraint | Description |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Unapred podešena persona; bira šablon prompta (pogledajte "Role and prompt construction") |
language |
string | puno ime jezika na engleskom (English, Polish, ...) ili Auto Detect |
Primarni jezik koji se prosleđuje u šablon prompta |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Željena opširnost odgovora veštačke inteligencije |
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
| Field | Type | Constraint | Description |
|---|---|---|---|
welcomeMessage |
string | Prva poruka prikazana posetiocu prilikom otvaranja | |
queryRefinementEnabled |
boolean | Ako je označeno, precizira pitanje posetioca pre RAG pretrage | |
conversationContinuityEnabled |
boolean | Ako je označeno, posetioci koji se vraćaju nastavljaju svoj prethodni razgovor | |
conversationRatingEnabled |
boolean | Ako je označeno, prikazuje kontrole za ocenjivanje razgovora (palac nagore/nadole) | |
positiveRatingTooltip |
string | Opis alatke (tooltip) na dugmetu za pozitivnu ocenu | |
negativeRatingTooltip |
string | Opis alatke (tooltip) na dugmetu za negativnu ocenu | |
suggestedQuestions |
string | Predložena pitanja / pokretači razgovora razdvojeni novim redom | |
dynamicSuggestedFollowups |
boolean | Ako je označeno, AI predlaže dodatna pitanja nakon svakog odgovora | |
positiveRatingMessage |
string | Poruka prikazana nakon pozitivne povratne informacije | |
negativeRatingMessage |
string | Poruka prikazana nakon negativne povratne informacije | |
hideSuggestedQuestionsAfterFirstUse |
boolean | Sakriva statičke predloge nakon upotrebe | |
dynamicFollowupsAutoIcons |
boolean | Ako je označeno, AI automatski bira emodži ikonice za dinamička dodatna pitanja |
§ chatMemory
| Field | Type | Constraint | Description |
|---|---|---|---|
enabled |
boolean | Glavni prekidač za funkciju memorije ćaskanja | |
summaryConversationsEnabled |
boolean | Čuva sažetke pojedinačnih razgovora | |
conversationSummaryPrompt |
string | Prilagođeni prompt koji se koristi za sažimanje svakog razgovora | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Određuje da li se koristi podrazumevani ili prilagođeni prompt za sažetak |
clientSummaryPrompt |
string | Prilagođeni prompt koji se koristi za sažimanje klijenta kroz više razgovora | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Podrazumevani ili prilagođeni prompt za profil klijenta |
summariesToKnowledgeRatio |
int | 10-90 (korak u interfejsu 10) |
% dostupnog budžeta znanja/memorije dodeljen sažecima pri kontekstima većim od 8k |
§ appearance
| Field | Type | Constraint | Description |
|---|---|---|---|
launcherLabelLine1 |
string | max 60 | Prvi red teksta na pokretaču |
launcherLabelLine2 |
string | max 60 | Drugi red teksta na pokretaču |
launcherTextColor |
string | Boja teksta na pokretaču | |
launcherDismissEnabled |
boolean | Dozvoli odbacivanje pokretača | |
widgetFontFamily |
string | inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono |
Porodica fonta vidžeta |
chatDrawerEnabled |
boolean | Omogući prikaz u obliku bočne fioke (drawer) | |
launcherColor |
string (hex) | Boja pozadine pokretača (ikonice ćaskanja) | |
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 u poruci posetioca | |
responseMessageBubbleColor |
string (hex) | Boja oblačića sa odgovorom bota | |
responseMessageTextColor |
string (hex) | Boja teksta u odgovoru bota | |
chatSubheader |
string | Slogan prikazan ispod naslova ćaskanja | |
senderPlaceholder |
string | Tekst čuvara mesta (placeholder) u polju za unos poruke | |
resetConversationTooltip |
string | Opis alatke (tooltip) na dugmetu za ponovno pokretanje razgovora | |
chatAlignment |
string (enum) | ∈ {left, right} |
Strana ekrana uz koju je ćaskanje fiksirano |
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 umetnut u iframe vidžeta | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Način na koji se otvaraju linkovi unutar poruka bota |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified, pill} |
Minimizovano stanje: ikonica pokretača, kompaktna traka za unos ili pilula |
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 | |
messageFontSize |
int | Veličina fonta teksta poruke (px) | |
showChatbotBubblesDesktop |
boolean | Prikaz plutajućih oblačića sa najavom na desktopu | |
showChatbotBubblesMobile |
boolean | Prikaz plutajućih oblačića sa najavom na mobilnim uređajima | |
chatbotBubblesDelaySeconds |
int | Kašnjenje pre nego što se pojave oblačići sa najavom (sekunde) | |
launcherIconFullSize |
boolean | Prikaz prilagođene ikonice pokretača od ivice do ivice umesto sa marginom | |
welcomeScreenEnabled |
boolean | Prikaz ekrana dobrodošlice umesto direktnog ulaska u ćaskanje | |
welcomeScreenQuestionsLabel |
string | Oznaka iznad predloženih pitanja na ekranu dobrodošlice | |
welcomeScreenHideHumanContactForm |
boolean | Sakriva opciju kontakt formulara za ljude u zaglavlju dok je ekran dobrodošlice prikazan. Ponovo se pojavljuje nakon prve poruke posetioca. Za botove kreirane pre 2026-09-02 podrazumevana vrednost je true |
|
welcomeScreenHideLiveChat |
boolean | Sakriva opciju za Live Chat u zaglavlju dok je ekran dobrodošlice prikazan. Ponovo se pojavljuje nakon prve poruke posetioca. Za botove kreirane pre 2026-09-02 podrazumevana vrednost je true |
|
headerActionsLayout |
string | ICONS or DROPDOWN |
Način na koji su Live Chat i kontakt formular za ljude ponuđeni u zaglavlju ćaskanja: ICONS (zasebna ikonica za svaku) 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 (umesto jedno pored drugog) | |
suggestedQuestionsFontSize |
int | Veličina fonta pločica sa predloženim pitanjima (px) | |
suggestedQuestionsTextColor |
string (hex) | Boja teksta pločica sa predloženim pitanjima | |
suggestedQuestionsBackgroundColor |
string (hex) | Boja pozadine pločica sa predloženim pitanjima | |
autoOpenChat |
boolean | Automatsko otvaranje ćaskanja na desktopu | |
autoOpenChatOnMobiles |
boolean | Automatsko otvaranje ćaskanja na mobilnim uređajima | |
autoOpenChatDelay |
boolean | Koristi kašnjenje pre automatskog otvaranja | |
autoOpenChatDelaySeconds |
int | Kašnjenje automatskog otvaranja (sekunde) | |
simulateHumanTyping |
boolean | Deli odgovor bota u oblačiće sa animacijom kucanja | |
simulateHumanTypingDelay |
int | 0-200 |
Kašnjenje između poruka u oblačićima (sekunde) |
footerMarkdown |
string | max 255 | Prilagođeni markdown podnožja prikazan ispod ćaskanja |
avatarUrl |
string | read-only | Potpuno kvalifikovani javni URL avatara; da biste ga promenili, otpremite ga putem multipart dela avatar |
Multipart pri POST/PATCH metodama: avatar (deo sa datotekom). GET i tela odgovora izostavljaju sadržaj datoteke - prenosi se samo URL.
§ humanSupport
| Field | Type | Constraint | Description |
|---|---|---|---|
enabled |
boolean | Prekidač za tok korisničke podrške | |
email |
string | obavezno (create-strict) kada je enabled=true |
Adresa koja prima imejlove korisničke podrške |
dialogMessage |
string | Podsticajna poruka prikazana iznad formulara | |
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 (placeholder) u polju za unos imejla | |
messagePlaceholder |
string | Čuvar mesta (placeholder) u tekstualnom polju za poruku | |
emailWithConversationContent |
boolean | Ako je označeno, uključuje transkript razgovora u telo imejla | |
customFormId |
long | ID postojećeg prilagođenog formulara | Zamenjuje ugrađeni kontakt formular prilagođenim formularom. Prilikom kreiranja, izostavljanje koristi ugrađeni formular; pri PATCH metodi, null ostavlja trenutni izbor nepromenjenim |
customFormMapping |
string | JSON kodiran string | Mapira polja prilagođenog formulara na polja imejla korisničke podrške |
requirePolicyAccept se nalazi na consent.humanSupportRequirePolicyAccept, a ne ovde.
§ leadCollection
| Field | Type | Constraint | Description |
|---|---|---|---|
enabled |
boolean | Prekidač za formular za potencijalne klijente (leadove) | |
nameEnabled |
boolean | Prikupljaj ime | |
nameLabel |
string | Oznaka na polju za unos imena | |
emailEnabled |
boolean | Prikupljaj imejl | |
emailLabel |
string | obavezno (create-strict) kada je enabled=true I emailEnabled=true |
Oznaka na polju za unos imejla |
phoneEnabled |
boolean | Prikupljaj telefon | |
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, formular mora biti poslat pre početka razgovora; ako je false, AI odlučuje kada će prikazati formular |
|
emailNotificationEnabled |
boolean | Šalje imejl vlasniku svaki put kada se prikupi lead | |
emailNotificationAddress |
string | Primalac obaveštenja (podrazumeva se imejl naloga) | |
emailWithConversationContent |
boolean | Ako je označeno, uključuje transkript razgovora u obaveštenje |
| customFormId | long | ID postojećeg prilagođenog formulara | Zamenjuje ugrađeni formular za leadove prilagođenim formularom. Prilikom kreiranja, izostavljanje koristi ugrađeni formular; pri PATCH metodi, null ostavlja trenutni izbor nepromenjenim |
| customFormMapping | string | JSON kodiran string | Mapira polja prilagođenog formulara na ime / imejl / telefon |
Pravilo među poljima pri kreiranju (create-strict): enabled=true zahteva barem jedno od emailEnabled ili phoneEnabled. requirePolicyAccept se nalazi na consent.leadCollectionRequirePolicyAccept, a ne ovde.
§ liveChat
| Field | Type | Constraint | Description |
|---|---|---|---|
enabled |
boolean | Prekidač za funkciju Live Chat | |
infoMessage |
string | Poruka sa objašnjenjem 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 predformularu za Live Chat | |
emailLabel |
string | Oznaka na polju za unos imejla u predformularu za Live Chat | |
schedule |
string | JSON kodiran string (prekidači za dane u sedmici + from/to + timezone) |
Radno vreme za Live Chat - pogledajte "Structured fields and ranges" za tačan format |
outOfHoursMessage |
string | Poruka prikazana kada raspored pokazuje da nismo dostupni | |
closeModalMessage |
string | Naslov modalnog prozora "Zatvoriti Live Chat?" | |
closeModalConfirmLabel |
string | Oznaka dugmeta za potvrdu na modalu za zatvaranje | |
closeModalCancelLabel |
string | Oznaka dugmeta za odustajanje na modalu za zatvaranje | |
closeModalTooltipText |
string | Opis alatke (tooltip) na elementu za zatvaranje ćaskanja | |
operatorHasJoinedLabel |
string | Oznaka prikazana kada se operater pridruži | |
operatorDidNotJoinInTimeLabel |
string | Oznaka prikazana kada se nijedan operater ne pridruži u predviđenom roku | |
waitingForOperatorToJoinLabel |
string | Oznaka prikazana dok se čeka operater | |
waitingForOperatorSeconds |
int | Vremensko ograničenje za javljanje operatera (sekunde) | |
redirectToHumanSupportForm |
boolean | Ako je označeno, preusmerava na kontakt formular za ljudsku podršku kada se nijedan operater ne javi | |
requireAdminOnline |
boolean | Zahteva dostupnog operatera u skladu sa podešavanjima prisustva | |
presenceMode |
string | Režim prisustva; koristite vrednost bota podešenog u korisničkom interfejsu | |
hideHumanSupportWhenLiveChatAvailable |
boolean | Sakriva kontakt formular kada je Live Chat dostupan | |
missedEmailEnabled |
boolean | podrazumevano true |
Šalje imejl vlasniku bota kada zahtev za Live Chat ostane neodgovoren. Nije podešeno na starijim botovima, što se tumači kao uključeno |
requirePolicyAccept se nalazi na consent.liveChatRequirePolicyAccept, a ne ovde.
§ consent
| Field | Type | Constraint | Description |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Zahteva prihvatanje politike privatnosti pre početka novog razgovora | |
humanSupportRequirePolicyAccept |
boolean | Zahteva prihvatanje politike privatnosti pre slanja formulara za ljudsku podršku | |
leadCollectionRequirePolicyAccept |
boolean | Zahteva prihvatanje politike privatnosti pre slanja formulara za prikupljanje leadova | |
liveChatRequirePolicyAccept |
boolean | Zahteva prihvatanje politike privatnosti pre pokretanja Live Chat sesije | |
newConversationConsentDescription |
string | Uvodni tekst ekrana za pristanak na početku razgovora | |
privacyPolicyConsentCheckboxLabel |
string | Oznaka pored polja za potvrdu pristanka (obično sadrži link ka politici privatnosti) |
§ whiteLabel
| Field | Type | Constraint | Description |
|---|---|---|---|
hideRoboAssistLogo |
boolean | White Label mogućnost; podleže ograničenjima naloga | Sakriva podrazumevani ChatLab logotip u podnožju |
whitelabelLogoLink |
string | White Label mogućnost; podleže ograničenjima naloga | URL na koji vodi prilagođeni logotip u podnožju |
assignToCustomDomain |
boolean | regulisano CUSTOM_DOMAIN funkcijom |
Hostuje ćaskanje na konfigurisanoj sopstvenoj domeni |
whitelabelLogoUrl |
string | read-only | Potpuno kvalifikovani javni URL White Label logotipa; da biste ga promenili, otpremite ga putem multipart dela whitelabel_logo |
Multipart pri POST/PATCH metodama: whitelabel_logo (deo sa datotekom). GET i tela odgovora izostavljaju sadržaj datoteke - prenosi se samo URL.
§ security
| Field | Type | Constraint | Description |
|---|---|---|---|
allowedDomains |
string | Zarezom razdvojena lista domena kojima je dozvoljeno ugrađivanje vidžeta (prazno = bez liste dozvoljenih) | |
spamFilterEnabled |
boolean | Uključuje filter neželjene pošte (spam filter) po botu za dolazne poruke | |
countryFilterMode |
string | BLACKLIST or WHITELIST |
Način tumačenja lista zemalja. Same liste ostaju dostupne samo administratorima |
talkMessagesRateLimit |
int | >= 0; 0 onemogućava |
Maksimalan broj korisničkih poruka dozvoljen u okviru vremenskog prozora ograničenja brzine |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Dužina vremenskog prozora ograničenja brzine (sekunde) |
talkMessagesRateLimitHitMessage |
string | Poruka prikazana posetiocu kada se dostigne ograničenje brzine |
§ voice
| Field | Type | Constraint | Description |
|---|---|---|---|
inputEnabled |
boolean | Dozvoli posetiocu diktiranje poruka (pretvaranje govora u tekst) | |
conversationEnabled |
boolean | zahteva funkciju glasa u okviru plana | Omogućava potpune glasovne razgovore |
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, tarife se razlikuju po modelu |
turnDetection |
string | specifično za provajdera | Režim smenjivanja govornika (turn-taking) |
audioPrompt |
string | Dodatni sistemski prompt koji se koristi samo za glasovne segmente | |
welcomeMessage |
string | Izgovorena uvodna rečenica | |
language |
string | kod jezika | Primarni jezik glasa |
additionalLanguages |
string | zarezom razdvojeni kodovi jezika | 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
| Field | Type | Constraint | Description |
|---|---|---|---|
enabled |
boolean | Prekidač za višejezični režim | |
mode |
string | AUTODETECT or FIXED_LIST |
Način na koji bot bira jezik odgovora |
baseLanguage |
string | kod jezika | Osnovni jezik na kom je napisan sadržaj bota |
languages |
string | zarezom razdvojeni kodovi jezika | Jezici ponuđeni posetiocu |
knowledgeLanguageMode |
string | NONE, MAIN, or DYNAMIC |
Način na koji se tretira baza znanja na drugim jezicima |
knowledgeLanguageFallback |
string | kod jezika | Jezik koji se koristi kada nema pronađenih podudaranja |
§ advanced
| Field | Type | Constraint | Description |
|---|---|---|---|
model |
string | podleže ograničenjima naloga; pogledajte "AI text models" iznad | Identifikator LLM modela (npr. 5.6-LUNA) |
temperature |
decimal | 0.0-1.0 |
Temperatura uzorkovanja (odgovara klizaču u korisničkom interfejsu) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; automatski prilagođeno granici vašeg naloga |
Konfigurisani budžet konteksta, uključujući instrukcije, istoriju i bazu znanja |
botMessagesLimit |
long | 0 ili umnožak od 1000 (npr. 1000, 2000, 10000) |
Mesečno ograničenje poruka bota u kreditima (0 = bez dodatnog ograničenja bota; budžet naloga i dalje važi) |
internalLocale |
string | kod lokaliteta u formatu ll_CC |
Lokalitet za natpise okvira vidžeta (razlikuje se od role.language) |
productsViewEnabled |
boolean | Ako je označeno, prikazuje Offer Cards za e-trgovinu unutar ćaskanja | |
includeProductsInKnowledgeBase |
boolean | Ako je označeno, indeksira katalog proizvoda kao deo baze znanja |
Out of API scope
Administratorski interfejs nudi nekoliko oblasti koje namerno nisu izložene u ovoj verziji Management API-ja:
- Treniranje i brisanje - ove krajnje tačke ne listaju sve botove, ne upravljaju skupovima podataka za treniranje niti brišu botove. Za ove tokove posla koristite aplikaciju.
- Kartica Flow (Tok) - vizuelni uređivač toka razgovora (faze i prelazi). Nije izloženo putem Management API-ja.
- Kartica Actions (Radnje) - integracije za e-trgovinu / rezervacije, AI Search i prilagođene API funkcije. Pozivanje alata (tool calling) nikada nije bilo deo Management API-ja.
- Sam kreator prilagođenih formulara - kreiranje i uređivanje prilagođenih formulara nije izloženo. Međutim, možete povezati postojeći formular sa botom putem
leadCollection.customFormIdihumanSupport.customFormId. - Prilagođene ikonice za otvaranje / zatvaranje ćaskanja -
customLauncherIconVisible,openChatIcon,closeChatIcon. API izlaže samo glavneavatariwhitelabel_logomultipart delove. - Liste IP adresa i zemalja - sami unosi su rezervisani samo za administratore. Izložen je samo režim tumačenja, putem
security.countryFilterMode.
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 otpremite avatar / logotip u istom zahtevu):
Content-Type: application/json- Telo zahteva jeste JSON konfiguracija bota (bez
dataomotača) - Datoteke (avatar / logotip) mogu se otpremiti kasnije putem drugog
PATCHzahteva koristeći režim B
Režim B - multipart/form-data (koristi se kada otpremate datoteke u istom zahtevu):
Content-Type: multipart/form-data; boundary=...dataJSON deo (obavezno,Content-Type: application/json) - konfiguracija bota u ugnježdenom formatu opisanom iznadavatardeo sa datotekom (opciono) - slika avatara botawhitelabel_logodeo sa datotekom (opciono) - White Label logotip (primenjuje se samo ako Vaš nalog uključuje White Label funkcionalnost)
Samo je polje name obavezno u JSON-u; svako drugo polje poprima istu podrazumevanu vrednost koju bi postavio čarobnjak u administratorskom interfejsu.
Primer tela zahteva
Ovo je maksimalni data JSON - sa popunjenim svakim odeljkom. Pošaljite samo odeljke koji su Vam potrebni; sve ostalo uzima 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.6-LUNA",
"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 znakovaadvanced.temperature- između0.0i1.0chatMemory.summariesToKnowledgeRatio- ceo broj između10i90(procenat, korak10)appearance.launcherBottomMargin,appearance.launcherSideMargin- između0i500appearance.footerMarkdown- najviše 255 znakovahumanSupport.enabled=truezahteva da poljehumanSupport.emailbude postavljenoleadCollection.enabled=truezahteva da barem jedno od poljaleadCollection.emailEnabledilileadCollection.phoneEnabledbude postavljeno natrue; koji god kanal je uključen, potrebna je i njegova oznaka, kao ileaveDetailsMessageithankYouMessageadvanced.chatContextSizese automatski ograničava na maksimalnu podržanu veličinu konteksta za dati nalog. Nemojte pretpostavljati da se druga numerička polja automatski ograničavaju.
Polja čija je vrednost null na serveru se izostavljaju iz JSON tela - prenosom se šalju samo polja sa vrednostima koje nisu null.
Primer tela odgovora (201)
Isti format kao i zahtev, plus blok meta koji je dostupan samo za čitanje i jednokratni apiKey na najvišem nivou. URL adrese datoteka dostupne samo za čitanje (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.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"
}
Polje apiKey se pojavljuje samo pri kreiranju - to je novoizdati Bot Talk API ključ vezan za novog bota. Čitljiv tekst se prikazuje samo jednom i ne može se naknadno preuzeti preko API-ja; odmah ga sačuvajte na svojoj strani.
Zaglavlje odgovora Location sadrži URL novog bota (/v1/management/bots/{id}).
Primeri sa cURL-om
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 koji posedujete.
Primer sa cURL-om
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Primer tela odgovora (200)
Isti format kao i odgovor na POST, bez jednokratnog polja 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 URL adrese samo za čitanje (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - zasnovane na istoj šemi + hostu + putanji konteksta koji su opslužili ovaj zahtev. Preuzmite bajtove slanjem GET zahteva direktno na te URL adrese; da biste zamenili bilo koju datoteku, otpremite novu putem multipart dela avatar / whitelabel_logo u okviru PATCH zahteva. Ova polja sa URL adresama 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.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"
}
}
Kloniranje bota
Telo zahteva za POST /v1/management/bots i telo odgovora za GET /v1/management/bots/{bot_id} dele istu strukturu, tako da je kloniranje proces u tri koraka: pošaljite GET za izvornog bota, uklonite polja identifikacije kojima upravlja server i pošaljite rezultat putem POST metode.
1. Pošaljite GET za izvornog bota.
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 dostupan samo za čitanje - ostavljanje ovog objekta u telu POST zahteva ne pravi 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 očišćeno telo putem POST metode da biste kreirali klona. Pogledajte referencu za POST /v1/management/bots iznad za kompletnu strukturu 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 sveže generisani apiKey (Bot Talk ključ za klona). Tekstualna vrednost za apiKey vraća se samo u ovom odgovoru na kreiranje - kopirajte je pre nego što odbacite telo odgovora; kasnije se ne može preuzeti.
Ovim se kopiraju podržana podešavanja, a ne potpuno trenirani chatbot. Sadržaj za treniranje, istorija razgovora, integracije/akcije, Flow i definicije obrazaca se ne kloniraju putem ovih krajnjih tačaka. Podesite ih zasebno u aplikaciji.
Dodatne napomene:
- Fajlovi se ne kloniraju. Polja
appearance.avatarUrliwhiteLabel.whitelabelLogoUrlsu samo za čitanje i pokazuju na fajlove izvornog bota. Ako su Vam na klonu potrebni isti avatar ili White Label logo, preuzmite bajtove sa izvornih URL adresa i otpremite ih kao multipartavatar/whitelabel_logodelove - bilo prilikom POST zahteva za kreiranje (Režim B) ili u naknadnom PATCH zahtevu. - Bot Talk ključevi se ne kloniraju. Svaki bot ima sopstveni skup Bot Talk ključeva. Jedini
apiKeykoji se vraća u odgovoru na POST za kreiranje jeste onaj koji je automatski generisan; kreirajte dodatne ključeve na kartici API bota ako je potrebno.
PATCH /v1/management/bots/{bot_id}
Ažurirajte jedno ili više polja na botu koji posedujete. Menjaju se samo sekcije/polja navedena u JSON-u; sve što je izostavljeno (ili poslato kao null) ostaje nepromenjeno. Pravila delimičnog ažuriranja primenjuju se po polju unutar poslate sekcije.
Prihvataju se dva ekvivalentna Content-Type tipa (isto kao i za POST):
Režim A - običan JSON (preporučuje se kada se ažuriraju samo podešavanja):
Content-Type: application/json- Telo zahteva jeste JSON za ažuriranje (bez omotača
data)
Režim B - multipart/form-data (koristi se prilikom otpremanja fajlova):
dataJSON deo (opciono) - podaci za ažuriranje. Šaljite samo ako želite da promenite polja. Izostavite u potpunosti ako želite samo da otpremite avatar ili logo.avatardeo sa fajlom (opciono) - zamena avatarawhitelabel_logodeo sa fajlom (opciono) - zamena White Label logotipa (primenjuje se samo ako Vaš nalog uključuje White Label)
Sva tri dela su opciona u PATCH zahtevu, ali barem jedan mora biti prisutan da bi poziv imao smisla.
Primer tela zahteva (više sekcija)
Bilo koje polje koje prihvata POST /v1/management/bots može se poslati i ovde. Primer u nastavku prikazuje nekoliko sekcija, a ne svako podržano polje; u praksi šaljete samo ključeve koje želite da promenite (pogledajte "Minimalno delimično ažuriranje" u nastavku) - svaki izostavljeni ključ (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 pojedinačno polje putem PATCH metode tako što ćete poslati tačno one ključeve koje želite da promenite - sve ostalo se zadržava.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Primeri sa komandom Curl
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)
Ista struktura kao kod GET /v1/management/bots/{bot_id} - kompletna konfiguracija bota nakon primene ažuriranja, uključujuć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 PATCH zahteva iz odeljka Puno telo zahteva (više sekcija) iznad na bota iz GET primera - promenjena polja odražavaju nove vrednosti, netaknuta polja su oč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": "your-plan-id",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeje identifikator trenutnog plana naloga napisan malim slovima (your-plan-idje ilustrativni primer). 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, a ne kao fiksni enum.messages.used/limit/remainingpredstavljaju kredite za poruke u tekućem kalendarskom mesecu, koji se resetuju prvog dana u mesecu, a ne na dan obnove pretplate. Oni su ponderisani kreditima, a ne prosti brojevi odgovora.bots.used/limit/remainingbroje botove u Vašem vlasništvu, uključujući i pauzirane botove, u odnosu na ukupan limit botova na Vašem nalogu.
Zaglavlja ograničenja stope (Rate limit headers)
Odgovori koji stignu do faze provere ograničenja stope (tj. uspešno su prošli autentifikaciju i listu dozvoljenih IP adresa) sadrže:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- limit po ključu koji se stvarno primenjuje na ovaj poziv (podrazumevano 10, ili Vaš podešenirateLimitPerMinuteako je niži).X-RateLimit-Remaining- preostali tokeni u skladištu (bucket) neposredno nakon ovog poziva.X-RateLimit-Reset- sekunde Unix epohe u kojima sledeći token postaje dostupan (ovo nije potpuno resetovanje skladišta; skladište se dopunjava neprekidno). 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 - mehanizam za ograničenje stope se konsultuje tek nakon što autentifikacija i provere IP adrese uspešno prođu.
Format greške
Isti omot (envelope) kao i 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 je izazvalo grešku na početak poruke, tako da se sporni 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, odbačenu 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 striming, pogledajte Bot Talk API.