Преглед на Management API
Management API е предназначен за административни задачи от бек офиса, които не включват изпращане на съобщения в чата:
- създаване на бот програмно с
POST /v1/management/bots - извличане на конкретен бот, който притежавате, с
GET /v1/management/bots/{bot_id} - обновяване на конкретен бот с
PATCH /v1/management/bots/{bot_id} - извличане на данните за потреблението на абонамента с
GET /v1/usage
Ключовете за управление (Management keys) са обвързани с Вашия профил, а не с конкретен бот. Те умишлено се пазят отделно от ключовете за Bot Talk, така че компрометиран ключ за чат да не може да променя ботовете Ви или да чете данни за фактурирането.
Базов URL (Base URL)
https://api.chatlab.com/aichat
Всички крайни точки (endpoints) в тази статия са относителни спрямо този базов URL адрес.
Първи стъпки
- Отворете административния панел и отидете на Account Settings > Management API (Настройки на профила > Management API).
- Кликнете върху Create Management Key (Създаване на ключ за управление), дайте му име, по желание задайте бял списък с IP адреси и лимит на заявките, след което потвърдете.
- Копирайте целия ключ от прозореца за успешно завършване. Неговият чист текст се показва само веднъж.
Ключът изглежда по следния начин: mk_abcdefghijklmnopqrstuvwxyz012345. Префиксът mk_ го отличава от ключовете за Bot Talk (ck_).
Удостоверяване (Authentication)
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Изпращането на ключ mk_ към /v1/chat (или всяка друга крайна точка на Bot Talk) връща 403 key_type_not_allowed. Изпращането на ключ ck_ към /v1/management/* връща същата грешка.
Лимити
- Максимум 5 активни ключа за Management API на потребител
- Максимум 10 заявки в минута за всеки ключ (алгоритъм token bucket с капацитет 10 и плавно възстановяване с ~1 токен на всеки 6 секунди). Възможност за конфигуриране надолу при създаване - ако зададете по-ниска стойност за
rateLimitPerMinute, таванът пада, а темпът на възстановяване се мащабира съответно.
Разрешения (Permissions)
Всеки ключ за управление съдържа произволно подмножество от трите разрешения по-долу. Поне едно от тях трябва да бъде избрано при създаването, в противен случай заявката се отхвърля с 400 invalid_request_error. Извикването на крайна точка с ключ, на който му липсва необходимото разрешение, връща 403 insufficient_permissions.
bot_read- изисква се заGET /v1/management/bots/{bot_id}bot_management- изисква се заPOST /v1/management/botsиPATCH /v1/management/bots/{bot_id}usage- изисква се заGET /v1/usage
Структура на тялото: вложени секции, отразяващи разделите в административния интерфейс
POST и PATCH приемат JSON тяло, групирано в 13 секции. Всяка секция съответства на подраздел в страничната лента с настройки на бота (Bot Settings) в административното приложение, така че JSON ключовете и видимите раздели съвпадат: ако промените consent.humanSupportRequirePolicyAccept чрез API, ще видите как същият превключвател се сменя в раздела Consent & Privacy (Съгласие и поверителност) в панела.
role- персона на бота, суров промпт, дължина на отговора, език, контекст на уебсайта / компанията (раздел Role & Behavior)conversation- приветствено съобщение, прецизиране на заявките, непрекъснатост на разговора, превключвател за оценка + подсказки, съдържание на предложените въпроси + динамични последващи въпроси (раздел Chat Conversation)chatMemory- превключвател на паметта на чата, промптове за обобщения, заделяне на контекст (раздел Summaries & Memory)appearance- цветове, текстове, размери, персонализиран CSS, начален екран, стилизиране на предложените въпроси, поведение на автоматично отваряне, симулация на писане от човек, markdown за футъра (раздел Appearance)humanSupport- форма за връзка с човек (раздел Human Contact Form)leadCollection- форма за събиране на лийдове (раздел Lead Collection)liveChat- прехвърляне към чат на живо (раздел Live Chat)consent- четирите превключвателя за съгласие с политиката за поверителност плюс текста на екрана за съгласие (раздел Consent & Privacy)whiteLabel- скриване на логото, връзка към персонализирано лого, хостинг на собствен домейн (раздел Whitelabel)security- разрешени домейни, филтър за спам, лимити на съобщенията (раздел Security)voice- гласово въвеждане и гласови разговори: модел, глас, езици, промпт, ограничение на продължителността (раздел Voice Conversation)multilingual- многоезичен режим, базов език, предлагани езици, обработка на езика на базата знания (раздел Languages)advanced- LLM модел, температура, размер на контекста, лимит на съобщенията от бота, вътрешна локализация, Offer Cards (раздел Model & Advanced)
Единствено name се намира на най-високо ниво, тъй като идентифицира бота, вместо да принадлежи към конкретен раздел.
Страничната лента Bot Settings в момента съдържа 15 подраздела, като 13 от тях съответстват на секциите по-горе. Двата подраздела без съответстваща секция са Flow и Actions - и двата са описани в частта "Извън обхвата на API" по-долу. Тринадесетте, които имат съответствие, са Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation и Languages.
Тялото на заявката и тялото на отговора споделят еднаква структура. Отговорът добавя две допълнителни полета:
meta- само за четене: ID на бота и времеви отпечатъци. Премахнете го, за да превърнете GET отговор във валидно POST тяло.apiKey- присъства само при създаване - новогенерираният ключ за Bot Talk API за новия бот.
Две полета в споделената структура са само за четене - връщат се в отговора и се игнорират, ако се опитате да ги изпратите при POST/PATCH:
appearance.avatarUrl- пълен публичен URL адрес на изображението за аватар на бота (напр.https://api.chatlab.com/aichat/content/avatar_xyz.png). Изпратете GET заявка директно към него, за да изтеглите байтовете. За да го промените, качете нов файл чрез multipart часттаavatar(вижте PATCH).whiteLabel.whitelabelLogoUrl- пълен публичен URL адрес на логото в заглавната част при White Label. Работи по същия начин катоavatarUrl. За да го промените, качете нов файл чрез multipart часттаwhitelabel_logo(вижте PATCH).
И двата URL адреса използват схемата + хоста + пътя на текущата заявка, така че при персонализиран White Label домейн те се връщат с корен в този домейн (напр. https://api.acme.com/aichat/content/...).
Изпратете null за цяла секция, за да я пропуснете при PATCH; изпратете null за поле в дадена секция, за да пропуснете само това поле. Стойност null на ниво поле никога не изчиства запазена стойност - тя означава единствено "не променяй".
Изграждане на роля и промпт
Системният промпт, който LLM всъщност получава, се изгражда по един от два начина в зависимост от role.role. Познаването на използвания подход Ви показва кои полета имат значение и кои се записват, но се игнорират.
Вариант A - role.role е CUSTOMER_SUPPORT, SALES или LEAD_COLLECTION_AGENT (базиран на шаблон)
Бекендът сглобява промпта от вграден шаблон и напълно игнорира role.rawPrompt (стойността все пак се запазва за бота, но не се използва). Шаблонът включва:
role.role- етикет на ролята (напр. "Customer Support") и автоматично добавени специфични инструкции за неяname- име на бота, вмъкнато в първото изречениеrole.language-"Auto Detect"настройва бота да следва езика на потребителя; всяка друга стойност (напр."English","Polish") се превръща в "Output in {language}, unless user uses another language"role.responseLength- съответства на целеви брой думи:Concise≈ 50 думи,Normal≈ 100,Detailed≈ 200role.websiteAddress- по избор; когато не е празно, се добавя като "for the users of the website {url}"role.companyDescription- по избор; когато не е празно, се добавя като предхождащ параграф преди инструкциите за ролята
Това е препоръчителният вариант за повечето ботове - получавате оптимизирано за конкретната роля поведение и предпазни механизми без допълнителни настройки.
Вариант B - role.role е CUSTOM (промпт, предоставен от потребителя)
Бекендът използва role.rawPrompt директно и изцяло като системен промпт. Полетата responseLength, language, websiteAddress, companyDescription се записват, но не се вмъкват в промпта - ако искате някое от тях да влияе върху поведението на бота, трябва сами да го включите в текста на Вашия rawPrompt. Специфичните за дадена роля предпазни мерки и указания за тон също не се добавят; Вие контролирате целия промпт.
Използвайте CUSTOM само когато шаблонният промпт не отговаря на Вашия случай (напр. нуждаете се от персона за силно специфичен отрасъл, собствени ограничения за сигурност или нестандартен изходен формат).
Полета от изброим тип (enum / фиксиран набор)
Няколко полета приемат само фиксиран набор от низови стойности. Изпращането на стойност извън списъка се отхвърля с 400 validation_failed и пътя до полето в error.param. Стойностите зависят от регистъра на буквите (case-sensitive).
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- пълното английско име на езика от падащото меню в панела, напр.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindiи около 80 други. Стойността се записва буквално и се замества в шаблона на промпта, така че двубуквените ISO кодове (en,pl) и други стойности извън списъка не се отхвърлят от API, но генерират некоректна инструкция като "Output in en, unless...". По подразбиране еAuto Detect, ако се пропусне при създаване.advanced.model- вижте "AI текстови модели" по-долу; достъпният списък зависи от лимитите на профила Ви и всяка стойност, която Вашият профил не може да използва, връща400 invalid_parameteradvanced.chatContextSize-8000,16000,32000. Зависи от лимитите на Вашия профил; по-високите стойности се ограничават автоматично без съобщениеchatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minifiedappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- булев превключвател.trueзадължава потребителя да попълни формата за лийдове преди започване на разговор;falseпозволява на AI да прецени кога да покаже формата (по подразбиране).
Структурирани полета и диапазони
Полета, които изглеждат като обикновени низове или числа, но всъщност имат специфична структура, диапазони или особености в административния панел, които е важно да знаете.
-
advanced.temperature- допустимият диапазон е от0.0до1.0, съответстващ на плъзгача в административния интерфейс. Стойности извън този диапазон се отхвърлят с400 validation_failed. -
chatMemory.summariesToKnowledgeRatio- цяло число в проценти,10-90със стъпка10. Контролира колко от контекста на чата да бъде запазен за хронологичните обобщения на клиента спрямо останалата част (база знания, текущ разговор, инструкции). По подразбиране е50. Стойности извън диапазона10-90се отхвърлят с400 validation_failed. Прилага се само когатоchatMemory.enabled=trueИchatMemory.summaryConversationsEnabled=true. -
liveChat.schedule- JSON, кодиран като низ, а не вложен JSON обект при преноса на данни. Сървърът съхранява суровия низ директно; административният панел го парсва от страната на клиента, когато зарежда редактора на графика. След като се парсне, низът има структура от по един запис за всеки ден от седмицата плюс ключtimezone:- всеки ключ за ден от седмицата (
monday-sunday) сочи към{enabled: boolean, from: "H:MM", to: "H:MM"}в 24-часов формат timezoneе име на IANA часова зона (напр."Europe/Warsaw","America/New_York")
Примерна стойност (обърнете внимание на външните кавички и екранираните вътрешни кавички - това е едно низово поле, а не вложен обект):
"{\"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\"}"Извън посочените часове на посетителя се показва
liveChat.outOfHoursMessage, а прехвърлянето към чат на живо се спира. Валидацията на вътрешната структура се изпълнява само от страната на клиента в административния интерфейс - невалиден JSON или неразпознати ключове се приемат от API като обикновен низ и ще предизвикат грешка при рендиране, когато потребител отвори бота по-късно в панела. Валидирайте структурата от Ваша страна, преди да я изпратите. - всеки ключ за ден от седмицата (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- кратки етикети, показвани върху бутоните 👍 / 👎 до всеки отговор на AI, когатоconversation.conversationRatingEnabled=true. Текстът по подразбиране е "I like the response" / "I don't like the response". Видими са за крайните потребители. -
whiteLabel.hideRoboAssistLogo- функционалност на White Label, подчинена на ограниченията на Вашия акаунт. Скрива реда "Powered by ChatLab" във футъра. Ако акаунтът Ви не включва опцията White Label, стойността се запазва, но се игнорира и футърът се показва винаги. -
whiteLabel.whitelabelLogoLink- функционалност на White Label, подчинена на ограниченията на Вашия акаунт. Целеви URL адрес при клик върху персонализираното лого, когатоhideRoboAssistLogo=trueи е качен файл за лого чрез multipart часттаwhitelabel_logo. -
appearance.simulateHumanTypingDelay- секунди (не милисекунди), цяло число0-200. Пауза между последователните балончета на бота, когатоsimulateHumanTyping=true. По подразбиране е5. -
appearance.autoOpenChatDelaySeconds- секунди, цяло число. Забавяне преди уиджетът да се отвори автоматично, когатоautoOpenChat=trueиautoOpenChatDelay=true. -
advanced.internalLocale- код за локал и регион по IETF във форматll_CC(долна черта, а НЕll-CCс тире). Допустимите стойности идват от фиксиран списък от около 95 локализации: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и много други. Изпращането само на двубуквен код ("en") или BCP-47 ("en-US") не е част от разрешения списък. По подразбиране еen_US. Това е локализацията, използвана за форматиране на дати и числа в интерфейса на уиджета, и се различава отrole.language(езика на изходящите съобщения на бота). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- цели числа (изпращат се като JSON числа, напр.30, а не"30"). Стойност0деактивира лимита на съобщения за IP адрес. При ненулева стойност уиджетът налага ограничение от N съобщения за посочения брой секунди, преди да покажеsecurity.talkMessagesRateLimitHitMessageна посетителя. -
advanced.botMessagesLimit- цяло число (JSON число, напр.1000). Стойност0означава "без ограничение"; в противен случай трябва да бъде кратно на 1000 (1000,2000,10000...). Стойности като100или1500се отхвърлят с400 validation_failed. В допълнение стойността се ограничава тихо до лимита на Вашия акаунт.
AI текстови модели (advanced.model)
Изпратете точната стойност за API (колоната вляво с обратни кавички). Името за показване в административния интерфейс е посочено в скоби. Ограниченията на Вашия акаунт определят кое подмножество е достъпно; изпращането на модел, който профилът Ви не може да използва, връща 400 invalid_parameter. Стойността по подразбиране за нови ботове е 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)
Справочник на полетата (пълна схема на заявката)
Всяко поле в мрежовия трафик, заедно с неговия тип, ограничение и едноредово описание. Семантика на PATCH: всяко пропуснато поле (или изпратено като null) оставя запазената стойност непроменена. Същата структура се използва и за отговора (без многокомпонентното двоично съдържание; плюс блока само за четене meta при всеки отговор и apiKey единствено при отговора за създаване).
Най-горно ниво (Top level)
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
name |
string | макс. 150, задължително при създаване | Екранно име на бота |
role |
object | Вижте § role | |
conversation |
object | Вижте § conversation | |
chatMemory |
object | Вижте § chatMemory | |
appearance |
object | Вижте § appearance | |
humanSupport |
object | Вижте § humanSupport | |
leadCollection |
object | Вижте § leadCollection | |
liveChat |
object | Вижте § liveChat | |
consent |
object | Вижте § consent | |
whiteLabel |
object | Вижте § whiteLabel | |
security |
object | Вижте § security | |
advanced |
object | Вижте § advanced |
Допълнения само в отговора:
meta: { id, createdAt, updatedAt }- само за четене.apiKey- string, присъства само в отговора наPOST /v1/management/bots- новосъздаденият Bot Talk ключ за новия бот, върнат точно веднъж.
§ role
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Предварително зададена персона; избира шаблона на системните инструкции (вижте "Роля и изграждане на промпт") |
language |
string | пълно английско име на езика (English, Polish, ...) или Auto Detect |
Основен език, подаден към шаблона на промпта |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Желана детайлност на отговора от AI |
websiteAddress |
string | Уебсайт, използван за контекст на промпта | |
companyDescription |
string | Описание на компанията, използвано за контекст на промпта | |
rawPrompt |
string | Персонализиран системен промпт - използва се буквално само при role=CUSTOM |
§ conversation
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
welcomeMessage |
string | Първо съобщение, показано на посетителя при отваряне | |
queryRefinementEnabled |
boolean | Ако е true, въпросът на посетителя се прецизира преди RAG извличането | |
conversationContinuityEnabled |
boolean | Ако е true, завръщащите се посетители продължават последния си разговор | |
conversationRatingEnabled |
boolean | Ако е true, показва бутони с палец нагоре/надолу за оценка на съобщенията на бота | |
positiveRatingTooltip |
string | Подсказка (tooltip) на бутона за положителна оценка | |
negativeRatingTooltip |
string | Подсказка (tooltip) на бутона за отрицателна оценка | |
suggestedQuestions |
string | Предложени въпроси / начални фрази за разговор, разделени с нов ред | |
dynamicSuggestedFollowups |
boolean | Ако е true, AI предлага последващи въпроси след всеки отговор | |
dynamicFollowupsAutoIcons |
boolean | Ако е true, AI автоматично избира емоджи икони за динамичните последващи въпроси |
§ chatMemory
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
enabled |
boolean | Главен превключвател за функцията за памет на чата | |
summaryConversationsEnabled |
boolean | Запазване на обобщения за всеки разговор | |
conversationSummaryPrompt |
string | Персонализиран промпт, използван за обобщаване на всеки разговор | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Дали да се използва стандартният, или персонализираният промпт за обобщение |
clientSummaryPrompt |
string | Персонализиран промпт, използван за обобщаване на профила на клиента през различните разговори | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Стандартен спрямо персонализиран промпт за профила на клиента |
summariesToKnowledgeRatio |
int | 10-90, стъпка 10 |
Процент от контекстния прозорец на чата, заделен за обобщения спрямо RAG базата със знания |
§ appearance
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
launcherColor |
string (hex) | Фонов цвят на бутона за стартиране (иконата на чата) | |
headerColor |
string (hex) | Фонов цвят на заглавната лента на чата | |
titleColor |
string (hex) | Цвят на заглавието в горната част на чата | |
subtitleColor |
string (hex) | Цвят на подзаглавието в горната част на чата | |
clientMessageBubbleColor |
string (hex) | Цвят на балончето със съобщение от посетителя | |
clientMessageTextColor |
string (hex) | Цвят на текста в съобщението от посетителя | |
responseMessageBubbleColor |
string (hex) | Цвят на балончето с отговор от бота | |
responseMessageTextColor |
string (hex) | Цвят на текста в отговора от бота | |
chatSubheader |
string | Допълнително мото/подзаглавие, показано под заглавието на чата | |
senderPlaceholder |
string | Заместващ текст (placeholder) в полето за въвеждане на съобщение | |
resetConversationTooltip |
string | Подсказка на бутона за "нулиране на разговора" | |
chatAlignment |
string (enum) | ∈ {left, right} |
Към коя страна на екрана да бъде фиксиран чатът |
launcherBottomMargin |
int | 0-500 |
Разстояние на бутона за стартиране от долния край (px) |
launcherSideMargin |
int | 0-500 |
Разстояние на бутона за стартиране от страничния край (px) |
displayShadow |
boolean | Падаща сянка под уиджета | |
customCss |
string | Директен CSS, вграден в iframe на уиджета | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Начин на отваряне на връзките вътре в съобщенията на бота |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified} |
Минимизирано състояние: икона за отваряне или компактна лента за въвеждане |
chatDesktopWidthPx |
int | Ширина на уиджета за десктоп | |
chatDesktopHeightPx |
int | Височина на уиджета за десктоп | |
chatMobileSizePercent |
int | Размер на мобилния уиджет като процент от видимата област (viewport) | |
messageFontSize |
int | Размер на шрифта на текста на съобщенията (px) | |
showChatbotBubblesDesktop |
boolean | Показване на плаващи закачливи балончета на десктоп | |
showChatbotBubblesMobile |
boolean | Показване на плаващи закачливи балончета на мобилни устройства | |
chatbotBubblesDelaySeconds |
int | Забавяне преди появата на закачливите балончета (секунди) | |
launcherIconFullSize |
boolean | Изчертаване на персонализираната икона за стартиране от край до край, вместо с отстъп | |
welcomeScreenEnabled |
boolean | Показване на Welcome Screen (начален екран) вместо директно преминаване към чата | |
welcomeScreenQuestionsLabel |
string | Етикет над предложените въпроси на началния екран | |
welcomeScreenHideHumanContactForm |
boolean | Скриване на действието за форма за връзка с човек в заглавната лента, докато се показва Welcome Screen. То се появява отново след първото съобщение на посетителя. За ботове, създадени преди 02.09.2026 г., стойността по подразбиране е true |
|
welcomeScreenHideLiveChat |
boolean | Скриване на действието за чат на живо в заглавната лента, докато се показва Welcome Screen. То се появява отново след първото съобщение на посетителя. За ботове, създадени преди 02.09.2026 г., стойността по подразбиране е true |
|
headerActionsLayout |
string | DROPDOWN |
Как се предлагат чатът на живо и формата за връзка с човек в заглавната лента на чата: ICONS (всяко с отделна икона) или DROPDOWN (групирани в падащо меню). За ботове, създадени преди 02.09.2026 г., стойността по подразбиране е ICONS |
stackSuggestedQuestions |
boolean | Вертикално подреждане на предложените въпроси (вместо един до друг) | |
suggestedQuestionsFontSize |
int | Размер на шрифта на бутоните за предложени въпроси (px) | |
suggestedQuestionsTextColor |
string (hex) | Цвят на текста на бутоните за предложени въпроси | |
suggestedQuestionsBackgroundColor |
string (hex) | Фонов цвят на бутоните за предложени въпроси | |
autoOpenChat |
boolean | Автоматично отваряне на чата на десктоп | |
autoOpenChatOnMobiles |
boolean | Автоматично отваряне на чата на мобилни устройства | |
autoOpenChatDelay |
boolean | Използване на забавяне преди автоматичното отваряне | |
autoOpenChatDelaySeconds |
int | Време за забавяне на автоматичното отваряне (секунди) | |
simulateHumanTyping |
boolean | Разделяне на отговора на бота на отделни балончета с анимация на писане | |
simulateHumanTypingDelay |
int | 0-200 |
Забавяне между отделните съобщения (секунди) |
footerMarkdown |
string | макс. 255 | Персонализиран Markdown текст в долната част (footer), показан под чата |
avatarUrl |
string | само за четене | Пълен публичен URL адрес на аватара; за да го промените, качете файл чрез multipart частта avatar |
Multipart данни при POST/PATCH: avatar (файлова част). Телата на GET / отговорите пропускат съдържанието на файла - в мрежовия трафик се предава само URL адресът.
§ humanSupport
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
enabled |
boolean | Превключвател за процеса за връзка с човек (Human Support) | |
email |
string | задължително (create-strict), когато enabled=true |
Имейл адрес, който получава съобщенията за поддръжка от човек |
dialogMessage |
string | Подканващо съобщение, показано над формата | |
thankYouMessage |
string | Потвърждение, показано след изпращане | |
emailMessageSubjectTemplate |
string | Шаблон за тема на имейла, изпращан до агента | |
emailMessageContentTemplate |
string | Шаблон за съдържанието на имейла, изпращан до агента | |
emailPlaceholder |
string | Заместващ текст в полето за въвеждане на имейл | |
messagePlaceholder |
string | Заместващ текст в полето за съобщение | |
emailWithConversationContent |
boolean | Ако е true, включва стенограмата на разговора в тялото на имейла | |
customFormId |
long | id на съществуваща персонализирана форма | Заменя вградената форма за контакт с персонализирана форма. Стойност null запазва вградената форма |
customFormMapping |
string | JSON-кодиран низ | Съпоставя полетата на персонализираната форма с полетата на имейла за връзка с човек |
Настройката requirePolicyAccept се намира в consent.humanSupportRequirePolicyAccept, а не тук.
§ leadCollection
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
enabled |
boolean | Превключвател за формата за събиране на лийдове | |
nameEnabled |
boolean | Събиране на име | |
nameLabel |
string | Етикет на полето за име | |
emailEnabled |
boolean | Събиране на имейл | |
emailLabel |
string | задължително (create-strict), когато enabled=true И emailEnabled=true |
Етикет на полето за имейл |
phoneEnabled |
boolean | Събиране на телефон | |
phoneLabel |
string | задължително (create-strict), когато enabled=true И phoneEnabled=true |
Етикет на полето за телефон |
leaveDetailsMessage |
string | задължително (create-strict), когато enabled=true |
Съобщение, подканващо посетителя да остави своите данни |
thankYouMessage |
string | задължително (create-strict), когато enabled=true |
Потвърждение, показано след изпращане |
requireBeforeNewConversation |
boolean | Ако е true, формата трябва да бъде попълнена преди началото на чата; ако е false, AI решава кога да покаже формата |
|
emailNotificationEnabled |
boolean | Изпращане на имейл до собственика при всеки събран лийд | |
emailNotificationAddress |
string | Получател на известието (по подразбиране е имейлът на акаунта) | |
emailWithConversationContent |
boolean | Ако е true, включва стенограмата на разговора в известието |
Кръстосано правило при създаване (create-strict): enabled=true изисква поне едно от полетата emailEnabled или phoneEnabled да бъде активно. Настройката requirePolicyAccept се намира в consent.leadCollectionRequirePolicyAccept, а не тук.
| customFormId | long | id на съществуваща персонализирана форма | Заменя вградената форма за лийдове с персонализирана форма. Стойност null запазва вградената форма |
| customFormMapping | string | JSON-кодиран низ | Съпоставя полетата на персонализираната форма с name / email / phone |
§ liveChat
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
enabled |
boolean | Превключвател за функцията Live Chat | |
infoMessage |
string | Разяснително съобщение преди прехвърляне към оператор | |
startMessage |
string | Съобщение, показано при започване на сесията на живо | |
endMessage |
string | Съобщение, показано при приключване на сесията на живо | |
nameLabel |
string | Етикет на полето за име в предварителната форма за чат на живо | |
emailLabel |
string | Етикет на полето за имейл в предварителната форма за чат на живо | |
schedule |
string | JSON-кодиран низ (превключватели за дни от седмицата + from/to + timezone) |
Работен график за чат на живо - вижте "Структурирани полета и диапазони" за точната структура |
outOfHoursMessage |
string | Съобщение, показвано извън работното време според графика | |
closeModalMessage |
string | Заглавие на модалния прозорец "затваряне на чата на живо?" | |
closeModalConfirmLabel |
string | Етикет на бутона за потвърждение в модалния прозорец за затваряне | |
closeModalCancelLabel |
string | Етикет на бутона за отказ в модалния прозорец за затваряне | |
closeModalTooltipText |
string | Подсказка към бутона за прекратяване на чата | |
operatorHasJoinedLabel |
string | Текст, показван при включване на оператор | |
operatorDidNotJoinInTimeLabel |
string | Текст, показван когато оператор не се включи в рамките на зададеното време | |
waitingForOperatorToJoinLabel |
string | Текст, показван по време на изчакване на оператор | |
waitingForOperatorSeconds |
int | Време за изчакване на оператор да поеме чата (секунди) | |
redirectToHumanSupportForm |
boolean | Ако е true, пренасочва към формата за Human Support, когато никой оператор не отговори | |
missedEmailEnabled |
boolean | по подразбиране true |
Изпращане на имейл до собственика на бота при пропуснат чат на живо. При по-стари ботове остава незададено, което се третира като активно |
Настройката requirePolicyAccept се намира в consent.liveChatRequirePolicyAccept, а не тук.
§ consent
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Изискване на съгласие с политиката за поверителност преди започване на нов разговор | |
humanSupportRequirePolicyAccept |
boolean | Изискване на съгласие с политиката за поверителност преди изпращане на формата за връзка с човек | |
leadCollectionRequirePolicyAccept |
boolean | Изискване на съгласие с политиката за поверителност преди изпращане на формата за лийдове | |
liveChatRequirePolicyAccept |
boolean | Изискване на съгласие с политиката за поверителност преди започване на сесия за чат на живо | |
newConversationConsentDescription |
string | Въвеждащ текст на екрана за съгласие при стартиране на разговор | |
privacyPolicyConsentCheckboxLabel |
string | Етикет до полето за съгласие (обикновено съдържа връзка към политиката за поверителност) |
§ whiteLabel
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
hideRoboAssistLogo |
boolean | възможност на White Label; предмет на лимити на акаунта | Скриване на стандартното лого на ChatLab в долната част (footer) |
whitelabelLogoLink |
string | white-label възможност; предмет на лимити на акаунта | URL адрес, към който води персонализираното лого в долната част |
assignToCustomDomain |
boolean | ограничено от функцията CUSTOM_DOMAIN |
Хостване на чата на конфигурирания персонализиран домейн |
whitelabelLogoUrl |
string | само за четене | Пълен публичен URL адрес на whitelabel логото; за да го промените, качете файл чрез multipart частта whitelabel_logo |
Multipart данни при POST/PATCH: whitelabel_logo (файлова част). Телата на GET / отговорите пропускат съдържанието на файла - в мрежовия трафик се предава само URL адресът.
§ security
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
allowedDomains |
string | Списък с домейни, разделени със запетая, с право да вграждат уиджета (празно = без списък с разрешени) | |
spamFilterEnabled |
boolean | Активиране на спам филтъра за входящи съобщения за съответния бот | |
countryFilterMode |
string | BLACKLIST или WHITELIST |
Как да се тълкуват списъците с държави. Самите списъци остават достъпни само за администратори |
talkMessagesRateLimit |
int | >= 0; 0 деактивира |
Максимален брой потребителски съобщения в рамките на прозореца за ограничаване на честотата |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Продължителност на прозореца за ограничаване на честотата (секунди) |
talkMessagesRateLimitHitMessage |
string | Съобщение, показвано на посетителя при достигане на лимита на честотата |
§ voice
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
inputEnabled |
boolean | Позволява на посетителя да диктува съобщения (говор към текст) | |
conversationEnabled |
boolean | изисква гласовата функция да е налична в плана | Активиране на пълноценни гласови разговори |
voiceId |
string | специфичен гласов идентификатор според доставчика (напр. alloy) |
Кой синтетичен глас говори |
model |
string | напр. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Гласов модел. Таксува се на минута, цените варират според модела |
turnDetection |
string | според доставчика | Режим на разпознаване на ред за говорене |
audioPrompt |
string | Допълнителен системен промпт, използван само за гласовите реплики | |
welcomeMessage |
string | Изговорена начална реплика | |
language |
string | код на език | Основен гласов език |
additionalLanguages |
string | кодове на езици, разделени със запетая | Допълнителни езици, които гласовият асистент приема |
maxDurationSeconds |
int | Твърд лимит за продължителност на единичен гласов разговор | |
maxDurationMessage |
string | Съобщение, показвано при достигане на лимита за продължителност |
§ multilingual
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
enabled |
boolean | Превключвател за многоезичен режим | |
mode |
string | AUTODETECT или фиксиран списък |
Как ботът избира езика на отговора |
baseLanguage |
string | код на език | Езикът, на който са написани основните текстове на бота |
languages |
string | кодове на езици, разделени със запетая | Езици, предлагани на посетителя |
knowledgeLanguageMode |
string | Как се обработват материалите от базата със знания на други езици | |
knowledgeLanguageFallback |
string | код на език | Резервен език, използван при липса на съвпадение |
§ advanced
| Поле | Тип | Ограничение | Описание |
|---|---|---|---|
model |
string | зависи от лимитите на акаунта; вижте "AI текстови модели" по-горе | Идентификатор на LLM (напр. 5-MINI) |
temperature |
decimal | 0.0-1.0 |
Температура на семплиране (съответства на плъзгача в интерфейса) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; автоматично се ограничава до лимита на Вашия акаунт |
Токен прозорец за историята на чата |
botMessagesLimit |
long | 0 или число, кратно на 1000 (напр. 1000, 2000, 10000) |
Максимален брой отговори на бота за един разговор (0 = без лимит) |
internalLocale |
string | код на локал във формат ll_CC |
Локал за системните текстове на уиджета (различен от role.language) |
productsViewEnabled |
boolean | Ако е true, визуализира картите с продукти (Offer Cards) за електронна търговия вътре в чата | |
includeProductsInKnowledgeBase |
boolean | Ако е true, индексира продуктовия каталог като част от базата със знания |
Извън обхвата на API
Административният потребителски интерфейс съдържа няколко секции, които нарочно не са достъпни в тази версия на Management API:
- Раздел Flow (Поток) - визуалният редактор на разговорния поток (Flow Editor - стъпки и преходи). Не е достъпен през Management API.
- Раздел Actions (Действия) - управлявани интеграции за електронна търговия / резервации, AI Search и персонализирани API функции. Извикването на външни инструменти (tool calling) никога не е било част от Management API.
- Самият конструктор на персонализирани форми - създаването и редактирането на потребителски форми не е достъпно. Можете обаче да прикачите съществуваща форма към бот чрез
leadCollection.customFormIdиhumanSupport.customFormId. - Персонализирани икони за отваряне / затваряне на чата -
customLauncherIconVisible,openChatIcon,closeChatIcon. API предоставя достъп само до основните multipart части заavatarиwhitelabel_logo. - Списъци с IP адреси и държави - самите записи са достъпни единствено за администратори. През API е достъпен само режимът на филтриране чрез
security.countryFilterMode.
Крайни точки (Endpoints)
POST /v1/management/bots
Създаване на нов бот. Приемат се два еквивалентни типа съдържание (Content-Type); изберете този, който е по-удобен за Вас.
Режим A - чист JSON (препоръчва се, когато не е необходимо да качвате аватар / лого в същата заявка):
Content-Type: application/json- Тялото на заявката е конфигурационният JSON на бота (без обвивка
data) - Файловете (аватар / лого) могат да бъдат качени по-късно чрез втори
PATCH, използвайки режим B
Режим B - multipart/form-data (използвайте при качване на файлове в същата заявка):
Content-Type: multipart/form-data; boundary=...dataJSON част (задължителна,Content-Type: application/json) - конфигурация на бота във вложената структура, описана по-гореavatarфайлова част (незадължителна) - изображение за аватар на ботаwhitelabel_logoфайлова част (незадължителна) - white-label лого (приложимо само ако акаунтът Ви включва White Label)
В JSON формата се изисква единствено name; всяко друго поле приема същата стойност по подразбиране, която би задал съветникът в администраторския панел.
Пълно тяло на заявката
Това е максималният data JSON - с попълнени всички секции. Изпращайте само секциите, които са Ви необходими; всичко останало приема стойности по подразбиране.
{
"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
}
}
Правила за валидация със собствени съобщения за грешка:
name- задължително, максимум 150 знакаadvanced.temperature- между0.0и1.0chatMemory.summariesToKnowledgeRatio- цяло число между10и90(процент, стъпка10)appearance.launcherBottomMargin,appearance.launcherSideMargin- между0и500appearance.footerMarkdown- максимум 255 знакаhumanSupport.enabled=trueизисква да бъде зададенhumanSupport.emailleadCollection.enabled=trueизисква поне едно от полетатаleadCollection.emailEnabledилиleadCollection.phoneEnabledда бъдеtrue; съответният активен канал изисква също своя етикет, както иleaveDetailsMessageиthankYouMessage- Полетата с лимити (
advanced.chatContextSize,advanced.botMessagesLimitи др.) автоматично се ограничават до лимитите на Вашия акаунт
Полетата, чиято стойност на сървъра е null, се пропускат от JSON тялото - мрежовият трафик пренася само полета със стойности, различни от null.
Пълно тяло на отговора (201)
Същата структура като на заявката, плюс блока само за четене meta и еднократния apiKey на най-горно ниво. URL адресите за четене на файлове (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) се попълват от сървъра, когато съответните multipart части са били качени.
{
"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"
}
Полето apiKey се появява само при създаване - това е току-що генерираният ключ за Bot Talk API, свързан с новия бот. Чистият текст се показва еднократно и не може да бъде извлечен по-късно през API; запазете го незабавно от Ваша страна.
Заглавната част Location в отговора съдържа URL адреса на новия бот (/v1/management/bots/{id}).
Примери с Curl
Режим A - чист JSON (най-прост):
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!"}}'
Режим B - multipart с аватар:
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}
Връща текущата конфигурация на бот, който притежавате.
Пример с Curl
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Пълно тяло на отговора (200)
Същата структура като отговора на POST, без еднократния apiKey. Блокът meta е включен. Връща 404 not_found_error, ако ботът не съществува или не принадлежи на Вашия акаунт.
Текущият аватар и white-label логото са представени като пълни URL адреси само за четене (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - базирани на същата схема + хост + път на контекста, обслужили тази заявка. Извлечете съдържанието чрез директна GET заявка към тези URL адреси; за да замените който и да е от файловете, качете нов чрез multipart частта avatar / whitelabel_logo при PATCH. Тези URL полета се игнорират, ако бъдат изпратени в тялото на заявката.
{
"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"
}
}
Клониране на бот
Тялото на заявката при POST /v1/management/bots и тялото на отговора при GET /v1/management/bots/{bot_id} споделят една и съща структура, така че клонирането е процес в три стъпки: извличане чрез GET на изходния бот, премахване на управляваните от сървъра полета за идентификация и изпращане чрез POST на резултата.
1. Извлечете изходния бот чрез GET.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Премахнете блока meta от най-високо ниво. Обектът meta (id, createdAt, updatedAt) се управлява от сървъра и е само за четене - оставянето му в тялото на POST заявката не пречи (сървърът го игнорира), но премахването му прави намерението ясно и поддържа данните изчистени. По избор редактирайте name, така че клонингът да се различава от оригинала.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Изпратете изчистеното тяло чрез POST, за да създадете клонинга. Вижте справочника за POST /v1/management/bots по-горе за пълната структура на тялото и правилата за валидация.
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d @clone-body.json
Отговорът съдържа meta.id на новия бот плюс новосъздаден apiKey (ключът за Bot Talk API за клонинга). Текстовата стойност на apiKey се връща само в този отговор при създаване - копирайте я, преди да затворите тялото на отговора; тя не може да бъде извлечена по-късно.
Две важни уточнения:
- Файловете не се клонират.
appearance.avatarUrlиwhiteLabel.whitelabelLogoUrlса само за четене и сочат към файловете на изходния бот. Ако се нуждаете от същия аватар или White Label лого при клонинга, изтеглете байтовете от изходните URL адреси и ги качете като multipart частиavatar/whitelabel_logo- или при създаващата POST заявка (Режим B), или чрез последваща PATCH заявка. - Ключовете за Bot Talk API не се клонират. Всеки бот разполага със собствен набор от ключове за Bot Talk API. Единственият
apiKey, върнат от създаващата POST заявка, е единственият, генериран автоматично; създайте допълнителни ключове от таба API на бота, ако е необходимо.
PATCH /v1/management/bots/{bot_id}
Актуализирайте едно или повече полета на бот, който притежавате. Променят се само секциите / полетата, присъстващи в JSON обекта; всичко пропуснато (или изпратено като null) остава непроменено. Прилага се семантика за частична актуализация за всяко поле в изпратената секция.
Приемат се два еквивалентни Content-Type типа (същите като при POST):
Режим A - чист JSON (препоръчва се, когато актуализирате само настройки):
Content-Type: application/json- Тялото на заявката е JSON съдържанието на кръпката (без обвивка
data)
Режим B - multipart/form-data (използва се при качване на файлове):
- JSON част
data(по избор) - съдържанието на актуализацията. Изпратете само ако искате да промените полета. Пропуснете изцяло, ако искате само да качите аватар или лого. - файлова част
avatar(по избор) - замяна на аватара - файлова част
whitelabel_logo(по избор) - замяна на логото за White Label (прилага се само ако Вашият акаунт включва опцията White Label)
И трите части са по избор при PATCH, но поне една трябва да присъства, за да има смисъл извикването.
Пълно тяло на заявката (максимален обхват)
Всяко поле, прието от POST /v1/management/bots, може да бъде изпратено и тук. Примерът по-долу показва пълния обхват; на практика изпращате само ключовете, които искате да промените (вижте "Минимална частична актуализация" по-долу) - всеки пропуснат ключ (или изпратен като null) оставя запазената стойност недокосната.
{
"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
}
}
Минимална частична актуализация
Приложете PATCH само за едно поле, като изпратите точно ключовете, които искате да промените - всичко останало се запазва.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Примери с Curl
Режим A - чист JSON (най-простият вариант):
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"}}'
Режим B - multipart (при замяна на аватар / лого):
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'
Режим B - замяна само на аватара (без промени по полетата):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Тяло на отговора (200)
Същата структура като при GET /v1/management/bots/{bot_id} - пълната конфигурация на бота след прилагането на кръпката, включително блока meta. Без поле apiKey. Връща 404 not_found_error, ако ботът не съществува или не принадлежи на Вашия акаунт.
Примерът по-долу показва отговора след прилагане на актуализацията от Пълно тяло на заявката (максимален обхват) по-горе върху бота от примера за GET - променените полета отразяват новите стойности, непроменените полета са запазени, а meta.updatedAt се актуализира.
{
"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
Прегледайте текущото потребление на абонамента за акаунта, който притежава ключа за Management API.
Тяло на отговора (200)
{
"subscriptionType": "standard",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeе изписан с малки букви идентификатор на текущия план на акаунта (напр.standardв примера). Плановете идват от динамичен каталог, така че точният набор от идентификатори може да се променя с течение на времето при преименуване или добавяне на планове - третирайте това като непрозрачен низ, а не като фиксирано изброяване.messages.used/limit/remainingпредставляват кредитите за съобщения за текущия отчетен период.bots.used/limit/remainingотчитат броя на активните ботове спрямо лимита за ботове на Вашия акаунт.
Заглавки за лимит на заявките (Rate limit headers)
Отговорите, които достигат до етапа на ограничаване на честотата на заявките (т.е. автентикацията и списъкът с разрешени IP адреси са преминали успешно), включват:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- лимитът за конкретния ключ, реално приложен към това извикване (по подразбиране 10, или конфигурираната от Вас стойност заrateLimitPerMinute, ако е по-ниска).X-RateLimit-Remaining- оставащи токени в пула непосредствено след това извикване.X-RateLimit-Reset- секунди по Unix епоха, в които следващият токен става наличен (не цялостно нулиране на пула; пулът се запълва непрекъснато). Когато пулът е пълен, това показва текущото време.
При отговори 429 rate_limit_exceeded се задава и заглавката Retry-After, изразена в цели секунди до освобождаването на поне един токен.
Грешките преди автентикация (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) и 403 ip_not_whitelisted не съдържат заглавките X-RateLimit-* - ограничителят се проверява само след успешна автентикация и проверка на IP адреса.
Формат на грешките
Същата структура (envelope) като при Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Грешките при валидация използват code: "invalid_parameter" и добавят пътя на проблемното поле в началото на съобщението, за да бъде проблемната секция лесна за откриване:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Невалидните стойности за изброими полета (enum / closed-set, напр. chatMemory.clientSummaryPromptType = "BOGUS") включват пътя на полето, отхвърлената стойност и списъка с позволени стойности:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Свързани теми
За крайни точки за разговори и SSE поточно предаване вижте Bot Talk API.