Översikt över Management API
Management API är avsett för administrativt arbete som inte omfattar att skicka chattmeddelanden:
- skapa en bot programmatiskt med
POST /v1/management/bots - läsa en specifik bot du äger med
GET /v1/management/bots/{bot_id} - uppdatera en specifik bot med
PATCH /v1/management/bots/{bot_id} - läsa prenumerationsanvändning med
GET /v1/usage
Management-nycklar är knutna till ditt konto, inte till någon enskild bot. De hålls medvetet åtskilda från Bot Talk-nycklar så att en komprometterad chattnyckel inte kan manipulera dina botar eller läsa dina faktureringsdata.
Bas-URL
https://api.chatlab.com/aichat
Alla slutpunkter i denna artikel är relativa till denna bas-URL.
Komma igång
- Öppna administratörsappen och gå till Account Settings > Management API (Kontoinställningar > Management API).
- Klicka på Create Management Key (Skapa Management-nyckel), namnge den, ställ valfritt in vitlistning för IP-adresser samt hastighetsbegränsning och bekräfta.
- Välj endast de behörigheter som din integration behöver och kopiera hela nyckeln från framgångsmodalfönstret. Klartexten visas bara en gång.
- Spara den på din server, inte i kod i webbläsaren eller i ett offentligt arkiv. Gör en skrivskyddad förfrågan såsom
GET /v1/usagemed behörighetenusageför att verifiera åtkomsten. - Återkalla oanvända eller komprometterade nycklar från sidan Management API.
En nyckel ser ut som mk_abcdefghijklmnopqrstuvwxyz012345. Prefixet mk_ skiljer den från Bot Talk-nycklar (ck_).
Autentisering
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Att skicka en mk_-nyckel till /v1/chat (eller någon annan Bot Talk-slutpunkt) returnerar 403 key_type_not_allowed. Att skicka en ck_-nyckel till /v1/management/* returnerar samma fel.
Gränser
- Max 5 aktiva Management API-nycklar per användare
- Max 10 förfrågningar per minut per nyckel (token bucket, kapacitet 10, jämn påfyllning med ~1 token var 6:e sekund). Kan konfigureras nedåt vid skapandet - ställ in ett lägre
rateLimitPerMinuteså sänks taket och påfyllningshastigheten skalas därefter.
Behörigheter
Varje Management-nyckel innehåller valfri delmängd av de tre behörigheterna nedan. Minst en måste väljas när nyckeln skapas; annars avvisas förfrågan med 400 invalid_request_error. Att anropa en slutpunkt med en nyckel som saknar den behörighet som krävs returnerar 403 insufficient_permissions.
bot_read- krävs förGET /v1/management/bots/{bot_id}bot_management- krävs förPOST /v1/management/botsochPATCH /v1/management/bots/{bot_id}usage- krävs förGET /v1/usage
Anropskroppens struktur: kapslade sektioner som speglar flikarna i administratörsgränssnittet
POST och PATCH accepterar en JSON-kropp grupperad i 13 sektioner. Varje sektion motsvarar en underflik i administratörsappens sidofält för botinställningar, så JSON-nycklarna och de synliga flikarna stämmer överens: om du ändrar consent.humanSupportRequirePolicyAccept via API:et kommer samma reglage att slås om på fliken Consent & Privacy (Samtycke och integritet) i administratörsappen.
role- botpersona, rå prompt, svarslängd, språk, webbplats-/företagskontext (fliken Role & Behavior)conversation- välkomstmeddelande, sökfrågebearbetning, konversationskontinuitet, betygsknappar + verktygstips, innehåll för förslagsfrågor + dynamiska uppföljningar (fliken Chat Conversation)chatMemory- chattminnesreglage, sammanfattningsprompter, kontextallokering (fliken Summaries & Memory)appearance- färger, text, mått, anpassad CSS, välkomstskärm, utformning av förslagsfrågor, beteende för automatisk öppning, simulering av mänskligt skrivande, sidfotsmarkdown (fliken Appearance)humanSupport- mänskligt kontaktformulär (fliken Human Contact Form)leadCollection- leadinsamlingsformulär (fliken Lead Collection)liveChat- överlämning till livechatt (fliken Live Chat)consent- alla fyra reglage för integritetspolicy samt text för samtyckesskärmen (fliken Consent & Privacy)whiteLabel- dölj logotyp, länk för anpassad logotyp, hosting på anpassad domän (fliken Whitelabel)security- tillåtna domäner, spamfilter, hastighetsbegränsningar för samtal (fliken Security)voice- röstinmatning och röstkonversationer: modell, röst, språk, prompt, tidsgräns (fliken Voice Conversation)multilingual- flerspråkigt läge, basspråk, erbjudna språk, hantering av kunskapsspråk (fliken Languages)advanced- LLM-modell, temperatur, kontextstorlek, gräns för botmeddelanden, intern språkversion, Offer Cards (fliken Model & Advanced)
Av de skrivbara inställningarna ligger endast name på toppnivån, eftersom det identifierar botten snarare än tillhör en enskild flik.
Sidofältet för botinställningar har för närvarande 16 underflikar, och 13 av dem motsvarar sektionerna ovan. De tre underflikarna utan motsvarande sektion är Flow, Actions och Forms - alla tre tas upp under "Utanför API:ets räckvidd" nedan. De 13 som faktiskt motsvaras är Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation och Languages.
Förfrågans och svarets kropp har samma struktur. Svaret lägger till två extra element:
meta- skrivskyddad: bot-id och tidsstämplar. Ta bort detta för att göra om ett GET-svar till en giltig POST-kropp.apiKey- finns endast vid skapandet - den nyskapade Bot Talk API-nyckeln för den nya botten.
Två fält i den delade strukturen är skrivskyddade - de returneras i svaret men ignoreras om du försöker skicka dem i POST/PATCH:
appearance.avatarUrl- fullständigt kvalificerad offentlig URL för bottens avatarbild (t.ex.https://api.chatlab.com/aichat/content/avatar_xyz.png). Gör en GET direkt mot den för att ladda ned filen. För att ändra den, ladda upp en ny fil via multipart-delenavatar(se PATCH).whiteLabel.whitelabelLogoUrl- fullständigt kvalificerad offentlig URL för sidhuvudslogotypen för whitelabel. Samma mönster somavatarUrl. För att ändra den, ladda upp en ny fil via multipart-delenwhitelabel_logo(se PATCH).
Båda webbadresserna använder den aktuella förfrågans schema + värd + kontextsökväg, så på en anpassad domän för whitelabel returneras de med den domänen som rot (t.ex. https://api.acme.com/aichat/content/...).
Skicka null för en sektion för att hoppa över den vid PATCH; skicka null för ett fält inom en sektion för att hoppa över just det fältet. null på fältnivå rensar aldrig ett lagrat värde - det betyder bara "rör inte".
Roll- och promptuppbyggnad
Den systemprompt som språkmodellen faktiskt tar emot byggs upp på ett av två sätt beroende på role.role. Genom att veta vilken gren du befinner dig på förstår du vilka fält som spelar roll och vilka som lagras men ignoreras.
Gren A - role.role är CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (mallstyrd)
Backend sätter samman prompten från en inbyggd mall och ignorerar role.rawPrompt helt (värdet lagras fortfarande på botten, men används inte). Mallen inkluderar:
role.role- rolletikett (t.ex. "Customer Support") och rollspecifika instruktioner läggs till automatisktname- bottens namn, injiceras i inledningsmeningenrole.language-"Auto Detect"ställer in botten på att följa användarens språk; alla andra värden (t.ex."English","Polish") blir "Output in {language}, unless user uses another language"role.responseLength- mappas till ett målordantal:Concise≈ 50 ord,Normal≈ 100,Detailed≈ 200role.websiteAddress- valfritt; när det inte är tomt läggs det till som "for the users of the website {url}"role.companyDescription- valfritt; när det inte är tomt läggs det till som ett extra stycke före rollinstruktionerna
Detta är den rekommenderade grenen för de flesta botar - du får rollanpassat beteende och skyddsräcken utan extra arbete.
Gren B - role.role är CUSTOM (prompt tillhandahålls av anroparen)
Backend använder role.rawPrompt som rollprompt och lägger till plattformens fasta riktlinjer för svarslängd. Detta är skilt från role.responseLength: den valfria inställningen Concise/Normal/Detailed injiceras inte för en CUSTOM-roll. På samma sätt lagras language, websiteAddress och companyDescription, men injiceras inte i denna rollprompt. Inkludera önskat språk, mål för svarslängd eller företagskontext direkt i rawPrompt själv. Ytterligare körtidsinstruktioner och hämtad kontext kan också tillhandahållas, så rawPrompt utgör inte hela modellinmatningen. Den fördefinierade rollens toninstruktioner läggs inte till, men att välja CUSTOM tar inte bort alla plattformsinstruktioner.
Använd endast CUSTOM när den mallstyrda prompten inte passar ditt användningsområde (t.ex. om du behöver en mycket domänspecifik persona, egna säkerhetsbegränsningar eller ett icke-standardiserat utdataformat).
Enum- / fält med fasta värden
Enum-fält och begränsade fält avvisar ogiltiga värden med 400 invalid_parameter. Andra fält är vanliga strängar, även där användargränssnittet erbjuder en fast lista. Använd den dokumenterade stavningen och validera dina data i stället för att anta att varje sträng som inte stöds avvisas.
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- fullständigt engelskt språknamn från rullgardinsmenyn i administratörsgränssnittet, t.ex.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindioch ~80 andra. Värdet lagras ordagrant och sätts in i promptmallen, så tvåställig ISO-koder (en,pl) och andra värden utanför listan avvisas inte av API:et men skapar en felaktig instruktion som "Output in en, unless...". Standardvärdet ärAuto Detectom det utelämnas vid skapandet.advanced.model- se "AI-textmodeller" nedan. Detta är en sträng, inte en validerad enum i förfrågningsschemat; använd ett värde som stöds och inte ett godtyckligt modellnamn.advanced.chatContextSize- använd8000,16000eller32000, i linje med användargränssnittet. Värden över kontots maximum trunkeras tyst nedåt; DTO:n tvingar inte fram denna uppsättning om tre värden.chatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minified,pillappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- booleskt reglage.truetvingar användaren att fylla i leadformuläret innan en konversation startas;falselåter AI:n avgöra när formuläret ska visas (standard).
Strukturerade fält och intervall
Fält som ser ut som enkla strängar eller siffror men som i praktiken har specifika format, intervall eller egenheter i administratörsgränssnittet som är bra att känna till.
-
advanced.temperature- accepterat intervall är0.0till1.0, vilket motsvarar skjutreglaget i administratörsgränssnittet. Värden utanför detta intervall avvisas med400 invalid_parameter. -
chatMemory.summariesToKnowledgeRatio- heltal i procent,10-90; gränssnittet använder steg om10, men API:et accepterar heltal i hela intervallet. Standardvärde50. När minne är aktiverat och kontexten är större än 8k fördelas budgeten för kunskap och minne efter reservationen för prompt och senaste konversation, inte hela modellkontexten. Vid 8k allokeras ingen sammanfattningsbudget av denna inställning. -
liveChat.schedule- JSON kodad som en sträng, inte ett kapslat JSON-objekt över nätverket. Servern lagrar den råa strängen ordagrant; administratörsgränssnittet tolkar den på klientsidan när schemaredigeraren renderas. När strängen tolkats är den uppbyggd som en post per veckodag plus nyckelntimezone:- varje veckodagsnyckel (
monday-sunday) mappas till{enabled: boolean, from: "H:MM", to: "H:MM"}i 24-timmarsformat timezoneär ett IANA-zonnamn (t.ex."Europe/Warsaw","America/New_York")
Exempelvärde (observera de yttre citattecknen och de escaped inre citattecknen - det är ett enda strängfält, inte ett kapslat objekt):
"{\"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\"}"Utanför de angivna tiderna visas
liveChat.outOfHoursMessageför besökaren och överlämning till livechatt inaktiveras. Validering av den inre strukturen sker endast på klientsidan i administratörsgränssnittet - felaktig JSON eller okända nycklar accepteras av API:et som en vanlig sträng och orsakar ett renderingsfel först när en person senare öppnar botten i administratörsgränssnittet. Validera strukturen på din sida innan du skickar den. - varje veckodagsnyckel (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- korta etiketter som visas på kontrollerna för betygsättning med 👍 / 👎 närconversation.conversationRatingEnabled=true. Standardtext är "I like the response" / "I don't like the response". Synliga för slutanvändare. -
whiteLabel.hideRoboAssistLogo- whitelabel-funktion, underställd dina kontogränser. Döljer sidfotsraden "Powered by ChatLab". Om ditt konto inte inkluderar whitelabel lagras värdet men ignoreras, och sidfoten visas alltid. -
whiteLabel.whitelabelLogoLink- whitelabel-funktion, underställd dina kontogränser. Klickmålets URL för den anpassade logotypen närhideRoboAssistLogo=trueoch en anpassad logotypfil laddas upp via multipart-delenwhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekunder (inte millisekunder), heltal0-200. Paus mellan efterföljande botbubblor närsimulateHumanTyping=true. Standardvärde5. -
appearance.autoOpenChatDelaySeconds- sekunder, heltal. Fördröjning innan widgeten öppnas automatiskt närautoOpenChat=trueochautoOpenChatDelay=true. -
advanced.internalLocale- IETF-kod för språk och region i formatetll_CC(understreck, INTEll-CCmed bindestreck). Accepterade värden kommer från en fast lista med ~95 språkområden: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_ILoch många fler. Att skicka endast en tvåställig kod ("en") eller BCP-47 ("en-US") ingår inte i den tillåtna listan. Standardvärdeen_US. Detta är den språkversion som används för datum- och talformatering i widgetens gränssnitt, till skillnad frånrole.language(bottens språk för konversation och svar). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- heltal (skickas som JSON-tal, t.ex.30, inte"30"). Sätt meddelandegränsen till0för att inaktivera denna sessionsbaserade gräns. Om den aktiveras måste en positiv varaktighet anges. Backend tillämpar N meddelanden per session per varaktighet i sekunder innansecurity.talkMessagesRateLimitHitMessagevisas för besökaren. -
advanced.botMessagesLimit- heltal (JSON-tal, t.ex.1000).0innebär inget ytterligare tak per bot, medan kontots övergripande saldo för Credits fortfarande gäller; annars måste det vara en multipel av 1000 (1000,2000,10000, ...). Värden som100eller1500avvisas med400 invalid_parameter. Detta är ett månatligt tak för botkrediter, inte ett antal meddelanden per konversation. Mappningen begränsar inte detta värde till kontots budget; kontots budget sätter fortfarande gränsen för den faktiska användningen.
AI-textmodeller (advanced.model)
Använd den exakta modellidentifierare som returneras i advanced.model när du läser en bot som konfigurerats med din avsedda modell i Settings > Model & Advanced (Inställningar > Modell och avancerat). Nuvarande standardvärde vid skapande är 5.6-LUNA. Identifierare är skiftlägeskänsliga och skiljer sig från visningsnamnen; exempelvis visas 5.6-LUNA som GPT 5.6-luna.
Modellkatalogen förändras över tid. Dra inte slutsatsen att en godtycklig sträng eller en leverantörs offentliga modell-ID stöds bara för att förfrågningsschemat accepterar en sträng. Läs tillbaka den sparade konfigurationen och testa den resulterande chattbotten innan du driftsätter den.
Fältreferens (fullständigt förfrågningsschema)
De sektioner och fält som stöds, med deras typer och viktiga begränsningar. PATCH-semantik: alla fält som utelämnas (eller skickas som null) lämnar det sparade värdet orört. Samma struktur används för svaret (minus binärt multipart-innehåll; plus det skrivskyddade meta-blocket i varje svar och apiKey endast i svaret vid skapande).
Toppnivå
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
name |
string | max 150, obligatoriskt vid skapande | Bottens visningsnamn |
role |
object | Se § role | |
conversation |
object | Se § conversation | |
chatMemory |
object | Se § chatMemory | |
appearance |
object | Se § appearance | |
humanSupport |
object | Se § humanSupport | |
leadCollection |
object | Se § leadCollection | |
liveChat |
object | Se § liveChat | |
consent |
object | Se § consent | |
whiteLabel |
object | Se § whiteLabel | |
security |
object | Se § security | |
advanced |
object | Se § advanced |
Tillägg som endast finns i svaret:
meta: { id, createdAt, updatedAt }- skrivskyddat.apiKey- string, finns endast i svaret förPOST /v1/management/bots- den nyskapade Bot Talk-nyckeln för den nya botten, returneras exakt en gång.
§ role
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Personaförinställning; väljer promptmallen (se "Role and prompt construction") |
language |
string | fullständigt engelskt språknamn (English, Polish, ...) eller Auto Detect |
Primärt språk som matas in i promptmallen |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Önskad utförlighet i AI-svaren |
websiteAddress |
string | Webbplats som används för promptkontext | |
companyDescription |
string | Företagsbeskrivning som används för promptkontext | |
rawPrompt |
string | Anpassad systemprompt - används ordagrant endast när role=CUSTOM |
§ conversation
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
welcomeMessage |
string | Första meddelandet som visas för besökaren när chatten öppnas | |
queryRefinementEnabled |
boolean | Om true förfinas besökarens fråga före RAG-hämtning | |
conversationContinuityEnabled |
boolean | Om true återupptar återkommande besökare sin senaste konversation | |
conversationRatingEnabled |
boolean | Om true visas kontroller med tumme upp/ner för att betygsätta konversationen | |
positiveRatingTooltip |
string | Verktygstips på knappen för positivt betyg | |
negativeRatingTooltip |
string | Verktygstips på knappen för negativt betyg | |
suggestedQuestions |
string | Föreslagna frågor / konversationsöppnare separerade med radbrytningar | |
dynamicSuggestedFollowups |
boolean | Om true föreslår AI uppföljningsfrågor efter varje svar | |
positiveRatingMessage |
string | Meddelande som visas efter positiv feedback | |
negativeRatingMessage |
string | Meddelande som visas efter negativ feedback | |
hideSuggestedQuestionsAfterFirstUse |
boolean | Dölj statiska förslag efter användning | |
dynamicFollowupsAutoIcons |
boolean | Om true väljer AI automatiskt emoji-ikoner för de dynamiska uppföljningarna |
§ chatMemory
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Huvudströmbrytare för chattminnesfunktionen | |
summaryConversationsEnabled |
boolean | Spara sammanfattningar per konversation | |
conversationSummaryPrompt |
string | Anpassad prompt som används för att sammanfatta varje konversation | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Om standardprompten eller den anpassade sammanfattningsprompten ska användas |
clientSummaryPrompt |
string | Anpassad prompt som används för att sammanfatta klienten över flera konversationer | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Standardprompt kontra anpassad klientprofilsprompt |
summariesToKnowledgeRatio |
int | 10-90 (UI-steg 10) |
% av den tillgängliga kunskaps-/minnesbudgeten som allokeras till sammanfattningar vid kontexter över 8k |
§ appearance
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
launcherLabelLine1 |
string | max 60 | Första raden i startknappens text |
launcherLabelLine2 |
string | max 60 | Andra raden i startknappens text |
launcherTextColor |
string | Textfärg på startknappen | |
launcherDismissEnabled |
boolean | Tillåt att startknappen avfärdas | |
widgetFontFamily |
string | inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono |
Typsnittsfamilj för widgeten |
chatDrawerEnabled |
boolean | Aktivera sidopanelsvisning (drawer) | |
launcherColor |
string (hex) | Bakgrundsfärg för startknappen (chattikonen) | |
headerColor |
string (hex) | Bakgrundsfärg för chatthuvudet | |
titleColor |
string (hex) | Titelfärg i chatthuvudet | |
subtitleColor |
string (hex) | Undertitelfärg i chatthuvudet | |
clientMessageBubbleColor |
string (hex) | Bubblans färg för besöksmeddelanden | |
clientMessageTextColor |
string (hex) | Textfärg för besöksmeddelanden | |
responseMessageBubbleColor |
string (hex) | Bubblans färg för bottsvar | |
responseMessageTextColor |
string (hex) | Textfärg för bottsvar | |
chatSubheader |
string | Underrubrik som visas under chatttiteln | |
senderPlaceholder |
string | Platshållartext i inmatningsfältet för meddelanden | |
resetConversationTooltip |
string | Verktygstips på knappen "reset conversation" (återställ konversation) | |
chatAlignment |
string (enum) | ∈ {left, right} |
Vilken sida av skärmen chatten fästs vid |
launcherBottomMargin |
int | 0-500 |
Startknappens avstånd från nederkanten (px) |
launcherSideMargin |
int | 0-500 |
Startknappens avstånd från sidokanten (px) |
displayShadow |
boolean | Skuggeffekt under widgeten | |
customCss |
string | Rå CSS som injiceras i widgetens iframe | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Hur länkar inuti bottmeddelanden öppnas |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified, pill} |
Minimerat läge: startikon, kompakt inmatningsfält eller piller |
chatDesktopWidthPx |
int | Widgetbredd på dator | |
chatDesktopHeightPx |
int | Widgethöjd på dator | |
chatMobileSizePercent |
int | Widgetstorlek på mobil i % av visningsytan | |
messageFontSize |
int | Teckenstorlek för meddelandetext (px) | |
showChatbotBubblesDesktop |
boolean | Visa flytande puffbubblor på dator | |
showChatbotBubblesMobile |
boolean | Visa flytande puffbubblor på mobil | |
chatbotBubblesDelaySeconds |
int | Fördröjning innan puffbubblorna visas (sekunder) | |
launcherIconFullSize |
boolean | Rendera den anpassade startikonen kant-till-kant i stället för indragen | |
welcomeScreenEnabled |
boolean | Visa Welcome Screen (välkomstskärm) i stället för att gå direkt till chatten | |
welcomeScreenQuestionsLabel |
string | Etikett ovanför de föreslagna frågorna på välkomstskärmen | |
welcomeScreenHideHumanContactForm |
boolean | Dölj åtgärden för kontaktformulär till mänsklig support i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Bottar skapade före 2026-09-02 har som standard true |
|
welcomeScreenHideLiveChat |
boolean | Dölj livechattåtgärden i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Bottar skapade före 2026-09-02 har som standard true |
|
headerActionsLayout |
string | ICONS eller DROPDOWN |
Hur Live Chat och kontaktformuläret för mänsklig support erbjuds i chatthuvudet: ICONS (en separat ikon för vardera) eller DROPDOWN (grupperade i sidhuvudmenyn). Bottar skapade före 2026-09-02 har som standard ICONS |
stackSuggestedQuestions |
boolean | Stapla föreslagna frågor vertikalt (i stället för sida vid sida) | |
suggestedQuestionsFontSize |
int | Teckenstorlek för brickor med föreslagna frågor (px) | |
suggestedQuestionsTextColor |
string (hex) | Textfärg på brickor med föreslagna frågor | |
suggestedQuestionsBackgroundColor |
string (hex) | Bakgrundsfärg på brickor med föreslagna frågor | |
autoOpenChat |
boolean | Öppna chatten automatiskt på dator | |
autoOpenChatOnMobiles |
boolean | Öppna chatten automatiskt på mobil | |
autoOpenChatDelay |
boolean | Använd en fördröjning före automatisk öppning | |
autoOpenChatDelaySeconds |
int | Fördröjning för automatisk öppning (sekunder) | |
simulateHumanTyping |
boolean | Dela upp bottens svar i bubblor med skrivanimering | |
simulateHumanTypingDelay |
int | 0-200 |
Fördröjning mellan bubbelmeddelanden (sekunder) |
footerMarkdown |
string | max 255 | Anpassad sidfots-markdown som visas under chatten |
avatarUrl |
string | skrivskyddad | Fullständig publik URL till avataren; för att ändra den, ladda upp via multipart-delen avatar |
Multipart vid POST/PATCH: avatar (fildel). GET / svarstexter utelämnar filinnehållet - endast URL:en överförs.
§ humanSupport
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för flödet Human Support (mänsklig support) | |
email |
string | obligatoriskt (strikt vid skapande) när enabled=true |
Adress som tar emot e-postmeddelanden för mänsklig support |
dialogMessage |
string | Uppmuntrande meddelande som visas ovanför formuläret | |
thankYouMessage |
string | Bekräftelse som visas efter inskickning | |
emailMessageSubjectTemplate |
string | Ämnesmall för e-postmeddelandet som skickas till agenten | |
emailMessageContentTemplate |
string | Innehållsmall för e-postmeddelandet som skickas till agenten | |
emailPlaceholder |
string | Platshållare i e-postfältet | |
messagePlaceholder |
string | Platshållare i meddelandefältet | |
emailWithConversationContent |
boolean | Om true inkluderas konversationstranskriptet i e-postmeddelandet | |
customFormId |
long | id för ett befintligt anpassat formulär | Ersätt det inbyggda kontaktformuläret med ett anpassat formulär. Vid skapande innebär utelämnande att det inbyggda formuläret används; vid PATCH lämnar null det nuvarande valet oförändrat |
customFormMapping |
string | JSON-kodad sträng | Mappar anpassade formulärfält till fälten i e-postmeddelandet för mänsklig support |
requirePolicyAccept finns under consent.humanSupportRequirePolicyAccept, inte här.
§ leadCollection
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för leadformulär | |
nameEnabled |
boolean | Samla in namn | |
nameLabel |
string | Etikett på namnfältet | |
emailEnabled |
boolean | Samla in e-post | |
emailLabel |
string | obligatoriskt (strikt vid skapande) när enabled=true OCH emailEnabled=true |
Etikett på e-postfältet |
phoneEnabled |
boolean | Samla in telefonnummer | |
phoneLabel |
string | obligatoriskt (strikt vid skapande) när enabled=true OCH phoneEnabled=true |
Etikett på telefonfältet |
leaveDetailsMessage |
string | obligatoriskt (strikt vid skapande) när enabled=true |
Meddelande som uppmuntrar besökaren att lämna sina uppgifter |
thankYouMessage |
string | obligatoriskt (strikt vid skapande) när enabled=true |
Bekräftelse som visas efter inskickning |
requireBeforeNewConversation |
boolean | Om true måste formuläret skickas in innan chatten startar; om false avgör AI när formuläret ska visas |
|
emailNotificationEnabled |
boolean | Skicka e-post till ägaren varje gång ett lead samlas in | |
emailNotificationAddress |
string | Mottagare av aviseringar (standard är kontots e-postadress) | |
emailWithConversationContent |
boolean | Om true inkluderas konversationstranskriptet i aviseringen |
| customFormId | long | id för ett befintligt anpassat formulär | Ersätt det inbyggda leadformuläret med ett anpassat formulär. Vid skapande innebär utelämnande att det inbyggda formuläret används; vid PATCH lämnar null det nuvarande valet oförändrat |
| customFormMapping | string | JSON-kodad sträng | Mappar anpassade formulärfält till namn / e-post / telefon |
Regel för flera fält (strikt vid skapande): enabled=true kräver minst ett av alternativen emailEnabled eller phoneEnabled. requirePolicyAccept finns under consent.leadCollectionRequirePolicyAccept, inte här.
§ liveChat
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för funktionen Live Chat | |
infoMessage |
string | Förklarande meddelande före överlämning | |
startMessage |
string | Meddelande som visas när livesessionen startar | |
endMessage |
string | Meddelande som visas när livesessionen avslutas | |
nameLabel |
string | Etikett på namnfältet i förformuläret för livechatt | |
emailLabel |
string | Etikett på e-postfältet i förformuläret för livechatt | |
schedule |
string | JSON-kodad sträng (veckodagsbrytare + from/to + timezone) |
Öppettider för livechatt - se "Structured fields and ranges" för exakt struktur |
outOfHoursMessage |
string | Meddelande som visas när schemat anger att vi har stängt | |
closeModalMessage |
string | Titel för modalfönstret "close live chat?" (stäng livechatt?) | |
closeModalConfirmLabel |
string | Bekräftelseknappens etikett i stängningsrutan | |
closeModalCancelLabel |
string | Avbrytknappens etikett i stängningsrutan | |
closeModalTooltipText |
string | Verktygstips på kontrollen för att stänga chatten | |
operatorHasJoinedLabel |
string | Etikett som visas när en operatör ansluter | |
operatorDidNotJoinInTimeLabel |
string | Etikett som visas när ingen operatör ansluter inom tidsgränsen | |
waitingForOperatorToJoinLabel |
string | Etikett som visas medan man väntar på en operatör | |
waitingForOperatorSeconds |
int | Tidsgräns för en operatör att svara (sekunder) | |
redirectToHumanSupportForm |
boolean | Om true skickas användaren vidare till formuläret för Human Support när ingen operatör svarar | |
requireAdminOnline |
boolean | Kräv en tillgänglig operatör enligt närvaroinställningarna | |
presenceMode |
string | Närvaroläge; använd värdet från en bot som konfigurerats i gränssnittet | |
hideHumanSupportWhenLiveChatAvailable |
boolean | Dölj kontaktformuläret när livechatt är tillgänglig | |
missedEmailEnabled |
boolean | standard true |
Skicka e-post till bottägaren när en förfrågan om livechatt inte besvarades. Lämnas outfyllt på äldre bottar, vilket tolkas som aktiverat |
requirePolicyAccept finns under consent.liveChatRequirePolicyAccept, inte här.
§ consent
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan en ny konversation startas | |
humanSupportRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan formuläret för mänsklig support skickas in | |
leadCollectionRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan leadinsamlingsformuläret skickas in | |
liveChatRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan en livechattsession startas | |
newConversationConsentDescription |
string | Introduktionstext för samtyckesskärmen vid konversationens start | |
privacyPolicyConsentCheckboxLabel |
string | Etikett bredvid kryssrutan för samtycke (innehåller vanligtvis en länk till integritetspolicyn) |
§ whiteLabel
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
hideRoboAssistLogo |
boolean | White Label-funktion; styrs av kontogränser | Dölj ChatLabs standardlogotyp i sidfoten |
whitelabelLogoLink |
string | White Label-funktion; styrs av kontogränser | URL som den anpassade sidfotslogotypen länkar till |
assignToCustomDomain |
boolean | styrs av funktionen CUSTOM_DOMAIN |
Ha chatten på den konfigurerade anpassade domänen |
whitelabelLogoUrl |
string | skrivskyddad | Fullständig publik URL till White Label-logotypen; för att ändra den, ladda upp via multipart-delen whitelabel_logo |
Multipart vid POST/PATCH: whitelabel_logo (fildel). GET / svarstexter utelämnar filinnehållet - endast URL:en överförs.
§ security
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
allowedDomains |
string | Kommaseparerad lista över domäner som tillåts bädda in widgeten (tom = ingen vitlista) | |
spamFilterEnabled |
boolean | Aktivera skräppostfiltret per bot för inkommande meddelanden | |
countryFilterMode |
string | BLACKLIST eller WHITELIST |
Hur landslistorna tolkas. Själva listorna förblir endast tillgängliga för administratörer |
talkMessagesRateLimit |
int | >= 0; 0 inaktiverar |
Maximalt antal användarmeddelanden som tillåts inom frekvensbegränsningsfönstret |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Längd på frekvensbegränsningsfönstret (sekunder) |
talkMessagesRateLimitHitMessage |
string | Meddelande som visas för besökaren när frekvensbegränsningen nås |
§ voice
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
inputEnabled |
boolean | Tillåt besökaren att diktera meddelanden (tal till text) | |
conversationEnabled |
boolean | kräver röstfunktionen i abonnemanget | Aktivera fullständiga röstkonversationer |
voiceId |
string | leverantörsspecifikt röst-id (t.ex. alloy) |
Vilken syntetisk röst som talar |
model |
string | t.ex. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Röstmodell. Faktureras per minut, priserna skiljer sig åt per modell |
turnDetection |
string | leverantörsspecifik | Läge för turtagning |
audioPrompt |
string | Extra systemprompt som endast används vid röstturer | |
welcomeMessage |
string | Talad öppningsfras | |
language |
string | språkkod | Primärt röstspråk |
additionalLanguages |
string | kommaseparerade språkkoder | Extra språk som röstagenten accepterar |
maxDurationSeconds |
int | Fast maxgräns för en enskild röstkonversation | |
maxDurationMessage |
string | Meddelande som visas när maxgränsen nås |
§ multilingual
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för flerspråkigt läge | |
mode |
string | AUTODETECT eller FIXED_LIST |
Hur botten väljer svarspråk |
baseLanguage |
string | språkkod | Språk som bottens egen text är skriven på |
languages |
string | kommaseparerade språkkoder | Språk som erbjuds besökaren |
knowledgeLanguageMode |
string | NONE, MAIN eller DYNAMIC |
Hur kunskap på andra språk hanteras |
knowledgeLanguageFallback |
string | språkkod | Språk som används när ingen matchning hittas |
§ advanced
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
model |
string | begränsas av kontogränser; se "AI text models" ovan | LLM-identifierare (t.ex. 5.6-LUNA) |
temperature |
decimal | 0.0-1.0 |
Samplingstemperatur (motsvarar skjutreglaget i gränssnittet) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; begränsas automatiskt till ditt kontos maxgräns |
Konfigurerad kontextbudget, inklusive instruktioner, historik och kunskap |
botMessagesLimit |
long | 0 eller multipel av 1000 (t.ex. 1000, 2000, 10000) |
Månatligt tak för bottens meddelandekrediter (0 = inget ytterligare botttak; kontobudgeten gäller fortfarande) |
internalLocale |
string | språkkod i formatet ll_CC |
Språkvariant för widgetens ramverksetiketter (skild från role.language) |
productsViewEnabled |
boolean | Om true visas e-handelns Offer Cards inuti chatten | |
includeProductsInKnowledgeBase |
boolean | Om true indexeras produktkatalogen som en del av kunskapsbasen |
Utanför API:ets omfattning
Administratörsgränssnittet tillhandahåller några områden som avsiktligt inte exponeras i denna version av Management API:
- Träning och borttagning - dessa slutpunkter listar inte alla bottar, hanterar inte träningsdataset och tar inte bort bottar. Använd appen för dessa arbetsflöden.
- Fliken Flow (flöde) - det visuella redigeringsverktyget för konversationsflöden, Flow Editor (steg och övergångar). Exponeras inte via Management API.
- Fliken Actions (åtgärder) - hanterade integrationer för e-handel / bokning, AI Search och anpassade API-funktioner. Verktygsanrop (tool calling) har aldrig varit en del av Management API.
- Själva byggverktyget för anpassade formulär - att skapa och redigera anpassade formulär exponeras inte. Du kan däremot koppla ett befintligt formulär till en bot via
leadCollection.customFormIdochhumanSupport.customFormId. - Anpassade ikoner för att öppna/stänga chatt -
customLauncherIconVisible,openChatIcon,closeChatIcon. API:et exponerar endast multipart-delarna för huvudsakligavatarochwhitelabel_logo. - IP- och landslistor - själva posterna är endast tillgängliga för administratörer. Endast tolkningsläget exponeras, via
security.countryFilterMode.
Slutpunkter
POST /v1/management/bots
Skapa en ny bot. Två likvärdiga Content-Types accepteras; välj den som passar bäst.
Läge A - ren JSON (rekommenderas när du inte behöver ladda upp en avatar/logotyp i samma förfrågan):
Content-Type: application/json- Förfrågans brödtext är botkonfigurationens JSON (inget
data-omslag) - Filer (avatar/logotyp) kan laddas upp senare via en andra
PATCHmed läge B
Läge B - multipart/form-data (används vid uppladdning av filer i samma förfrågan):
Content-Type: multipart/form-data; boundary=...dataJSON-del (obligatorisk,Content-Type: application/json) - botkonfiguration i den kapslade strukturen som beskrivs ovanavatarfildel (valfri) - botens avatarbildwhitelabel_logofildel (valfri) - white label-logotyp (gäller endast om ditt konto inkluderar White Label)
Endast name är obligatoriskt i JSON-strukturen; alla andra fält återgår till samma standardvärde som adminpanelens guide skulle sätta.
Exempel på förfrågans brödtext
Detta är den maximala data-JSON-strukturen - alla sektioner ifyllda. Skicka endast de sektioner du behöver; allt annat får standardvärden.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
}
}
Valideringsregler med egna felmeddelanden:
name- obligatoriskt, max 150 teckenadvanced.temperature- mellan0.0och1.0chatMemory.summariesToKnowledgeRatio- heltal mellan10och90(procent, steg10)appearance.launcherBottomMargin,appearance.launcherSideMargin- mellan0och500appearance.footerMarkdown- max 255 teckenhumanSupport.enabled=truekräver atthumanSupport.emailär ifylltleadCollection.enabled=truekräver att minst en avleadCollection.emailEnabledellerleadCollection.phoneEnabledär true; den kanal som är aktiverad kräver även sin etikett, plusleaveDetailsMessageochthankYouMessageadvanced.chatContextSizebegränsas till kontots maximala kontextstorlek som stöds. Förutsätt inte att andra numeriska fält begränsas automatiskt.
Fält vars värde är null på servern utelämnas från JSON-brödtexten - endast fält med icke-nullvärden skickas över nätverket.
Exempel på svarstext (201)
Samma struktur som förfrågan, plus det skrivskyddade meta-blocket och engångsnyckeln apiKey på rotnivån. Skrivskyddade filadresser (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) fylls i av servern när motsvarande multipart-delar laddades upp.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T10:11:02Z"
},
"apiKey": "ck_freshly_minted_bot_talk_key_here"
}
Fältet apiKey visas endast vid skapandet - det är den nyskapade Bot Talk-nyckeln kopplad till den nya botten. Klartexten visas bara en gång och kan inte hämtas senare från API:et; spara den direkt på din sida.
Svarsheadern Location innehåller URL:en till den nya botten (/v1/management/bots/{id}).
Curl-exempel
Läge A - ren JSON (enklast):
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!"}}'
Läge B - multipart med 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}
Returnera den aktuella konfigurationen för en bot du äger.
Curl-exempel
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Exempel på svarstext (200)
Samma struktur som i POST-svaret, minus engångsnyckeln apiKey. Blocket meta inkluderas. Returnerar 404 not_found_error om botten inte finns eller inte tillhör ditt konto.
Den aktuella avataren och white label-logotypen visas som fullständiga, skrivskyddade URL:er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - baserade på samma schema + värd + kontextsökväg som betjänade denna förfrågan. Hämta filinnehållet genom att göra GET direkt mot dessa URL:er; för att ersätta någon av filerna laddar du upp en ny via multipart-delen avatar / whitelabel_logo vid PATCH. Dessa URL-fält ignoreras om de skickas i en förfrågans brödtext.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5.6-LUNA",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T11:02:19Z"
}
}
Klona en bot
Request-body för POST /v1/management/bots och response-body för GET /v1/management/bots/{bot_id} har samma struktur, så kloning sker i en pipeline med tre steg: hämta källan via GET, ta bort serverhanterade identitetsfält och skicka resultatet via POST.
1. Hämta källboten med GET.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Ta bort meta-blocket på rotnivå. Objektet meta (id, createdAt, updatedAt) hanteras av servern och är skrivskyddat - att lämna kvar det i POST-bodyn gör ingen skada (servern ignorerar det), men att ta bort det gör avsikten tydlig och håller datamängden ren. Redigera eventuellt name så att klonen kan skiljas från källan.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Skicka den rensade bodyn via POST för att skapa klonen. Se referensen för POST /v1/management/bots ovan för fullständig body-struktur och valideringsregler.
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d @clone-body.json
Svaret innehåller den nya bottens meta.id samt en nyskapad apiKey (Bot Talk-nyckeln för klonen). Klartextversionen av apiKey returneras endast i detta skapande-svar - kopiera den innan du stänger responstexten, eftersom den inte kan hämtas igen senare.
Detta kopierar inställningar som stöds, inte en fullt tränad chattbot. Träningsinnehåll, konversationshistorik, integrationer/åtgärder, Flow samt formulärdefinitioner klonas inte av dessa slutpunkter. Konfigurera dem separat i appen.
Ytterligare begränsningar:
- Filer klonas inte.
appearance.avatarUrlochwhiteLabel.whitelabelLogoUrlär skrivskyddade och pekar på källbottens filer. Om du behöver samma avatar eller White Label-logotyp på klonen laddar du ner filerna från källans URL-adresser och laddar upp dem som multipart-delarnaavatar/whitelabel_logo- antingen via skapande-POST (läge B) eller i en uppföljande PATCH. - Bot Talk-nycklar klonas inte. Varje bot har sin egen uppsättning av Bot Talk-nycklar. Den enda
apiKeysom returneras vid skapande-POST är den enda som genereras automatiskt; skapa fler nycklar under fliken API (API) för botten vid behov.
PATCH /v1/management/bots/{bot_id}
Uppdatera ett eller flera fält för en bot du äger. Endast sektioner/fält som ingår i JSON-datan modifieras; allt som utelämnas (eller skickas som null) förblir orört. Partiell uppdatering tillämpas per fält inom en skickad sektion.
Två likvärdiga Content-Types accepteras (precis som för POST):
Läge A - ren JSON (rekommenderas vid uppdatering av enbart inställningar):
Content-Type: application/json- Request-body är själva JSON-patchen (inget
data-omslag)
Läge B - multipart/form-data (används vid uppladdning av filer):
- JSON-delen
data(valfri) - själva patchen. Skicka endast om du vill ändra fält. Utelämna helt om du bara vill ladda upp en avatar eller logotyp. - Fildelen
avatar(valfri) - ersätt avataren - Fildelen
whitelabel_logo(valfri) - ersätt White Label-logotypen (gäller endast om ditt konto har stöd för White Label)
Alla tre delar är valfria vid PATCH, men minst en måste inkluderas för att anropet ska göra någon skillnad.
Exempel på request-body (flera sektioner)
Alla fält som accepteras av POST /v1/management/bots kan också skickas här. Exemplet nedan illustrerar flera sektioner, inte alla fält som stöds; i praktiken skickar du enbart de nycklar du vill ändra (se "Minimal partiell uppdatering" längre ner) - alla nycklar som utelämnas (eller skickas som null) lämnar det sparade värdet oförändrat.
{
"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
}
}
Minimal partiell uppdatering
Uppdatera ett enskilt fält via PATCH genom att endast skicka de nycklar du vill ändra - allt annat bevaras.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Curl-exempel
Läge A - ren JSON (enklast):
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"}}'
Läge B - multipart (när du ersätter avatar / logotyp):
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'
Läge B - ersätt enbart avataren (inga fältändringar):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Response-body (200)
Samma struktur som GET /v1/management/bots/{bot_id} - bottens fullständiga konfiguration efter att patchen har tillämpats, inklusive meta-blocket. Inget apiKey-fält. Returnerar 404 not_found_error om botten inte finns eller inte tillhör ditt konto.
Exemplet nedan visar svaret efter att ha tillämpat patchen från Fullständig request-body (flera sektioner) ovan på botten från GET-exemplet - ändrade fält återspeglar de nya värdena, orörda fält bevaras och meta.updatedAt räknas upp.
{
"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
Läs av aktuell prenumerationsanvändning för kontot som äger Management-nyckeln.
Response-body (200)
{
"subscriptionType": "your-plan-id",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeär en identifierare i gemener för kontots aktuella abonnemang (your-plan-idär ett exempel på en platshållare). Abonnemangen hämtas från en dynamisk katalog, så den exakta uppsättningen identifierare kan förändras över tid när abonnemang byter namn eller läggs till - hantera detta som en godtycklig sträng, inte en fast enum.messages.used/limit/remainingvisar meddelandekrediter för innevarande kalendermånad och nollställs den första dagen i månaden, inte på förnyelsedagen för prenumerationen. De är kreditviktade och motsvarar inte ett rent antal svar.bots.used/limit/remainingräknar ägda botar, inklusive pausade botar, mot ditt kontos totala botgräns.
Rate limit-headers
Svar som når hastighetsbegränsningsstadiet (det vill säga autentisering och IP-vitlistning godkändes) innehåller:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- taket per nyckel som faktiskt tillämpas på detta anrop (10 som standard, eller ditt konfigureraderateLimitPerMinuteom det är lägre).X-RateLimit-Remaining- återstående tokens i hinken direkt efter detta anrop.X-RateLimit-Reset- Unix epoch-sekunder då nästa token blir tillgänglig (inte en fullständig återställning av hinken; hinken fylls på kontinuerligt). När hinken är full är detta den aktuella tiden.
Vid 429 rate_limit_exceeded-svar anges även Retry-After, uttryckt i hela sekunder tills minst en token blir ledig.
Fel före autentisering (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) och 403 ip_not_whitelisted innehåller inte X-RateLimit-*-headers - hastighetsbegränsaren kontrolleras först efter att autentisering och IP-kontroller har lyckats.
Felformat
Samma struktur som Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Valideringsfel använder code: "invalid_parameter" och lägger till fältsökvägen som felar i början av meddelandet så att den felande delen är enkel att upptäcka:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Felaktiga värden för enum- / begränsade uppsättningsfält (t.ex. chatMemory.clientSummaryPromptType = "BOGUS") inkluderar fältsökvägen, det avvisade värdet samt listan över tillåtna värden:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Relaterat
För konversationsslutpunkter och SSE-strömning, se Bot Talk API.