Centar za pomoć
Chat API

Management API

Poslednje ažuriranje:

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

  1. Otvorite administratorsku aplikaciju i idite na Account Settings > Management API (Podešavanja naloga > Management API).
  2. Kliknite na Create Management Key (Kreiraj Management ključ), dajte mu naziv, opciono podesite belu listu IP adresa i ograničenje brzine (rate limit), a zatim pošaljite zahtev.
  3. 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.
  4. 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/usage sa dozvolom usage, kako biste verifikovali pristup.
  5. 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 rateLimitPerMinute i 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 za GET /v1/management/bots/{bot_id}
  • bot_management - obavezno za POST /v1/management/bots i PATCH /v1/management/bots/{bot_id}
  • usage - obavezno za GET /v1/usage

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

POST i PATCH prihvataju JSON telo grupisano u 13 sekcija. Svaka sekcija odgovara 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 dela avatar (pogledajte PATCH).
  • whiteLabel.whitelabelLogoUrl - potpuno kvalifikovani javni URL logotipa u zaglavlju za white-label. Isti obrazac kao i za avatarUrl. Da biste ga promenili, otpremite novu datoteku putem multipart dela whitelabel_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 automatski
  • name - ime bota, ubačeno u uvodnu rečenicu
  • role.language - "Auto Detect" prebacuje bota da prati jezik korisnika; bilo koja druga vrednost (npr. "English", "Polish") postaje "Output in {language}, unless user uses another language"
  • role.responseLength - mapirano na ciljani broj reči: Concise ≈ 50 reči, Normal ≈ 100, Detailed ≈ 200
  • role.websiteAddress - opciono; kada nije prazno, dodaje se kao "for the users of the website {url}"
  • role.companyDescription - opciono; kada nije prazno, 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, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.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, Hindi i 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 je Auto Detect kada 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 - koristite 8000, 16000 ili 32000, 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, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified, pill
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - logički prekidač (boolean). Vrednost true primorava korisnika da popuni formular za lidove pre započinjanja razgovora; false prepuš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 od 0.0 do 1.0, što odgovara klizaču u administratorskom interfejsu. Vrednosti van ovog opsega se odbijaju uz 400 invalid_parameter.

  • chatMemory.summariesToKnowledgeRatio - ceo broj kao procenat, 10-90; interfejs koristi korake od 10, ali API prihvata cele brojeve u celom opsegu. Podrazumevana vrednost je 50. 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
    • timezone je 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.outOfHoursMessage i 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.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - kratke oznake koje se prikazuju na kontrolama za ocenjivanje razgovora 👍 / 👎 kada je conversation.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 je hideRoboAssistLogo=true i kada je datoteka prilagođenog logotipa otpremljena preko multipart dela whitelabel_logo.

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

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

  • advanced.internalLocale - IETF kod lokaliteta i regiona u obliku ll_CC (sa donjom crtom, NE ll-CC sa 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_IL i mnogi drugi. Slanje samo dvoslovnog koda ("en") ili BCP-47 formata ("en-US") se ne nalazi na listi dozvoljenih. Podrazumevana vrednost je en_US. Ovo je lokalitet koji se koristi za formatiranje datuma/brojeva u elementima okruženja vidžeta, različito od role.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 na 0 da 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že security.talkMessagesRateLimitHitMessage.

  • advanced.botMessagesLimit - ceo broj (JSON broj, npr. 1000). Vrednost 0 znač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 poput 100 ili 1500 se odbijaju uz 400 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 za POST /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.customFormId i humanSupport.customFormId.
  • Prilagođene ikonice za otvaranje / zatvaranje ćaskanja - customLauncherIconVisible, openChatIcon, closeChatIcon. API izlaže samo glavne avatar i whitelabel_logo multipart 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 data omotača)
  • Datoteke (avatar / logotip) mogu se otpremiti kasnije putem drugog PATCH zahteva 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=...
  • data JSON deo (obavezno, Content-Type: application/json) - konfiguracija bota u ugnježdenom formatu opisanom iznad
  • avatar deo sa datotekom (opciono) - slika avatara bota
  • whitelabel_logo deo 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 znakova
  • advanced.temperature - između 0.0 i 1.0
  • chatMemory.summariesToKnowledgeRatio - ceo broj između 10 i 90 (procenat, korak 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - između 0 i 500
  • appearance.footerMarkdown - najviše 255 znakova
  • humanSupport.enabled=true zahteva da polje humanSupport.email bude postavljeno
  • leadCollection.enabled=true zahteva da barem jedno od polja leadCollection.emailEnabled ili leadCollection.phoneEnabled bude postavljeno na true; koji god kanal je uključen, potrebna je i njegova oznaka, kao i leaveDetailsMessage i thankYouMessage
  • advanced.chatContextSize se 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.avatarUrl i whiteLabel.whitelabelLogoUrl su 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 multipart avatar / whitelabel_logo delove - 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 apiKey koji 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):

  • data JSON deo (opciono) - podaci za ažuriranje. Šaljite samo ako želite da promenite polja. Izostavite u potpunosti ako želite samo da otpremite avatar ili logo.
  • avatar deo sa fajlom (opciono) - zamena avatara
  • whitelabel_logo deo 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}
}
  • subscriptionType je identifikator trenutnog plana naloga napisan malim slovima (your-plan-id je 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 / remaining predstavljaju 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 / remaining broje 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šeni rateLimitPerMinute ako 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.