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
- 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 učestalosti zahteva (rate limit), a zatim pošaljite zahtev.
- 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 zaGET /v1/management/bots/{bot_id}bot_management- potrebno zaPOST /v1/management/botsiPATCH /v1/management/bots/{bot_id}usage- potrebno 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 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) segmentaavatar(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 višedelnog (multipart) segmentawhitelabel_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 dodajuname- naziv bota, umetnut 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- mapira se 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, 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,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.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,Hindii 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 jeAuto Detectkada 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ća400 invalid_parameteradvanced.chatContextSize-8000,16000,32000. Zavisi od ograničenja Vašeg naloga; veće vrednosti se automatski i tiho svode na dozvoljenu granicuchatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minifiedappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- logički prekidač (boolean).trueprimorava korisnika da popuni formular za lidove pre započinjanja razgovora;falseprepuš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 od0.0do1.0, što odgovara klizaču u administratorskom interfejsu. Vrednosti van ovog opsega se odbijaju sa400 validation_failed. -
chatMemory.summariesToKnowledgeRatio- ceo broj kao procenat,10-90sa korakom10. Kontroliše koliki deo konteksta četa je rezervisan za istorijske rezimee klijenta u odnosu na ostatak (baza znanja, trenutni razgovor, uputstva). Podrazumevano je50. Vrednosti van opsega10-90se odbijaju sa400 validation_failed. Primenjuje se samo kada jechatMemory.enabled=trueIchatMemory.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 timezoneje 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.outOfHoursMessagei 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. - ključ svakog dana u sedmici (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- kratke oznake koje se prikazuju na dugmadima 👍 / 👎 pored svakog AI odgovora kada jeconversation.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 jehideRoboAssistLogo=truei kada je datoteka prilagođenog logotipa otpremljena putem višedelnog (multipart) segmentawhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekunde (ne milisekunde), ceo broj0-200. Pauza između uzastopnih oblačića sa porukama bota kada jesimulateHumanTyping=true. Podrazumevano je5. -
appearance.autoOpenChatDelaySeconds- sekunde, ceo broj. Vreme čekanja pre nego što se vidžet automatski otvori kada jeautoOpenChat=trueiautoOpenChatDelay=true. -
advanced.internalLocale- IETF kod lokaliteta i regiona u formatull_CC(sa donjom crtom, NEll-CCsa 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_ILi mnogih drugih. Slanje samo dvoslovnog koda ("en") ili BCP-47 ("en-US") nije na listi dozvoljenih. Podrazumevano jeen_US. Ovo je lokalitet koji se koristi za formatiranje datuma/brojeva u okviru vidžeta i razlikuje se odrole.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").0onemoguć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žesecurity.talkMessagesRateLimitHitMessage. -
advanced.botMessagesLimit- ceo broj (JSON broj, npr.1000).0znači „bez ograničenja”; u suprotnom mora biti umnožak broja 1000 (1000,2000,10000, ...). Vrednosti poput100ili1500se odbijaju sa400 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 zaPOST /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.customFormIdihumanSupport.customFormId. - Prilagođene ikonice za otvaranje / zatvaranje ćaskanja -
customLauncherIconVisible,openChatIcon,closeChatIcon. API izlaže samo glavne multipart elementeavatariwhitelabel_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
PATCHzahteva koristeći režim B
Režim B - multipart/form-data (koristite prilikom otpremanja fajlova u istom zahtevu):
Content-Type: multipart/form-data; boundary=...dataJSON deo (obavezno,Content-Type: application/json) - konfiguracija bota u ugnježdenom formatu opisanom iznadavatarfajl deo (opciono) - slika avatara botawhitelabel_logofile 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 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.phoneEnabledima vrednost true; kanal koji je uključen takođe zahteva svoju oznaku, kao i poljaleaveDetailsMessageithankYouMessage- 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.avatarUrliwhiteLabel.whitelabelLogoUrlsluž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) deloveavatar/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
apiKeyvrać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):
dataJSON deo (opciono) - patch izmena. Šaljite samo ako želite da promenite polja. Izostavite u potpunosti ako želite samo da otpremite avatar ili logotip.avatardeo datoteke (opciono) - zamenjuje avatarwhitelabel_logodeo 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}
}
subscriptionTypeje identifikator trenutnog plana naloga napisan malim slovima (npr.standardu 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/remainingpredstavljaju kredite za poruke u tekućem obračunskom periodu.bots.used/limit/remainingbroje 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š konfigurisanirateLimitPerMinuteako 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.