Prezentare generală a Management API
Management API este destinat activităților de back-office care nu implică trimiterea de mesaje de chat:
- crearea programatică a unui bot prin
POST /v1/management/bots - citirea datelor unui bot specific pe care îl dețineți prin
GET /v1/management/bots/{bot_id} - actualizarea unui bot specific prin
PATCH /v1/management/bots/{bot_id} - citirea datelor privind utilizarea abonamentului prin
GET /v1/usage
Cheile Management sunt asociate contului dumneavoastră, nu unui bot anume. Acestea sunt separate în mod deliberat de cheile Bot Talk, astfel încât o cheie de chat compromisă să nu poată modifica roboții dumneavoastră și să nu poată citi datele de facturare.
URL de bază
https://api.chatlab.com/aichat
Toate endpointurile din acest articol sunt relative la acest URL de bază.
Noțiuni introductive
- Deschideți aplicația de administrare și mergeți la Account Settings > Management API (Setări cont > Management API).
- Faceți clic pe Create Management Key (Creare cheie Management), introduceți un nume, opțional configurați lista de permisiuni IP (IP whitelist) și limita de viteză (rate limit), apoi trimiteți formularul.
- Copiați cheia completă din fereastra modală de confirmare. Textul necriptat este afișat o singură dată.
O cheie arată sub forma mk_abcdefghijklmnopqrstuvwxyz012345. Prefixul mk_ o deosebește de cheile Bot Talk (ck_).
Autentificare
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Trimiterea unei chei mk_ către /v1/chat (sau orice alt endpoint Bot Talk) returnează eroarea 403 key_type_not_allowed. Trimiterea unei chei ck_ către /v1/management/* returnează aceeași eroare.
Limite
- Maximum 5 chei Management API active per utilizator
- Maximum 10 cereri pe minut per cheie (algoritm token bucket, capacitate 10, reumplere lină la ~1 token la fiecare 6 secunde). Se poate configura o valoare mai mică în momentul creării - dacă setați o valoare mai redusă pentru
rateLimitPerMinute, limita scade, iar viteza de reumplere se scalează corespunzător.
Permisiuni
Fiecare cheie Management deține orice subset din următoarele trei permisiuni. Cel puțin una trebuie selectată la crearea cheii; în caz contrar, cererea este respinsă cu eroarea 400 invalid_request_error. Apelarea unui endpoint cu o cheie care nu deține permisiunea necesară returnează 403 insufficient_permissions.
bot_read- necesară pentruGET /v1/management/bots/{bot_id}bot_management- necesară pentruPOST /v1/management/botsșiPATCH /v1/management/bots/{bot_id}usage- necesară pentruGET /v1/usage
Structura corpului: secțiuni imbricate care reflectă filele din interfața de administrare
Metodele POST și PATCH acceptă un corp JSON grupat în 13 secțiuni. Fiecare secțiune corespunde unei subfile din bara laterală Bot Settings (Setări bot) din aplicația de administrare, astfel încât cheile JSON se aliniază cu filele vizibile: dacă schimbați consent.humanSupportRequirePolicyAccept prin API, veți vedea cum același comutator se modifică în fila Consent & Privacy (Consimțământ și confidențialitate) din aplicația de administrare.
role- profilul botului (persona), promptul brut, lungimea răspunsului, limba, contextul site-ului web / al companiei (fila Role & Behavior [Rol și comportament])conversation- mesajul de întâmpinare, rafinarea întrebărilor, continuitatea conversației, comutatorul pentru evaluare + sfaturile подсказка (tooltips), conținutul întrebărilor sugerate + întrebări suplimentare dinamice (fila Chat Conversation [Conversație pe chat])chatMemory- comutatorul pentru memoria chatului, prompturile de rezumat, alocarea contextului (fila Summaries & Memory [Rezumate și memorie])appearance- culori, texte, dimensiuni, CSS personalizat, ecranul de întâmpinare, stilul întrebărilor sugerate, comportamentul de deschidere automată, simularea tastării umane, markdown pentru subsol (fila Appearance [Aspect])humanSupport- formularul de contact uman (fila Human Contact Form [Formular de contact uman])leadCollection- formularul de colectare a leadurilor (fila Lead Collection [Colectare leaduri])liveChat- transferul către chatul live (fila Live Chat)consent- toate cele patru comutatoare de consimțământ pentru politica de confidențialitate, plus textul ecranului de consimțământ (fila Consent & Privacy [Consimțământ și confidențialitate])whiteLabel- ascunderea logoului, linkul personalizat pentru logo, găzduirea pe domeniu personalizat (fila Whitelabel)security- domenii permise, filtru antispam, limite de viteză pentru conversație (fila Security [Securitate])voice- introducerea vocală și conversațiile vocale: model, voce, limbi, prompt, durata maximă (fila Voice Conversation [Conversație vocală])multilingual- modul multilingv, limba de bază, limbile oferite, gestionarea limbii bazei de cunoștințe (fila Languages [Limbi])advanced- modelul LLM, temperatura, dimensiunea contextului, limita mesajelor botului, configurarea regională internă, Offer Cards (fila Model & Advanced [Model și avansat])
Doar name se află la nivelul superior, deoarece acesta identifică botul și nu aparține unei file anume.
Bara laterală Bot Settings conține în prezent 15 subfile, iar 13 dintre ele corespund secțiunilor de mai sus. Cele două subfile care nu au o secțiune corespondentă sunt Flow și Actions - ambele fiind prezentate mai jos la secțiunea „În afara ariei API-ului”. Cele 13 care au corespondență sunt Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation și Languages.
Corpul cererii și corpul răspunsului utilizează aceeași structură. Răspunsul adaugă două elemente suplimentare:
meta- doar pentru citire (read-only): ID-ul botului și marcajele temporale. Eliminați acest obiect pentru a transforma un răspuns GET într-un corp POST valid.apiKey- prezent doar la creare - cheia Bot Talk API nou generată pentru botul respectiv.
Două câmpuri din cadrul structurii partajate sunt read-only - sunt returnate în răspuns, însă sunt ignorate dacă încercați să le trimiteți prin POST/PATCH:
appearance.avatarUrl- adresa URL publică completă a imaginii de avatar a botului (de exempluhttps://api.chatlab.com/aichat/content/avatar_xyz.png). Apelați direct prin GET pentru a descărca fișierul. Pentru a-l schimba, încărcați un fișier nou prin intermediul părții multipartavatar(consultați PATCH).whiteLabel.whitelabelLogoUrl- adresa URL publică completă a logoului din antetul white-label. Urmează același principiu caavatarUrl. Pentru a-l schimba, încărcați un fișier nou prin intermediul părții multipartwhitelabel_logo(consultați PATCH).
Ambele adrese URL utilizează schema + gazda + calea de context ale cererii curente, astfel încât, în cazul unui domeniu personalizat white-label, acestea sunt afișate având rădăcina pe domeniul respectiv (de exemplu https://api.acme.com/aichat/content/...).
Trimiteți valoarea null pentru o secțiune dacă doriți să o omiteți la un apel PATCH; trimiteți null pentru un câmp individual dintr-o secțiune pentru a omite doar acel câmp. Un null la nivel de câmp nu șterge niciodată o valoare salvată - semnifică doar comanda „nu modifica”.
Rolul și construirea promptului
Promptul de sistem pe care îl primește LLM-ul este generat într-unul din două moduri, în funcție de role.role. Înțelegerea ramurii pe care vă aflați vă ajută să știți ce câmpuri sunt luate în considerare și care sunt stocate, dar ignorate.
Ramura A - role.role este CUSTOMER_SUPPORT, SALES sau LEAD_COLLECTION_AGENT (pe bază de șablon)
Backend-ul generează promptul dintr-un șablon integrat și ignoră complet câmpul role.rawPrompt (valoarea rămâne stocată pe bot, dar nu este utilizată). Șablonul include:
role.role- eticheta rolului (de exemplu „Customer Support”) și instrucțiunile specifice rolului, adăugate automatname- numele botului, introdus în propoziția introductivărole.language- valoarea"Auto Detect"setează botul să preia limba utilizatorului; orice altă valoare (de exemplu"English","Polish") devine „Output in {language}, unless user uses another language”role.responseLength- asociat cu un număr țintă de cuvinte:Concise≈ 50 de cuvinte,Normal≈ 100,Detailed≈ 200role.websiteAddress- opțional; dacă nu este gol, se adaugă sub forma „for the users of the website {url}”role.companyDescription- opțional; dacă nu este gol, este adăugat ca un paragraf suplimentar înaintea instrucțiunilor privind rolul
Aceasta este ramura recomandată pentru majoritatea roboților - beneficiați automat de comportamente optimizate pentru rol și de mecanisme de siguranță integrate.
Ramura B - role.role este CUSTOM (prompt furnizat de apelant)
Backend-ul utilizează role.rawPrompt exact așa cum a fost transmis ca întreg prompt de sistem. Câmpurile responseLength, language, websiteAddress, companyDescription sunt stocate, dar nu sunt inserate în prompt - dacă doriți ca oricare dintre acestea să influențeze comportamentul botului, trebuie să le includeți manual în textul din rawPrompt. Instrucțiunile privind tonul și mecanismele de siguranță specifice rolurilor nu sunt adăugate; dumneavoastră controlați întregul prompt.
Folosiți CUSTOM numai atunci când promptul bazat pe șablon nu corespunde cazului dumneavoastră de utilizare (de exemplu dacă aveți nevoie de o identitate foarte specifică unui domeniu, de propriile restricții de siguranță sau de un format de ieșire non-standard).
Câmpuri de tip enum / valori fixe
Mai multe câmpuri acceptă doar un set fix de valori de tip șir de caractere. Trimiterea oricărei valori din afara listei este respinsă cu eroarea 400 validation_failed, iar calea câmpului este indicată în error.param. Valorile sunt sensibile la majuscule și minuscule (case-sensitive).
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- denumirea completă în limba engleză a limbii din meniul drop-down de administrare, de exempluAuto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindiși aproximativ alte 80. Valoarea este stocată identic și introdusă în șablonul de prompt; prin urmare, codurile ISO din două litere (en,pl) și alte valori din afara listei nu sunt respinse de API, dar vor genera o instrucțiune incorectă precum „Output in en, unless...”. Dacă este omis la creare, valoarea implicită esteAuto Detect.advanced.model- consultați secțiunea „Modele de text AI” de mai jos; setul disponibil depinde de limitele contului dumneavoastră, iar trimiterea oricărei valori pe care contul dumneavoastră nu o poate utiliza returnează400 invalid_parameteradvanced.chatContextSize-8000,16000,32000. Valori supuse limitelor contului dumneavoastră; valorile mai mari sunt limitate automat fără avertismentchatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minifiedappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- comutator boolean. Valoareatrueobligă utilizatorul să completeze formularul de lead înainte de a iniția o conversație;falsepermite AI-ului să decidă când să afișeze formularul (implicit).
Câmpuri structurate și intervale de valori
Câmpuri care par a fi simple șiruri de caractere sau numere, dar care au structuri specifice, intervale sau particularități în interfața de administrare pe care este util să le cunoașteți.
-
advanced.temperature- intervalul acceptat este între0.0și1.0, corespunzând glisorului din interfața de administrare. Valorile din afara acestui interval sunt respinse cu eroarea400 validation_failed. -
chatMemory.summariesToKnowledgeRatio- procent întreg, între10și90, cu pas de10. Controlează procentul din contextul de chat rezervat pentru rezumatele istorice ale clientului în comparație cu restul elementelor (bază de cunoștințe, conversația curentă, instrucțiuni). Valoarea implicită este50. Valorile din afara intervalului10-90sunt respinse cu eroarea400 validation_failed. Se aplică doar dacăchatMemory.enabled=trueȘIchatMemory.summaryConversationsEnabled=true. -
liveChat.schedule- JSON codificat ca șir de caractere, nu ca obiect JSON imbricat la transmitere. Serverul stochează șirul brut exact așa cum este trimis; interfața de administrare îl parsează pe partea de client la afișarea editorului de program. Odată parsat, șirul este structurat cu o intrare pentru fiecare zi a săptămânii plus o cheietimezone:- fiecare cheie corespunzătoare unei zile (
monday-sunday) trimite către{enabled: boolean, from: "H:MM", to: "H:MM"}în format de 24 de ore timezonereprezintă un nume de fus orar IANA (de exemplu"Europe/Warsaw","America/New_York")
Exemplu de valoare (observați ghilimelele exterioare și ghilimelele interioare mascate - este un singur câmp de tip șir de caractere, nu un obiect imbricat):
"{\"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\"}"În afara orelor specificate, vizitatorului i se afișează textul din
liveChat.outOfHoursMessage, iar opțiunea de transfer către chatul live este blocată. Validarea structurii interne se execută doar pe partea de client în interfața de administrare - un JSON incorect formatat sau cheile nerecunoscute sunt acceptate de API pur și simplu ca șir de caractere și vor genera o eroare de randare atunci când un utilizator uman va deschide ulterior botul în panoul de administrare. Validați structura local înainte de a o trimite. - fiecare cheie corespunzătoare unei zile (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- etichete scurte afișate pe butoanele 👍 / 👎 de lângă fiecare răspuns AI cândconversation.conversationRatingEnabled=true. Textul implicit este „I like the response” / „I don't like the response”. Este vizibil pentru utilizatorii finali. -
whiteLabel.hideRoboAssistLogo- funcție white-label, supusă limitelor contului dumneavoastră. Ascunde linia de subsol „Powered by ChatLab”. Dacă contul dumneavoastră nu include funcția white-label, valoarea este stocată, dar ignorată, iar subsolul se afișează întotdeauna. -
whiteLabel.whitelabelLogoLink- funcție white-label, supusă limitelor contului dumneavoastră. URL-ul destinație la clic pentru logoul personalizat cândhideRoboAssistLogo=trueși a fost încărcat un fișier de logo personalizat prin partea multipartwhitelabel_logo. -
appearance.simulateHumanTypingDelay- secunde (nu milisecunde), număr întreg între0și200. Pauza dintre mesajele succesive ale botului cândsimulateHumanTyping=true. Valoarea implicită este5. -
appearance.autoOpenChatDelaySeconds- secunde, număr întreg. Întârzierea până când widgetul se deschide automat atunci cândautoOpenChat=trueșiautoOpenChatDelay=true. -
advanced.internalLocale- codul de regiune/limbă IETF în formatulll_CC(cu linie de subliniere, NUll-CCcu cratimă). Valorile acceptate fac parte dintr-o listă fixă de aproximativ 95 de configurări regionale: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 multe altele. Trimiterea exclusivă a unui cod din două litere ("en") sau a unui cod BCP-47 ("en-US") nu este permisă. Valoarea implicită esteen_US. Aceasta este configurarea regională utilizată pentru formatarea datelor și a numerelor în elementele grafice ale widgetului, distinctă derole.language(limba de redactare a răspunsurilor conversaționale ale botului). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- numere întregi (trimise ca valori numerice JSON, de exemplu30, nu ca"30"). Valoarea0dezactivează limita de mesaje per IP. Când valoarea este diferită de zero, widgetul impune limita de N mesaje pe durata specificată în secunde înainte de a afișa vizitatorului mesajulsecurity.talkMessagesRateLimitHitMessage. -
advanced.botMessagesLimit- număr întreg (valoare numerică JSON, de exemplu1000). Valoarea0înseamnă „fără limită”; în caz contrar, trebuie să fie un multiplu de 1000 (1000,2000,10000...). Valorile precum100sau1500sunt respinse cu eroarea400 validation_failed. Ulterior, valoarea este plafonată automat conform limitei stabilite pe contul dumneavoastră.
Modele de text AI (advanced.model)
Trimiteți valoarea exactă utilizată de API (coloana din stânga marcată cu apostrof invers). Numele afișat în interfața de administrare este menționat în paranteze. Limitele contului dumneavoastră dictează ce opțiuni pot fi selectate; dacă trimiteți un model pe care contul dumneavoastră nu îl poate folosi, se va returna eroarea 400 invalid_parameter. Valoarea implicită pentru roboții noi este 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)
Referință câmpuri (schema completă a cererii)
Fiecare câmp transmis prin rețea, alături de tipul său, restricții și o scurtă descriere. Semantică PATCH: orice câmp omis (sau trimis ca null) lasă neatinsă valoarea stocată. Aceeași structură este utilizată și pentru răspuns (fără conținutul binar multipart; plus blocul needitabil meta prezent în fiecare răspuns și apiKey prezent doar în răspunsul de creare).
Nivel superior
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
name |
string | max 150, obligatoriu la creare | Numele afișat al botului |
role |
object | Consultați § role | |
conversation |
object | Consultați § conversation | |
chatMemory |
object | Consultați § chatMemory | |
appearance |
object | Consultați § appearance | |
humanSupport |
object | Consultați § humanSupport | |
leadCollection |
object | Consultați § leadCollection | |
liveChat |
object | Consultați § liveChat | |
consent |
object | Consultați § consent | |
whiteLabel |
object | Consultați § whiteLabel | |
security |
object | Consultați § security | |
advanced |
object | Consultați § advanced |
Elemente adăugate exclusiv în răspuns:
meta: { id, createdAt, updatedAt }- doar citire.apiKey- string, prezent doar în răspunsulPOST /v1/management/bots- cheia Bot Talk nou generată pentru noul bot, returnată o singură dată.
§ role
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Preset pentru rol; selectează șablonul de prompt (consultați „Construirea rolului și a promptului”) |
language |
string | numele complet în limba engleză a limbii (English, Polish, ...) sau Auto Detect |
Limba principală introdusă în șablonul de prompt |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Lungimea dorită a răspunsurilor AI |
websiteAddress |
string | Site web utilizat pentru contextul promptului | |
companyDescription |
string | Descrierea companiei utilizată pentru contextul promptului | |
rawPrompt |
string | Prompt de sistem personalizat - utilizat ca atare doar atunci când role=CUSTOM |
§ conversation
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
welcomeMessage |
string | Primul mesaj afișat vizitatorului la deschidere | |
queryRefinementEnabled |
boolean | Dacă este true, rafinează întrebarea vizitatorului înainte de preluarea prin RAG | |
conversationContinuityEnabled |
boolean | Dacă este true, vizitatorii care revin își reiau ultima conversație | |
conversationRatingEnabled |
boolean | Dacă este true, afișează evaluarea cu degetul în sus/jos la mesajele botului | |
positiveRatingTooltip |
string | Tooltip pe butonul de evaluare pozitivă | |
negativeRatingTooltip |
string | Tooltip pe butonul de evaluare negativă | |
suggestedQuestions |
string | Întrebări sugerate / formule de deschidere a conversației, separate prin linii noi | |
dynamicSuggestedFollowups |
boolean | Dacă este true, AI propune sugestii de continuare după fiecare răspuns | |
dynamicFollowupsAutoIcons |
boolean | Dacă este true, AI alege automat pictograme emoji pentru sugestiile dinamice |
§ chatMemory
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
enabled |
boolean | Comutator principal pentru funcția de memorie a chatului | |
summaryConversationsEnabled |
boolean | Păstrează rezumatele fiecărei conversații | |
conversationSummaryPrompt |
string | Prompt personalizat utilizat pentru a rezuma fiecare conversație | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Indică dacă se utilizează promptul de rezumare implicit sau cel personalizat |
clientSummaryPrompt |
string | Prompt personalizat utilizat pentru a rezuma profilul clientului de-a lungul conversațiilor | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Prompt implicit vs personalizat pentru profilul clientului |
summariesToKnowledgeRatio |
int | 10-90, pas de 10 |
Procentul din fereastra de context a chatului alocat rezumatelor comparativ cu baza de cunoștințe RAG |
§ appearance
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
launcherColor |
string (hex) | Culoarea de fundal a lansatorului (pictograma de chat) | |
headerColor |
string (hex) | Culoarea de fundal a antetului chatului | |
titleColor |
string (hex) | Culoarea titlului din antetul chatului | |
subtitleColor |
string (hex) | Culoarea subtitlului din antetul chatului | |
clientMessageBubbleColor |
string (hex) | Culoarea bulei de mesaj a vizitatorului | |
clientMessageTextColor |
string (hex) | Culoarea textului mesajului vizitatorului | |
responseMessageBubbleColor |
string (hex) | Culoarea bulei de răspuns a botului | |
responseMessageTextColor |
string (hex) | Culoarea textului de răspuns al botului | |
chatSubheader |
string | Text secundar afișat sub titlul chatului | |
senderPlaceholder |
string | Text substituent (placeholder) în câmpul de introducere a mesajului | |
resetConversationTooltip |
string | Tooltip pe butonul „reset conversation” | |
chatAlignment |
string (enum) | ∈ {left, right} |
Pe ce parte a ecranului este fixat chatul |
launcherBottomMargin |
int | 0-500 |
Distanța lansatorului față de marginea de jos (px) |
launcherSideMargin |
int | 0-500 |
Distanța lansatorului față de marginea laterală (px) |
displayShadow |
boolean | Umbră exterioară sub widget | |
customCss |
string | CSS brut injectat în cadrul iframe al widgetului | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Modul în care se deschid linkurile din mesajele botului |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified} |
Stare minimizată: pictogramă de lansare sau bară compactă de trimitere |
chatDesktopWidthPx |
int | Lățimea widgetului pe desktop | |
chatDesktopHeightPx |
int | Înălțimea widgetului pe desktop | |
chatMobileSizePercent |
int | Dimensiunea widgetului pe mobil ca procent din viewport | |
messageFontSize |
int | Dimensiunea fontului pentru textul mesajelor (px) | |
showChatbotBubblesDesktop |
boolean | Afișează bulele plutitoare de atragere a atenției pe desktop | |
showChatbotBubblesMobile |
boolean | Afișează bulele plutitoare de atragere a atenției pe mobil | |
chatbotBubblesDelaySeconds |
int | Întârzierea înainte de apariția bulelor de atragere a atenției (secunde) | |
launcherIconFullSize |
boolean | Randează pictograma personalizată de lansare pe întreaga suprafață în loc de format încadrat | |
welcomeScreenEnabled |
boolean | Afișează ecranul de bun venit (Welcome Screen) în loc de acces direct la chat | |
welcomeScreenQuestionsLabel |
string | Etichetă afișată deasupra întrebărilor sugerate pe ecranul de bun venit | |
welcomeScreenHideHumanContactForm |
boolean | Ascunde acțiunea formularului de contact uman din antet cât timp este afișat Welcome Screen. Aceasta reapare după primul mesaj al vizitatorului. Pentru boții creați înainte de 2026-09-02, valoarea implicită este true |
|
welcomeScreenHideLiveChat |
boolean | Ascunde acțiunea de live chat din antet cât timp este afișat Welcome Screen. Aceasta reapare după primul mesaj al vizitatorului. Pentru boții creați înainte de 2026-09-02, valoarea implicită este true |
|
headerActionsLayout |
string | DROPDOWN |
Modul în care live chatul și formularul de contact uman sunt prezentate în antetul chatului: ICONS (câte o pictogramă separată pentru fiecare) sau DROPDOWN (grupate în meniul antetului). Pentru boții creați înainte de 2026-09-02, valoarea implicită este ICONS |
stackSuggestedQuestions |
boolean | Aranjează vertical întrebările sugerate (în loc de dispunere alăturată) | |
suggestedQuestionsFontSize |
int | Dimensiunea fontului pentru butoanele de întrebări sugerate (px) | |
suggestedQuestionsTextColor |
string (hex) | Culoarea textului pentru butoanele de întrebări sugerate | |
suggestedQuestionsBackgroundColor |
string (hex) | Culoarea de fundal a butoanelor de întrebări sugerate | |
autoOpenChat |
boolean | Deschide automat chatul pe desktop | |
autoOpenChatOnMobiles |
boolean | Deschide automat chatul pe mobil | |
autoOpenChatDelay |
boolean | Folosește o întârziere înainte de deschiderea automată | |
autoOpenChatDelaySeconds |
int | Întârzierea deschiderii automate (secunde) | |
simulateHumanTyping |
boolean | Împarte răspunsul botului în bule cu animație de tastare | |
simulateHumanTypingDelay |
int | 0-200 |
Întârzierea dintre bulele de mesaje (secunde) |
footerMarkdown |
string | max 255 | Formatare Markdown personalizată afișată în subsolul chatului |
avatarUrl |
string | read-only | URL public complet al avatarului; pentru a-l schimba, încărcați prin componenta multipart avatar |
Multipart la POST/PATCH: avatar (fișier). Corpurile de răspuns la GET omit conținutul fișierului - prin rețea este transmis doar URL-ul.
§ humanSupport
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
enabled |
boolean | Comutator pentru fluxul de asistență umană | |
email |
string | obligatoriu (la creare strictă) când enabled=true |
Adresa care primește e-mailurile de asistență umană |
dialogMessage |
string | Mesaj de încurajare afișat deasupra formularului | |
thankYouMessage |
string | Confirmare afișată după trimitere | |
emailMessageSubjectTemplate |
string | Șablon pentru subiectul e-mailului trimis agentului | |
emailMessageContentTemplate |
string | Șablon pentru corpul e-mailului trimis agentului | |
emailPlaceholder |
string | Placeholder în câmpul de e-mail | |
messagePlaceholder |
string | Placeholder în zona de introducere a mesajului | |
emailWithConversationContent |
boolean | Dacă este true, include transcrierea conversației în corpul e-mailului | |
customFormId |
long | ID-ul unui formular personalizat existent | Înlocuiește formularul de contact integrat cu un formular personalizat. null păstrează formularul integrat |
customFormMapping |
string | șir codificat JSON | Asociază câmpurile formularului personalizat cu câmpurile de e-mail pentru asistență umană |
requirePolicyAccept se află în consent.humanSupportRequirePolicyAccept, nu aici.
§ leadCollection
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
enabled |
boolean | Comutator pentru formularul de colectare de lead-uri | |
nameEnabled |
boolean | Colectează numele | |
nameLabel |
string | Etichetă pe câmpul pentru nume | |
emailEnabled |
boolean | Colectează e-mailul | |
emailLabel |
string | obligatoriu (la creare strictă) când enabled=true ȘI emailEnabled=true |
Etichetă pe câmpul pentru e-mail |
phoneEnabled |
boolean | Colectează telefonul | |
phoneLabel |
string | obligatoriu (la creare strictă) când enabled=true ȘI phoneEnabled=true |
Etichetă pe câmpul pentru telefon |
leaveDetailsMessage |
string | obligatoriu (la creare strictă) când enabled=true |
Mesaj prin care vizitatorul este încurajat să își lase datele de contact |
thankYouMessage |
string | obligatoriu (la creare strictă) când enabled=true |
Confirmare afișată după trimitere |
requireBeforeNewConversation |
boolean | Dacă este true, formularul trebuie trimis înainte de începerea chatului; dacă este false, AI decide când să afișeze formularul |
|
emailNotificationEnabled |
boolean | Trimite un e-mail proprietarului de fiecare dată când este colectat un lead | |
emailNotificationAddress |
string | Destinatarul notificării (implicit adresa de e-mail a contului) | |
emailWithConversationContent |
boolean | Dacă este true, include transcrierea conversației în notificare |
Regulă strictă de creare între câmpuri: enabled=true necesită cel puțin una dintre opțiunile emailEnabled sau phoneEnabled. requirePolicyAccept se află în consent.leadCollectionRequirePolicyAccept, nu aici.
| customFormId | long | ID-ul unui formular personalizat existent | Înlocuiește formularul integrat de lead-uri cu un formular personalizat. null păstrează formularul integrat |
| customFormMapping | string | șir codificat JSON | Asociază câmpurile formularului personalizat cu name / email / phone |
§ liveChat
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
enabled |
boolean | Comutator pentru funcția Live Chat | |
infoMessage |
string | Mesaj explicativ înainte de preluare | |
startMessage |
string | Mesaj afișat la începerea sesiunii live | |
endMessage |
string | Mesaj afișat la încheierea sesiunii live | |
nameLabel |
string | Etichetă pe câmpul de nume din pre-formularul de live chat | |
emailLabel |
string | Etichetă pe câmpul de e-mail din pre-formularul de live chat | |
schedule |
string | șir codificat JSON (comutatoare pentru zilele săptămânii + from/to + timezone) |
Programul de funcționare pentru live chat - consultați „Câmpuri structurate și intervale” pentru structura exactă |
outOfHoursMessage |
string | Mesaj afișat în afara orelor de program conform orarului | |
closeModalMessage |
string | Titlul ferestrei modale „închideți sesiunea de live chat?” | |
closeModalConfirmLabel |
string | Eticheta butonului de confirmare din fereastra modală de închidere | |
closeModalCancelLabel |
string | Eticheta butonului de anulare din fereastra modală de închidere | |
closeModalTooltipText |
string | Tooltip pe elementul de închidere a chatului | |
operatorHasJoinedLabel |
string | Etichetă afișată atunci când se alătură un operator | |
operatorDidNotJoinInTimeLabel |
string | Etichetă afișată dacă niciun operator nu se alătură în intervalul de expirare | |
waitingForOperatorToJoinLabel |
string | Etichetă afișată în timpul așteptării unui operator | |
waitingForOperatorSeconds |
int | Timp de expirare pentru preluarea de către un operator (secunde) | |
redirectToHumanSupportForm |
boolean | Dacă este true, redirecționează către formularul Human Support atunci când niciun operator nu preia conversația | |
missedEmailEnabled |
boolean | implicit true |
Trimite un e-mail proprietarului botului atunci când o cerere de live chat a rămas fără răspuns. Rămâne nesetat pe boții vechi, fiind interpretat ca activat |
requirePolicyAccept se află în consent.liveChatRequirePolicyAccept, nu aici.
§ consent
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Solicită acceptarea politicii de confidențialitate înainte de începerea unei conversații noi | |
humanSupportRequirePolicyAccept |
boolean | Solicită acceptarea politicii de confidențialitate înainte de trimiterea formularului de asistență umană | |
leadCollectionRequirePolicyAccept |
boolean | Solicită acceptarea politicii de confidențialitate înainte de trimiterea formularului de colectare de lead-uri | |
liveChatRequirePolicyAccept |
boolean | Solicită acceptarea politicii de confidențialitate înainte de începerea unei sesiuni de live chat | |
newConversationConsentDescription |
string | Text introductiv pentru ecranul de consimțământ la începutul conversației | |
privacyPolicyConsentCheckboxLabel |
string | Etichetă lângă caseta de bifare pentru consimțământ (conține de obicei un link către politica de confidențialitate) |
§ whiteLabel
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
hideRoboAssistLogo |
boolean | funcționalitate White Label; supusă limitelor contului | Ascunde sigla implicită ChatLab din subsol |
whitelabelLogoLink |
string | funcționalitate White Label; supusă limitelor contului | URL către care trimite sigla personalizată din subsol |
assignToCustomDomain |
boolean | condiționat de funcția CUSTOM_DOMAIN |
Găzduiește chatul pe domeniul personalizat configurat |
whitelabelLogoUrl |
string | read-only | URL public complet al siglei white label; pentru a-l schimba, încărcați prin componenta multipart whitelabel_logo |
Multipart la POST/PATCH: whitelabel_logo (fișier). Corpurile de răspuns la GET omit conținutul fișierului - prin rețea este transmis doar URL-ul.
§ security
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
allowedDomains |
string | Listă separată prin virgulă a domeniilor autorizate să integreze widgetul (gol = fără listă albă) | |
spamFilterEnabled |
boolean | Activează filtrul anti-spam pentru fiecare bot pe mesajele primite | |
countryFilterMode |
string | BLACKLIST sau WHITELIST |
Modul în care sunt interpretate listele de țări. Listele propriu-zise rămân accesibile doar administratorilor |
talkMessagesRateLimit |
int | >= 0; 0 dezactivează |
Numărul maxim de mesaje permise de la utilizator în intervalul de limitare |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Durata intervalului de limitare a ratei (secunde) |
talkMessagesRateLimitHitMessage |
string | Mesaj afișat vizitatorului la atingerea limitei de mesaje |
§ voice
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
inputEnabled |
boolean | Permite vizitatorului să dicteze mesaje (speech to text) | |
conversationEnabled |
boolean | necesită funcția vocală inclusă în abonament | Activează conversațiile vocale complete |
voiceId |
string | ID de voce specific furnizorului (de ex. alloy) |
Ce voce sintetică va vorbi |
model |
string | de ex. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Model vocal. Facturat pe minut, tarifele diferă în funcție de model |
turnDetection |
string | specific furnizorului | Modul de detectare a rândului la replică |
audioPrompt |
string | Prompt suplimentar de sistem utilizat exclusiv pentru intervențiile vocale | |
welcomeMessage |
string | Mesajul introductiv rostit | |
language |
string | cod de limbă | Limba principală pentru voce |
additionalLanguages |
string | coduri de limbă separate prin virgulă | Limbi suplimentare acceptate de agentul vocal |
maxDurationSeconds |
int | Limită strictă a duratei unei singure conversații vocale | |
maxDurationMessage |
string | Mesaj afișat la atingerea limitei de durată |
§ multilingual
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
enabled |
boolean | Comutator pentru modul multilingv | |
mode |
string | AUTODETECT sau un mod cu listă fixă |
Modul în care botul alege limba de răspuns |
baseLanguage |
string | cod de limbă | Limba în care sunt redactate textele proprii ale botului |
languages |
string | coduri de limbă separate prin virgulă | Limbile puse la dispoziția vizitatorului |
knowledgeLanguageMode |
string | Cum sunt tratate cunoștințele din alte limbi | |
knowledgeLanguageFallback |
string | cod de limbă | Limba de rezervă utilizată când nu se găsește nicio potrivire |
§ advanced
| Câmp | Tip | Restricție | Descriere |
|---|---|---|---|
model |
string | supus limitelor contului; consultați „Modele de text AI” de mai sus | Identificator LLM (de ex. 5-MINI) |
temperature |
decimal | 0.0-1.0 |
Temperatura de eșantionare (corespunde cursorului din interfață) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; limitat automat la limita contului dumneavoastră |
Fereastra de tokenuri pentru istoricul conversației |
botMessagesLimit |
long | 0 sau multiplu de 1000 (de ex. 1000, 2000, 10000) |
Numărul maxim de răspunsuri ale botului pe conversație (0 = fără limită) |
internalLocale |
string | cod de localizare în format ll_CC |
Localizarea pentru etichetele interfeței widgetului (distinctă de role.language) |
productsViewEnabled |
boolean | Dacă este true, afișează Offer Cards pentru e-commerce în interiorul chatului | |
includeProductsInKnowledgeBase |
boolean | Dacă este true, indexează catalogul de produse ca parte a bazei de cunoștințe |
În afara ariei de acoperire a API-ului
Interfața de administrare include câteva secțiuni care în mod deliberat nu sunt expuse în această versiune a Management API:
- Fila Flow (Flux) - editorul vizual Conversation Flow (stadii și tranziții). Nu este expus prin Management API.
- Fila Actions (Acțiuni) - integrările gestionate de e-commerce / rezervări, AI Search și funcțiile API personalizate. Apelarea instrumentelor nu a făcut niciodată parte din Management API.
- Generatorul propriu-zis de formulare personalizate - crearea și editarea formularelor personalizate nu sunt expuse. Puteți, totuși, să atașați un formular existent la un bot prin intermediul
leadCollection.customFormIdșihumanSupport.customFormId. - Pictogramele personalizate de deschidere / închidere a chatului -
customLauncherIconVisible,openChatIcon,closeChatIcon. API-ul expune doar componentele multipart principaleavatarșiwhitelabel_logo. - Listele de IP-uri și țări - intrările propriu-zise sunt rezervate exclusiv administratorilor. Este expus doar modul de interpretare, prin
security.countryFilterMode.
Puncte finale
POST /v1/management/bots
Creați un bot nou. Sunt acceptate două tipuri echivalente de Content-Type; alegeți-l pe cel mai convenabil.
Modul A - JSON simplu (recomandat atunci când nu este nevoie să încărcați un avatar / logo în aceeași cerere):
Content-Type: application/json- Corpul cererii este direct JSON-ul de configurare a botului (fără wrapper
data) - Fișierele (avatar / logo) pot fi încărcate ulterior printr-un al doilea apel
PATCHfolosind modul B
Modul B - multipart/form-data (folosiți-l când încărcați fișiere în aceeași cerere):
Content-Type: multipart/form-data; boundary=...- Partea JSON
data(obligatorie,Content-Type: application/json) - configurarea botului în structura imbricată descrisă mai sus - Partea de fișier
avatar(opțională) - imaginea avatar a botului - Partea de fișier
whitelabel_logo(opțională) - logo-ul white-label (se aplică numai dacă contul dumneavoastră include funcția White Label)
În JSON este obligatoriu doar câmpul name; toate celelalte câmpuri revin la aceleași valori implicite pe care le-ar seta asistentul configurator din interfața de administrare.
Corpul complet al cererii
Acesta este JSON-ul maximal data - fiecare secțiune fiind completată. Trimiteți doar secțiunile care vă interesează; toate celelalte preiau valori implicite.
{
"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
}
}
Reguli de validare cu propriile mesaje de eroare:
name- obligatoriu, maximum 150 de caractereadvanced.temperature- între0.0și1.0chatMemory.summariesToKnowledgeRatio- număr întreg între10și90(procente, pas de10)appearance.launcherBottomMargin,appearance.launcherSideMargin- între0și500appearance.footerMarkdown- maximum 255 de caracterehumanSupport.enabled=truenecesită setarea câmpuluihumanSupport.emailleadCollection.enabled=truenecesită ca cel puțin unul dintre câmpurileleadCollection.emailEnabledsauleadCollection.phoneEnabledsă fie setat pe true; canalul activat necesită, de asemenea, eticheta corespunzătoare, plus valorileleaveDetailsMessageșithankYouMessage- Câmpurile plafonate (
advanced.chatContextSize,advanced.botMessagesLimitetc.) sunt limitate automat la limitele contului dumneavoastră
Câmpurile a căror valoare este null pe server sunt omise din corpul JSON - transmisia conține doar câmpurile cu valori non-null.
Corpul complet al răspunsului (201)
Aceeași formă ca a cererii, plus blocul read-only meta și cheia de unică afișare apiKey la nivelul principal. URL-urile de fișiere read-only (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) sunt completate de server atunci când au fost încărcate părțile multipart corespunzătoare.
{
"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"
}
Câmpul apiKey apare doar la creare - este cheia Bot Talk nou generată, asociată noului bot. Textul simplu este afișat o singură dată și nu mai poate fi recuperat ulterior prin API; salvați-l imediat de partea dumneavoastră.
Antetul de răspuns Location conține URL-ul noului bot (/v1/management/bots/{id}).
Exemple curl
Modul A - JSON simplu (cel mai simplu):
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!"}}'
Modul B - multipart cu avatar:
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}
Returnează configurația actuală a unui bot pe care îl dețineți.
Exemplu curl
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Corpul complet al răspunsului (200)
Aceeași formă ca răspunsul POST, fără câmpul de unică afișare apiKey. Blocul meta este inclus. Returnează 404 not_found_error dacă botul nu există sau nu aparține contului dumneavoastră.
Avatarul curent și logo-ul white-label sunt expuse ca URL-uri complete read-only (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - având ca rădăcină aceeași schemă + gazdă + cale de context care a servit cererea. Preluarea octeților se face prin apeluri GET directe la respectivele URL-uri; pentru a înlocui oricare dintre fișiere, încărcați un fișier nou prin partea multipart avatar / whitelabel_logo din PATCH. Aceste câmpuri URL sunt ignorate dacă sunt trimise în corpul unei cereri.
{
"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"
}
}
Clonarea unui bot
Corpul cererii pentru POST /v1/management/bots și corpul răspunsului pentru GET /v1/management/bots/{bot_id} au aceeași structură, astfel încât clonarea este un proces în trei pași: trimiteți o cerere GET către botul sursă, eliminați câmpurile de identitate gestionate de server, apoi trimiteți rezultatul printr-o cerere POST.
1. Efectuați GET pe botul sursă.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Eliminați blocul de nivel superior meta. Obiectul meta (id, createdAt, updatedAt) este gestionat de server și este doar pentru citire - lăsarea lui în corpul cererii POST nu produce erori (serverul îl ignoră), dar eliminarea lui face intenția explicită și păstrează sarcina utilă curată. Opțional, editați câmpul name, astfel încât clona să se distingă de sursă.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Trimiteți prin POST corpul curățat pentru a crea clona. Consultați documentația de referință pentru POST /v1/management/bots de mai sus pentru structura completă a corpului și regulile de validare.
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d @clone-body.json
Răspunsul conține noul meta.id al botului, plus un apiKey nou generat (cheia Bot Talk pentru clonă). Cheia apiKey în text clar este returnată doar în acest răspuns de creare - copiați-o înainte de a închide corpul răspunsului; aceasta nu mai poate fi recuperată ulterior.
Două avertismente:
- Fișierele nu sunt clonate. Câmpurile
appearance.avatarUrlșiwhiteLabel.whitelabelLogoUrlsunt doar pentru citire și indică fișierele botului sursă. Dacă aveți nevoie de același avatar sau logo White Label pe clonă, descărcați fișierele de la adresele URL sursă și încărcați-le ca părți multipartavatar/whitelabel_logo- fie la cererea POST de creare (Modul B), fie printr-un apel PATCH ulterior. - Cheile Bot Talk nu sunt clonate. Fiecare bot are propriul grup de chei Bot Talk. Singura cheie
apiKeyreturnată de cererea POST de creare este singura generată automat; creați chei suplimentare din fila API (API tab) a botului, dacă este necesar.
PATCH /v1/management/bots/{bot_id}
Actualizați unul sau mai multe câmpuri ale unui bot pe care îl dețineți. Sunt modificate doar secțiunile / câmpurile prezente în JSON; tot ce este omis (sau trimis ca null) rămâne neschimbat. Se aplică semantica de actualizare parțială pentru fiecare câmp dintr-o secțiune trimisă.
Sunt acceptate două tipuri de conținut (Content-Type) echivalente (la fel ca la POST):
Modul A - JSON simplu (recomandat atunci când actualizați doar setări):
Content-Type: application/json- Corpul cererii este direct JSON-ul de actualizare (fără înveliș
data)
Modul B - multipart/form-data (utilizați la încărcarea fișierelor):
- Partea JSON
data(opțional) - actualizarea propriu-zisă. Trimiteți doar dacă doriți să modificați câmpuri. Omiteți complet dacă doriți doar să încărcați un avatar sau un logo. - Partea de fișier
avatar(opțional) - înlocuiește avatarul - Partea de fișier
whitelabel_logo(opțional) - înlocuiește logoul White Label (se aplică doar dacă contul dumneavoastră include funcția White Label)
Toate cele trei părți sunt opționale la PATCH, dar cel puțin una trebuie să fie prezentă pentru ca apelul să fie valid.
Corp complet al cererii (suprafață maximală)
Orice câmp acceptat de POST /v1/management/bots poate fi trimis și aici. Exemplul de mai jos reprezintă suprafața completă; în practică trimiteți doar cheile pe care doriți să le modificați (consultați secțiunea "Actualizare parțială minimală" de mai jos) - fiecare cheie omisă (sau trimisă ca null) lasă valoarea salvată neschimbată.
{
"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
}
}
Actualizare parțială minimală
Actualizați prin PATCH un singur câmp trimițând exact cheile pe care doriți să le modificați - restul datelor sunt păstrate.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Exemple de comenzi curl
Modul A - JSON simplu (cel mai ușor):
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"}}'
Modul B - multipart (la înlocuirea avatarului / logoului):
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'
Modul B - înlocuirea exclusivă a avatarului (fără modificări de câmpuri):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Corpul răspunsului (200)
Aceeași structură ca la GET /v1/management/bots/{bot_id} - configurația completă a botului după aplicarea actualizării parțiale, inclusiv blocul meta. Nu conține câmpul apiKey. Returnează 404 not_found_error dacă botul nu există sau nu aparține contului dumneavoastră.
Exemplul de mai jos ilustrează răspunsul primit după aplicarea actualizării din secțiunea Corp complet al cererii (suprafață maximală) de mai sus asupra botului din exemplul GET - câmpurile modificate reflectă noile valori, câmpurile neatinse sunt păstrate, iar meta.updatedAt se actualizează.
{
"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
Afișează utilizarea curentă a abonamentului pentru contul care deține cheia Management.
Corpul răspunsului (200)
{
"subscriptionType": "standard",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeeste identificatorul scris cu minuscule al planului curent asociat contului (de exemplustandardîn acest exemplu). Planurile provin dintr-un catalog dinamic, astfel încât setul exact de identificatori se poate modifica în timp pe măsură ce planurile sunt redenumite sau adăugate - tratați această valoare ca pe un șir de caractere opac, nu ca pe o enumerare fixă.messages.used/limit/remainingreprezintă numărul de credite de mesaje pentru perioada de facturare curentă.bots.used/limit/remainingcontorizează boții activi raportați la limita de boți a contului dumneavoastră.
Anteturi de limitare a ratei (rate limit headers)
Răspunsurile care ajung în etapa de limitare a ratei (adică au trecut de autentificare și de lista albă de IP-uri) includ:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- limita per cheie aplicată efectiv acestui apel (10 în mod implicit sau valoarea configurată de dumneavoastră înrateLimitPerMinute, dacă este mai mică).X-RateLimit-Remaining- numărul de tokenuri rămase în bucket imediat după acest apel.X-RateLimit-Reset- timpul Unix epoch în secunde la care devine disponibil următorul token (nu o resetare completă a bucketului; bucketul se reumple continuu). Când bucketul este plin, acesta reprezintă ora curentă.
La răspunsurile 429 rate_limit_exceeded, este setat și antetul Retry-After, exprimat în secunde întregi până când se eliberează cel puțin un token.
Erorile prealabile autentificării (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) și 403 ip_not_whitelisted nu conțin anteturile X-RateLimit-* - limitatorul este consultat numai după ce verificările de autentificare și IP reușesc.
Formatul erorilor
Același format de bază ca la Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Erorile de validare folosesc code: "invalid_parameter" și adaugă calea câmpului cu probleme la începutul mesajului, astfel încât secțiunea invalidă să fie ușor de identificat:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Valorile nevalide pentru câmpurile de tip enum / set închis (de exemplu, chatMemory.clientSummaryPromptType = "BOGUS") includ calea câmpului, valoarea respinsă și lista valorilor permise:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Resurse conexe
Pentru endpointurile de conversație și streamingul SSE, consultați Bot Talk API.