Oversigt over Management API
Management API er beregnet til backoffice-opgaver, der ikke involverer afsendelse af chatbeskeder:
- opret en bot programmatisk med
POST /v1/management/bots - læs en specifik bot, du ejer, med
GET /v1/management/bots/{bot_id} - opdater en specifik bot med
PATCH /v1/management/bots/{bot_id} - aflæs abonnementsforbrug med
GET /v1/usage
Management-nøgler er knyttet til din konto, ikke til en bestemt bot. De holdes bevidst adskilt fra Bot Talk-nøgler, så en kompromitteret chatnøgle ikke kan ændre dine botter eller læse dine faktureringsdata.
Base-URL
https://api.chatlab.com/aichat
Alle endpoints i denne artikel er relative i forhold til denne base-URL.
Kom godt i gang
- Åbn administrationsappen, og gå til Account Settings > Management API (Kontoindstillinger > Management API).
- Klik på Create Management Key (Opret Management-nøgle), giv den et navn, angiv eventuelt IP-hvidliste og hastighedsgrænse (rate limit), og indsend derefter.
- Vælg kun de tilladelser, din integration har brug for, og kopiér den fulde nøgle fra bekræftelsesmodalen. Nøglen i klartekst vises kun én gang.
- Gem den på din server, ikke i browserkode eller i et offentligt repository. Foretag en skrivebeskyttet anmodning såsom
GET /v1/usagemed tilladelsenusagefor at bekræfte adgangen. - Tilbagekald ubrugte eller kompromitterede nøgler fra siden Management API.
En nøgle ser ud som mk_abcdefghijklmnopqrstuvwxyz012345. Præfikset mk_ adskiller den fra Bot Talk-nøgler (ck_).
Autentificering
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Hvis du sender en mk_-nøgle til /v1/chat (eller et hvilket som helst andet Bot Talk-endpoint), returneres 403 key_type_not_allowed. Hvis du sender en ck_-nøgle til /v1/management/*, returneres den samme fejl.
Grænser
- Maks. 5 aktive Management API-nøgler pr. bruger
- Maks. 10 anmodninger pr. minut pr. nøgle (token bucket, kapacitet 10, jævn genopfyldning med ~1 token hvert 6. sekund). Kan konfigureres nedad ved oprettelse - angiv en lavere
rateLimitPerMinute, så falder loftet, og genopfyldningshastigheden skalerer med det.
Tilladelser
Hver Management-nøgle indeholder en vilkårlig delmængde af de tre nedenstående tilladelser. Mindst én skal vælges ved oprettelse; ellers afvises anmodningen med 400 invalid_request_error. Hvis du kalder et endpoint med en nøgle, der mangler den påkrævede tilladelse, returneres 403 insufficient_permissions.
bot_read- påkrævet forGET /v1/management/bots/{bot_id}bot_management- påkrævet forPOST /v1/management/botsogPATCH /v1/management/bots/{bot_id}usage- påkrævet forGET /v1/usage
Body-struktur: indlejrede sektioner, der afspejler fanerne i administrationspanelet
POST og PATCH accepterer en JSON-body opdelt i 13 sektioner. Hver sektion svarer til en underfane i administrationsappens sidepanel Bot Settings (Bot-indstillinger), så JSON-nøglerne og de synlige faner passer sammen: Hvis du ændrer consent.humanSupportRequirePolicyAccept via API'et, vil du se den samme til/fra-knap skifte på fanen Consent & Privacy (Samtykke og privatliv) i administrationsappen.
role- bot-persona, rå prompt, svarlængde, sprog, kontekst for website / virksomhed (fanen Role & Behavior)conversation- velkomstbesked, forespørgselsforfinelse, samtalekontinuitet, til/fra-knap til vurdering + værktøjstip, indhold til foreslåede spørgsmål + dynamiske opfølgninger (fanen Chat Conversation)chatMemory- til/fra-knap til chathukommelse, opsummeringsprompter, kontekstallokering (fanen Summaries & Memory)appearance- farver, tekst, dimensioner, brugerdefineret CSS, velkomstskærm, styling af foreslåede spørgsmål, adfærd for automatisk åbning, simulering af menneskelig skrivning, sidefods-markdown (fanen Appearance)humanSupport- menneskelig kontaktformular (fanen Human Contact Form)leadCollection- lead capture-formular (fanen Lead Collection)liveChat- overdragelse til livechat (fanen Live Chat)consent- alle fire til/fra-knapper for samtykke til privatlivspolitik samt teksten på samtykkeskærmen (fanen Consent & Privacy)whiteLabel- skjul logo, brugerdefineret logolink, hosting på brugerdefineret domæne (fanen Whitelabel)security- tilladte domæner, spamfilter, samtalens hastighedsgrænser (fanen Security)voice- stemmeinput og stemmesamtaler: model, stemme, sprog, prompt, varighedsgrænse (fanen Voice Conversation)multilingual- flersproget tilstand, basissprog, tilbudte sprog, håndtering af videnssprog (fanen Languages)advanced- LLM-model, temperatur, kontekststørrelse, grænse for bot-beskeder, intern landestandard, Offer Cards (fanen Model & Advanced)
Af de skrivbare indstillinger findes kun name på øverste niveau, fordi det identificerer botten frem for at høre til en specifik fane.
Sidepanelet Bot Settings har i øjeblikket 16 underfaner, og 13 af dem svarer til sektionerne ovenfor. De tre underfaner uden en tilsvarende sektion er Flow, Actions og Forms - alle tre er beskrevet under "Uden for API-omfang" nedenfor. De 13, der matcher, er Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation og Languages.
Anmodnings-body og svar-body deler samme struktur. Svaret tilføjer to ekstra elementer:
meta- skrivebeskyttet: bot-id og tidsstempler. Fjern det for at gøre et GET-svar til en gyldig POST-body.apiKey- findes kun ved oprettelse - den nyoprettede Bot Talk API-nøgle til den nye bot.
To felter i den fælles struktur er skrivebeskyttede - de returneres i svaret, men ignoreres, hvis du forsøger at sende dem med POST/PATCH:
appearance.avatarUrl- fuldt kvalificeret offentlig URL til bottens avatar-billede (f.eks.https://api.chatlab.com/aichat/content/avatar_xyz.png). Foretag et direkte GET-kald for at downloade bytes. For at ændre det skal du uploade en ny fil via multipart-delenavatar(se PATCH).whiteLabel.whitelabelLogoUrl- fuldt kvalificeret offentlig URL til white-label-sidehovedlogoet. Samme mønster somavatarUrl. For at ændre det skal du uploade en ny fil via multipart-delenwhitelabel_logo(se PATCH).
Begge URL'er anvender den aktuelle anmodnings protokol + vært + kontekststi, så på et brugerdefineret white-label-domæne returneres de med rod på det pågældende domæne (f.eks. https://api.acme.com/aichat/content/...).
Send null for en sektion for at springe den over ved PATCH; send null for et felt i en sektion for at springe det enkelte felt over. null på feltniveau rydder aldrig en gemt værdi - det betyder blot "rør ikke".
Rolle og opbygning af prompt
Den systemprompt, som LLM'en reelt modtager, opbygges på en af to måder afhængigt af role.role. Når du ved, hvilken gren du befinder dig på, ved du, hvilke felter der har betydning, og hvilke der gemmes, men ignoreres.
Gren A - role.role er CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (skabelonbaseret)
Backend sammensætter prompten ud fra en indbygget skabelon og ignorerer role.rawPrompt fuldstændigt (værdien gemmes stadig på botten, men bruges ikke). Skabelonen indeholder:
role.role- rolleetiket (f.eks. "Customer Support") og rollespecifikke instruktioner, der tilføjes automatiskname- bottens navn, indsat i åbningssætningenrole.language-"Auto Detect"slår botten over til at følge brugerens sprog; enhver anden værdi (f.eks."English","Polish") bliver til "Output in {language}, unless user uses another language"role.responseLength- tilknyttet et målordantal:Concise≈ 50 ord,Normal≈ 100,Detailed≈ 200role.websiteAddress- valgfri; hvis udfyldt, tilføjes den som "for the users of the website {url}"role.companyDescription- valgfri; hvis udfyldt, foranstilles den som et ekstra afsnit før rolleinstruktionerne
Dette er den anbefalede gren for de fleste botter - du får automatisk rollejusteret adfærd og sikkerhedsforanstaltninger.
Gren B - role.role er CUSTOM (prompt leveret af brugeren)
Backend anvender role.rawPrompt som rolleprompt og tilføjer platformens faste vejledning om svarlængde. Dette er adskilt fra role.responseLength: Den valgfrie indstilling Concise/Normal/Detailed indsættes ikke for en CUSTOM-rolle. Tilsvarende bliver language, websiteAddress og companyDescription gemt, men ikke indsat i denne rolleprompt. Medtag selv ønsket sprog, målsvarlængde eller virksomhedskontekst i rawPrompt. Yderligere runtime-instruktioner og hentet kontekst kan også leveres, så rawPrompt udgør ikke hele modellens input. Den foruddefinerede rolles toneinstruktioner tilføjes ikke, men valget af CUSTOM fjerner ikke alle platforminstruktioner.
Brug kun CUSTOM, hvis den skabelonbaserede prompt ikke passer til dit anvendelsesscenarie (f.eks. hvis du har brug for en meget branchespecifik persona, dine egne sikkerhedsbegrænsninger eller et ikke-standardiseret outputformat).
Enum- / lukkede felter
Enum- og begrænsede felter afviser ugyldige værdier med 400 invalid_parameter. Andre felter er almindelige tekststrenge, selv hvor brugerfladen tilbyder en fast liste. Brug den dokumenterede stavemåde, og valider dit payload i stedet for at antage, at enhver ikke-understøttet streng automatisk afvises.
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- det fulde engelske sprognavn fra rullemenuen i administrationspanelet, f.eks.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindiog ~80 andre. Værdien gemmes ordret og indsættes i promptskabelonen, så to-bogstavs ISO-koder (en,pl) og andre værdier uden for listen ikke afvises af API'et, men vil resultere i en forvansket instruktion som "Output in en, unless...". Som standard sat tilAuto Detect, hvis den udelades ved oprettelse.advanced.model- se "AI-tekstmodeller" nedenfor. Dette er en streng, ikke en valideret enum i anmodningsskemaet; brug en understøttet værdi, ikke et vilkårligt modelnavn.advanced.chatContextSize- brug8000,16000eller32000, modsvarende brugerfladen. Værdier over kontoens maksimum reduceres automatisk; DTO'en håndhæver ikke dette sæt af tre værdier.chatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minified,pillappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- boolesk til/fra-knap.truetvinger brugeren til at udfylde leadformularen, før en samtale startes;falselader AI'en bestemme, hvornår formularen skal vises (standard).
Strukturerede felter og intervaller
Felter, der ligner simple strenge eller tal, men som i virkeligheden har specifikke strukturer, intervaller eller finurligheder i administrationspanelet, der er værd at kende til.
-
advanced.temperature- accepteret interval er0.0til1.0, modsvarende skyderen i administrationspanelet. Værdier uden for dette interval afvises med400 invalid_parameter. -
chatMemory.summariesToKnowledgeRatio- heltalsprocent,10-90; brugerfladen anvender trin på10, men API'et accepterer heltal inden for hele intervallet. Standard er50. Når hukommelse er aktiveret, og konteksten er større end 8k, opdeles videns- og hukommelsesbudgettet efter prompt-/nylig samtale-reservationen, ikke hele modelkonteksten. Ved 8k tildeles intet opsummeringsbudget med denne indstilling. -
liveChat.schedule- JSON kodet som en streng, ikke et indlejret JSON-objekt på forbindelsen. Serveren gemmer den rå streng ordret; administrationsbrugerfladen parser den på klientsiden, når tidsplaneditoren renderes. Når den er parset, er strengen struktureret med én post pr. ugedag plus entimezone-nøgle:- hver ugedagsnøgle (
monday-sunday) knytter sig til{enabled: boolean, from: "H:MM", to: "H:MM"}i 24-timers format timezoneer et IANA-zonenavn (f.eks."Europe/Warsaw","America/New_York")
Eksempel på værdi (bemærk de ydre anførselstegn og de escapede indre anførselstegn - det er ét strengfelt, ikke et indlejret 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\"}"Uden for de anførte timer vises
liveChat.outOfHoursMessagefor den besøgende, og overdragelsen til livechat undertrykkes. Validering af den indre struktur kører udelukkende klientside i administrationspanelet - forkert udformet JSON eller ukendte nøgler accepteres af API'et blot som en streng og vil vise sig som en renderingsfejl, når et menneske senere åbner botten i administrationspanelet. Valider strukturen på din side før afsendelse. - hver ugedagsnøgle (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- korte etiketter, der vises på kontrolknapperne for samtalebedømmelse med 👍 / 👎, nårconversation.conversationRatingEnabled=true. Standardtekst er "I like the response" / "I don't like the response". Synlig for slutbrugere. -
whiteLabel.hideRoboAssistLogo- white-label-funktion, underlagt dine kontogrænser. Skjuler sidefoden "Powered by ChatLab". Hvis din konto ikke omfatter white-label, gemmes værdien, men ignoreres, og sidefoden renderes altid. -
whiteLabel.whitelabelLogoLink- white-label-funktion, underlagt dine kontogrænser. Klikmåls-URL for det brugerdefinerede logo, nårhideRoboAssistLogo=true, og der er uploadet en brugerdefineret logofil via multipart-delenwhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekunder (ikke millisekunder), heltal0-200. Pause mellem efterfølgende bot-talebobler, nårsimulateHumanTyping=true. Standard er5. -
appearance.autoOpenChatDelaySeconds- sekunder, heltal. Forsinkelse, før widgetten åbnes automatisk, nårautoOpenChat=trueogautoOpenChatDelay=true. -
advanced.internalLocale- IETF-landestandardkode på formenll_CC(understregning, IKKEll-CCmed bindestreg). Accepterede værdier stammer fra en fast liste med ~95 landestandarder: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_ILog mange flere. Afsendelse af en to-bogstavs kode alene ("en") eller BCP-47 ("en-US") er ikke på listen over tilladte værdier. Standard eren_US. Dette er den landestandard, der bruges til dato-/talformatering i widgettens elementer, adskilt frarole.language(bottens sprog i samtaleoutputtet). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- heltal (sendes som JSON-tal, f.eks.30, ikke"30"). Sæt beskedgrænsen til0for at deaktivere denne sessionsbaserede grænse. Ved aktivering skal der angives en positiv varighed. Backend håndhæver N beskeder pr. session pr. varighed i sekunder, førsecurity.talkMessagesRateLimitHitMessagevises for den besøgende. -
advanced.botMessagesLimit- heltal (JSON-tal, f.eks.1000).0betyder intet ekstra loft pr. bot, mens kontoens kreditbudget stadig gælder; ellers skal det være et multiplum af 1000 (1000,2000,10000, ...). Værdier som100eller1500afvises med400 invalid_parameter. Dette er et månedligt bot-kreditloft, ikke et antal beskeder pr. samtale. Mapperen begrænser ikke denne værdi til kontobudgettet; kontoens budget begrænser stadig det faktiske forbrug.
AI-tekstmodeller (advanced.model)
Brug den nøjagtige modelidentifikator, der returneres i advanced.model, når du læser en bot konfigureret med din ønskede model i Settings > Model & Advanced (Indstillinger > Model og avanceret). Den nuværende standard ved oprettelse er 5.6-LUNA. Identifikatorer skelner mellem store og små bogstaver og adskiller sig fra visningsnavne; for eksempel vises 5.6-LUNA som GPT 5.6-luna.
Modelkataloget ændrer sig over tid. Udled ikke, at en vilkårlig streng eller en udbyders offentlige model-id understøttes, blot fordi anmodningsskemaet accepterer en streng. Udlæs den gemte konfiguration, og test den resulterende chatbot, før du udruller den.
Feltreference (fuldt request-schema)
De understøttede sektioner og felter med deres typer og vigtige begrænsninger. PATCH-semantik: ethvert udeladt felt (eller sendt som null) lader den gemte værdi forblive uændret. Den samme struktur bruges til svaret (fratrukket binært multipart-indhold; plus den skrivebeskyttede meta-blok i hvert svar og apiKey kun i svaret ved oprettelse).
Øverste niveau
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
name |
string | maks. 150, påkrævet ved oprettelse | Bottens viste navn |
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 |
Tilføjelser, der kun optræder i svar:
meta: { id, createdAt, updatedAt }- skrivebeskyttet.apiKey- string, findes kun i svaret påPOST /v1/management/bots- den nyligt oprettede Bot Talk-nøgle til den nye bot, returneret præcis én gang.
§ role
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Persona-forudindstilling; vælger prompt-skabelonen (se "Rolle- og prompt-opbygning") |
language |
string | fuldt engelsk sprognavn (English, Polish, ...) eller Auto Detect |
Primært sprog, der sendes ind i prompt-skabelonen |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Ønsket detaljegrad for AI-svaret |
websiteAddress |
string | Websted brugt til prompt-kontekst | |
companyDescription |
string | Virksomhedsbeskrivelse brugt til prompt-kontekst | |
rawPrompt |
string | Tilpasset system-prompt - bruges kun ordret, når role=CUSTOM |
§ conversation
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
welcomeMessage |
string | Første besked, der vises for den besøgende ved åbning | |
queryRefinementEnabled |
boolean | Hvis sand, præciseres den besøgendes spørgsmål før RAG-hentning | |
conversationContinuityEnabled |
boolean | Hvis sand, genoptager tilbagevendende besøgende deres seneste samtale | |
conversationRatingEnabled |
boolean | Hvis sand, vises kontroller med tommelfinger op/ned til samtalebedømmelse | |
positiveRatingTooltip |
string | Værktøjstip på knappen til positiv bedømmelse | |
negativeRatingTooltip |
string | Værktøjstip på knappen til negativ bedømmelse | |
suggestedQuestions |
string | Linjeskift-adskilte foreslåede spørgsmål / samtaleåbnere | |
dynamicSuggestedFollowups |
boolean | Hvis sand, foreslår AI opfølgende forslag efter hvert svar | |
positiveRatingMessage |
string | Besked, der vises efter positiv feedback | |
negativeRatingMessage |
string | Besked, der vises efter negativ feedback | |
hideSuggestedQuestionsAfterFirstUse |
boolean | Skjul statiske forslag efter brug | |
dynamicFollowupsAutoIcons |
boolean | Hvis sand, vælger AI automatisk emoji-ikoner til de dynamiske opfølgninger |
§ chatMemory
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
enabled |
boolean | Hovedafbryder til funktionen chat-hukommelse | |
summaryConversationsEnabled |
boolean | Gem opsummeringer for hver samtale | |
conversationSummaryPrompt |
string | Tilpasset prompt brugt til at opsummere hver samtale | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Om standardprompten eller den tilpassede opsummeringsprompt skal bruges |
clientSummaryPrompt |
string | Tilpasset prompt brugt til at opsummere klienten på tværs af samtaler | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Standardprompt kontra tilpasset klientprofil-prompt |
summariesToKnowledgeRatio |
int | 10-90 (trin i UI: 10) |
% af det tilgængelige videns-/hukommelsesbudget allokeret til opsummeringer ved kontekster over 8k |
§ appearance
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
launcherLabelLine1 |
string | maks. 60 | Første linje af launcher-tekst |
launcherLabelLine2 |
string | maks. 60 | Anden linje af launcher-tekst |
launcherTextColor |
string | Launcher-tekstfarve | |
launcherDismissEnabled |
boolean | Tillad at lukke launcheren | |
widgetFontFamily |
string | inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono |
Widget-skrifttypefamilie |
chatDrawerEnabled |
boolean | Aktivér skuffevisning (drawer) | |
launcherColor |
string (hex) | Baggrundsfarve på launcher (chat-ikon) | |
headerColor |
string (hex) | Baggrundsfarve på chat-header | |
titleColor |
string (hex) | Titelfarve på chat-header | |
subtitleColor |
string (hex) | Undertitelfarve på chat-header | |
clientMessageBubbleColor |
string (hex) | Beskedboblefarve for besøgende | |
clientMessageTextColor |
string (hex) | Beskedtekstfarve for besøgende | |
responseMessageBubbleColor |
string (hex) | Svarboblefarve for botten | |
responseMessageTextColor |
string (hex) | Svartekstfarve for botten | |
chatSubheader |
string | Tagline vist under chat-titlen | |
senderPlaceholder |
string | Pladsholdertekst i beskedfeltet | |
resetConversationTooltip |
string | Værktøjstip på knappen "nulstil samtale" | |
chatAlignment |
string (enum) | ∈ {left, right} |
Hvilken side af skærmen chatten er forankret til |
launcherBottomMargin |
int | 0-500 |
Launchers afstand fra bundkanten (px) |
launcherSideMargin |
int | 0-500 |
Launchers afstand fra sidekanten (px) |
displayShadow |
boolean | Skyggeeffekt under widgetten | |
customCss |
string | Rå CSS indsat i widgettens iframe | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Hvordan links inde i bot-beskeder åbnes |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified, pill} |
Minimeret tilstand: launcher-ikon, kompakt afsenderlinje eller pille |
chatDesktopWidthPx |
int | Desktop-widgetbredde | |
chatDesktopHeightPx |
int | Desktop-widgethøjde | |
chatMobileSizePercent |
int | Mobil-widgetstørrelse som % af viewport | |
messageFontSize |
int | Skriftstørrelse for beskedtekst (px) | |
showChatbotBubblesDesktop |
boolean | Vis de svævende teaser-bobler på desktop | |
showChatbotBubblesMobile |
boolean | Vis de svævende teaser-bobler på mobil | |
chatbotBubblesDelaySeconds |
int | Forsinkelse før teaser-boblerne vises (sekunder) | |
launcherIconFullSize |
boolean | Vis det tilpassede launcher-ikon helt til kanten i stedet for med indrykning | |
welcomeScreenEnabled |
boolean | Vis velkomstskærmen i stedet for at gå direkte til chatten | |
welcomeScreenQuestionsLabel |
string | Etiket over de foreslåede spørgsmål på velkomstskærmen | |
welcomeScreenHideHumanContactForm |
boolean | Skjul handlingen for kontaktformular til et menneske i headeren, mens velkomstskærmen vises. Den dukker op igen efter den besøgendes første besked. Bots oprettet før 2026-09-02 har som standard true |
|
welcomeScreenHideLiveChat |
boolean | Skjul handlingen for Live Chat i headeren, mens velkomstskærmen vises. Den dukker op igen efter den besøgendes første besked. Bots oprettet før 2026-09-02 har som standard true |
|
headerActionsLayout |
string | ICONS eller DROPDOWN |
Hvordan Live Chat og formularen til menneskelig kontakt tilbydes i chat-headeren: ICONS (hver sit ikon) eller DROPDOWN (grupperet i header-menuen). Bots oprettet før 2026-09-02 har som standard ICONS |
stackSuggestedQuestions |
boolean | Stabl foreslåede spørgsmål lodret (i stedet for side om side) | |
suggestedQuestionsFontSize |
int | Skriftstørrelse på chips med foreslåede spørgsmål (px) | |
suggestedQuestionsTextColor |
string (hex) | Tekstfarve på chips med foreslåede spørgsmål | |
suggestedQuestionsBackgroundColor |
string (hex) | Baggrundsfarve på chips med foreslåede spørgsmål | |
autoOpenChat |
boolean | Åbn automatisk chatten på desktop | |
autoOpenChatOnMobiles |
boolean | Åbn automatisk chatten på mobil | |
autoOpenChatDelay |
boolean | Brug en forsinkelse før automatisk åbning | |
autoOpenChatDelaySeconds |
int | Forsinkelse ved automatisk åbning (sekunder) | |
simulateHumanTyping |
boolean | Opdel bottens svar i bobler med skriveanimation | |
simulateHumanTypingDelay |
int | 0-200 |
Forsinkelse mellem boblebeskeder (sekunder) |
footerMarkdown |
string | maks. 255 | Tilpasset sidefods-markdown vist under chatten |
avatarUrl |
string | skrivebeskyttet | Fuldt kvalificeret offentlig URL til avataren; for at ændre den skal du uploade via multipart-delen avatar |
Multipart ved POST/PATCH: avatar (fildel). GET- / svar-bodies udelader filindholdet - kun URL'en sendes.
§ humanSupport
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
enabled |
boolean | Hovedafbryder for Human Support-forløbet | |
email |
string | påkrævet (strikt ved oprettelse) når enabled=true |
Adresse, der modtager e-mails om menneskelig support |
dialogMessage |
string | Opfordringsbesked vist over formularen | |
thankYouMessage |
string | Bekræftelse vist efter indsendelse | |
emailMessageSubjectTemplate |
string | Emneskabelon for e-mailen sendt til agenten | |
emailMessageContentTemplate |
string | Brødtekstskabelon for e-mailen sendt til agenten | |
emailPlaceholder |
string | Pladsholder i e-mail-feltet | |
messagePlaceholder |
string | Pladsholder i beskedtekstfeltet | |
emailWithConversationContent |
boolean | Hvis sand, inkluderes samtaleudskriften i e-mailens brødtekst | |
customFormId |
long | id på en eksisterende tilpasset formular | Erstat den indbyggede kontaktformular med en tilpasset formular. Ved oprettelse vil udeladelse bruge den indbyggede formular; ved PATCH lader null det aktuelle valg forblive uændret |
customFormMapping |
string | JSON-kodet streng | Mapper felter fra den tilpassede formular til felterne i e-mailen for menneskelig support |
requirePolicyAccept findes under consent.humanSupportRequirePolicyAccept, ikke her.
§ leadCollection
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
enabled |
boolean | Til/fra-knap for lead-formular | |
nameEnabled |
boolean | Indsaml navn | |
nameLabel |
string | Etiket på navnefeltet | |
emailEnabled |
boolean | Indsaml e-mail | |
emailLabel |
string | påkrævet (strikt ved oprettelse) når enabled=true OG emailEnabled=true |
Etiket på e-mail-feltet |
phoneEnabled |
boolean | Indsaml telefonnummer | |
phoneLabel |
string | påkrævet (strikt ved oprettelse) når enabled=true OG phoneEnabled=true |
Etiket på telefonfeltet |
leaveDetailsMessage |
string | påkrævet (strikt ved oprettelse) når enabled=true |
Besked, der opfordrer den besøgende til at efterlade sine oplysninger |
thankYouMessage |
string | påkrævet (strikt ved oprettelse) når enabled=true |
Bekræftelse vist efter indsendelse |
requireBeforeNewConversation |
boolean | Hvis true, skal formularen indsendes, før chatten starter; hvis false, beslutter AI, hvornår formularen vises |
|
emailNotificationEnabled |
boolean | Send en e-mail til ejeren, hver gang et lead indsamles | |
emailNotificationAddress |
string | Modtager af notifikationer (standard er kontoens e-mail) | |
emailWithConversationContent |
boolean | Hvis sand, inkluderes samtaleudskriften i notifikationen |
| customFormId | long | id på en eksisterende tilpasset formular | Erstat den indbyggede lead-formular med en tilpasset formular. Ved oprettelse vil udeladelse bruge den indbyggede formular; ved PATCH lader null det aktuelle valg forblive uændret |
| customFormMapping | string | JSON-kodet streng | Mapper felter fra den tilpassede formular til navn / e-mail / telefon |
Regel på tværs af felter ved strikt oprettelse: enabled=true kræver mindst én af emailEnabled eller phoneEnabled. requirePolicyAccept findes under consent.leadCollectionRequirePolicyAccept, ikke her.
§ liveChat
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
enabled |
boolean | Til/fra-knap for funktionen Live Chat | |
infoMessage |
string | Forklarende besked før overdragelse | |
startMessage |
string | Besked, der vises, når live-sessionen starter | |
endMessage |
string | Besked, der vises, når live-sessionen slutter | |
nameLabel |
string | Etiket på navnefeltet i for-formularen til Live Chat | |
emailLabel |
string | Etiket på e-mail-feltet i for-formularen til Live Chat | |
schedule |
string | JSON-kodet streng (ugedagsknapper + from/to + timezone) |
Åbningstider for Live Chat - se "Strukturerede felter og intervaller" for den nøjagtige form |
outOfHoursMessage |
string | Besked, der vises, når tidsplanen angiver, at der er lukket | |
closeModalMessage |
string | Titel på modalen "Luk live chat?" | |
closeModalConfirmLabel |
string | Etiket på bekræftelsesknappen i lukkemodalen | |
closeModalCancelLabel |
string | Etiket på annulleringsknappen i lukkemodalen | |
closeModalTooltipText |
string | Værktøjstip på handlingen til at lukke chatten | |
operatorHasJoinedLabel |
string | Etiket, der vises, når en operatør deltager | |
operatorDidNotJoinInTimeLabel |
string | Etiket, der vises, når ingen operatør deltager inden for tidsfristen | |
waitingForOperatorToJoinLabel |
string | Etiket, der vises, mens der ventes på en operatør | |
waitingForOperatorSeconds |
int | Timeout for, at en operatør svarer (sekunder) | |
redirectToHumanSupportForm |
boolean | Hvis sand, viderestilles der til formularen for Human Support, når ingen operatør svarer | |
requireAdminOnline |
boolean | Kræv en tilgængelig operatør i henhold til tilstedeværelsesindstillinger | |
presenceMode |
string | Tilstedeværelsestilstand; brug værdien fra en bot konfigureret i brugerfladen | |
hideHumanSupportWhenLiveChatAvailable |
boolean | Skjul kontaktformularen, når Live Chat er tilgængelig | |
missedEmailEnabled |
boolean | standard true |
Send en e-mail til bottens ejer, når en anmodning om Live Chat ikke blev besvaret. Er ikke sat på ældre bots, hvilket tolkes som aktiveret |
requirePolicyAccept findes under consent.liveChatRequirePolicyAccept, ikke her.
§ consent
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Kræv samtykke til privatlivspolitik før start af en ny samtale | |
humanSupportRequirePolicyAccept |
boolean | Kræv samtykke til privatlivspolitik før indsendelse af formularen til menneskelig support | |
leadCollectionRequirePolicyAccept |
boolean | Kræv samtykke til privatlivspolitik før indsendelse af formularen til lead-indsamling | |
liveChatRequirePolicyAccept |
boolean | Kræv samtykke til privatlivspolitik før start af en Live Chat-session | |
newConversationConsentDescription |
string | Introduktionstekst til samtykkeskærmen ved samtalens start | |
privacyPolicyConsentCheckboxLabel |
string | Etiket ved siden af afkrydsningsfeltet for samtykke (indeholder normalt et link til privatlivspolitikken) |
§ whiteLabel
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
hideRoboAssistLogo |
boolean | white-label-funktion; underlagt kontobegrænsninger | Skjul standard ChatLab-logoet i sidefoden |
whitelabelLogoLink |
string | white-label-funktion; underlagt kontobegrænsninger | URL, som det tilpassede logo i sidefoden linker til |
assignToCustomDomain |
boolean | styret af funktionen CUSTOM_DOMAIN |
Host chatten på det konfigurerede tilpassede domæne |
whitelabelLogoUrl |
string | skrivebeskyttet | Fuldt kvalificeret offentlig URL til white-label-logoet; for at ændre det skal du uploade via multipart-delen whitelabel_logo |
Multipart ved POST/PATCH: whitelabel_logo (fildel). GET- / svar-bodies udelader filindholdet - kun URL'en sendes.
§ security
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
allowedDomains |
string | Kommasepareret liste over domæner, der har tilladelse til at integrere widgetten (tom = ingen hvidliste) | |
spamFilterEnabled |
boolean | Aktivér spamfilteret for den enkelte bot på indgående beskeder | |
countryFilterMode |
string | BLACKLIST eller WHITELIST |
Hvordan landelisterne fortolkes. Selve listerne forbliver kun tilgængelige for administratorer |
talkMessagesRateLimit |
int | >= 0; 0 deaktiverer |
Maksimalt antal tilladte brugerbeskeder i rate-limit-vinduet |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Længde på rate-limit-vinduet (sekunder) |
talkMessagesRateLimitHitMessage |
string | Besked, der vises for den besøgende, når hastighedsgrænsen nås |
§ voice
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
inputEnabled |
boolean | Tillad den besøgende at diktere beskeder (tale til tekst) | |
conversationEnabled |
boolean | kræver stemmefunktionen på abonnementet | Aktivér fulde stemmesamtaler |
voiceId |
string | udbyderspecifikt stemme-id (f.eks. alloy) |
Hvilken syntetisk stemme der taler |
model |
string | f.eks. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Stemmemodel. Faktureres pr. minut, priser varierer efter model |
turnDetection |
string | udbyderspecifik | Turtagningstilstand |
audioPrompt |
string | Ekstra system-prompt, der kun bruges til stemmeture | |
welcomeMessage |
string | Talt åbningsreplik | |
language |
string | sprogkode | Primært stemmesprog |
additionalLanguages |
string | kommaseparerede sprogkoder | Ekstra sprog, som stemmeagenten accepterer |
maxDurationSeconds |
int | Fast grænse for en enkelt stemmesamtale | |
maxDurationMessage |
string | Besked, der vises, når grænsen nås |
§ multilingual
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
enabled |
boolean | Til/fra-knap for flersproget tilstand | |
mode |
string | AUTODETECT eller FIXED_LIST |
Hvordan botten vælger svarssproget |
baseLanguage |
string | sprogkode | Sprog, som bottens egne tekster er forfattet på |
languages |
string | kommaseparerede sprogkoder | Sprog, der tilbydes den besøgende |
knowledgeLanguageMode |
string | NONE, MAIN eller DYNAMIC |
Hvordan viden på andre sprog behandles |
knowledgeLanguageFallback |
string | sprogkode | Sprog, der bruges, når der ikke findes et match |
§ advanced
| Felt | Type | Begrænsning | Beskrivelse |
|---|---|---|---|
model |
string | underlagt kontobegrænsninger; se "AI-tekstmodeller" ovenfor | LLM-identifikator (f.eks. 5.6-LUNA) |
temperature |
decimal | 0.0-1.0 |
Sampling-temperatur (svarer til skyderen i UI'et) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; begrænses automatisk til din kontogrænse |
Konfigureret kontekstbudget, inklusive instruktioner, historik og viden |
botMessagesLimit |
long | 0 eller et multiplum af 1000 (f.eks. 1000, 2000, 10000) |
Månedligt loft over bot-besked-credits (0 = intet yderligere loft for botten; kontobudgettet gælder stadig) |
internalLocale |
string | landestandardkode i formatet ll_CC |
Landestandard for widgets administrative tekster (adskilt fra role.language) |
productsViewEnabled |
boolean | Hvis sand, vises e-handlens Offer Cards i chatten | |
includeProductsInKnowledgeBase |
boolean | Hvis sand, indekseres produktkataloget som en del af vidensbasen |
Uden for API'ets omfang
Administratorbrugerfladen viser nogle få områder, der med vilje ikke er eksponeret i denne version af Management API:
- Træning og sletning - disse slutpunkter viser ikke alle bots, administrerer ikke træningsdatasæt eller sletter bots. Brug appen til disse arbejdsgange.
- Flow-fanen (Flow) - den visuelle redigering af samtale-flow (trin og overgange). Ikke eksponeret via Management API.
- Actions-fanen (Handlinger) - administrerede integrationer til e-handel / booking, AI Search og tilpassede API-funktioner. Værktøjskald (tool calling) har aldrig været en del af Management API.
- Selve den tilpassede formularbygger - oprettelse og redigering af tilpassede formularer er ikke eksponeret. Du kan dog tilknytte en eksisterende formular til en bot via
leadCollection.customFormIdoghumanSupport.customFormId. - Tilpassede ikoner for åbn / luk chat -
customLauncherIconVisible,openChatIcon,closeChatIcon. API'et eksponerer kun de primære multipart-deleavatarogwhitelabel_logo. - IP- og landelister - selve posterne er forbeholdt administratorer. Kun fortolkningstilstanden er eksponeret via
security.countryFilterMode.
Endpoints
POST /v1/management/bots
Opret en ny bot. Der accepteres to ækvivalente Content-Types; vælg den, der passer dig bedst.
Tilstand A - ren JSON (anbefales, hvis du ikke har brug for at uploade en avatar/et logo i samme anmodning):
Content-Type: application/json- Request body er bot-konfigurationens JSON (uden
data-indpakning) - Filer (avatar/logo) kan uploades senere via en efterfølgende
PATCHved brug af tilstand B
Tilstand B - multipart/form-data (bruges, hvis du uploader filer i samme anmodning):
Content-Type: multipart/form-data; boundary=...dataJSON-del (påkrævet,Content-Type: application/json) - bot-konfiguration i den indlejrede struktur, der er beskrevet ovenforavatarfildel (valgfri) - billede til bot-avatarwhitelabel_logofildel (valgfri) - white-label-logo (gælder kun, hvis din konto indeholder white-labelling)
Kun name er påkrævet i JSON-strukturen; alle andre felter falder tilbage på de samme standardværdier, som guiden i administrator-UI'et ville have sat.
Eksempel på request body
Dette er den maksimale data JSON - hvor alle sektioner er udfyldt. Send kun de sektioner, du har brug for; alt andet tildeles standardværdier.
{
"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 tilhørende fejlmeddelelser:
name- påkrævet, maks. 150 tegnadvanced.temperature- mellem0.0og1.0chatMemory.summariesToKnowledgeRatio- heltal mellem10og90(procent, trin på10)appearance.launcherBottomMargin,appearance.launcherSideMargin- mellem0og500appearance.footerMarkdown- maks. 255 tegnhumanSupport.enabled=truekræver, athumanSupport.emailer udfyldtleadCollection.enabled=truekræver, at mindst én afleadCollection.emailEnabledellerleadCollection.phoneEnableder sat til true; uanset hvilken kanal der aktiveres, kræves der også en tilhørende etiket samtleaveDetailsMessageogthankYouMessageadvanced.chatContextSizebegrænses til kontoens maksimalt understøttede kontekststørrelse. Gå ikke ud fra, at andre numeriske felter begrænses automatisk.
Felter, hvis værdi er null på serveren, udelades fra JSON-bodyen - dataoverførslen indeholder kun felter med værdier, der ikke er null.
Eksempel på response body (201)
Samme struktur som anmodningen, plus den skrivebeskyttede meta-blok og engangsnøglen apiKey på øverste niveau. Skrivebeskyttede fil-URL'er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) udfyldes af serveren, når de tilhørende multipart-dele blev uploadet.
{
"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"
}
Feltet apiKey vises kun ved oprettelse - det er den helt nye Bot Talk API-nøgle, der er knyttet til den nye bot. Værdien i klartekst vises kun én gang og kan ikke hentes senere via API'et; gem den straks på din side.
Responsoverskriften Location indeholder URL'en til den nye bot (/v1/management/bots/{id}).
Curl-eksempler
Tilstand A - ren JSON (enklest):
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!"}}'
Tilstand 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}
Returnerer den aktuelle konfiguration for en bot, du ejer.
Curl-eksempel
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Eksempel på response body (200)
Samme struktur som ved POST-svaret, blot uden engangsnøglen apiKey. Blokken meta er inkluderet. Returnerer 404 not_found_error, hvis botten ikke findes eller ikke tilhører din konto.
Den aktuelle avatar og det aktuelle white-label-logo vises som fuldt kvalificerede, skrivebeskyttede URL'er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - forankret i den samme protokol + vært + kontekststi, der håndterede denne anmodning. Hent de rå data ved at udføre en GET direkte på disse URL'er; for at erstatte en af filerne skal du uploade en ny via multipart-delen avatar / whitelabel_logo ved en PATCH. Disse URL-felter ignoreres, hvis de sendes i en request body.
{
"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"
}
}
Klon en bot
Request-bodyen for POST /v1/management/bots og response-bodyen for GET /v1/management/bots/{bot_id} har samme struktur, så kloning er en proces i tre trin: Hent (GET) kilden, fjern serverstyrede identitetsfelter, og send (POST) resultatet.
1. Hent (GET) kilde-botten.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Fjern meta-blokken på øverste niveau. meta-objektet (id, createdAt, updatedAt) styres af serveren og er skrivebeskyttet - at lade det blive i POST-bodyen gør ingen skade (serveren ignorerer det), men at fjerne det gør hensigten tydelig og holder payloaden ren. Rediger eventuelt name, så klonen kan skelnes fra kilden.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Send (POST) den rensede body for at oprette klonen. Se referencen for POST /v1/management/bots ovenfor for den fulde bodystruktur og 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 indeholder den nye bots meta.id samt en nyoprettet apiKey (Bot Talk-nøglen til klonen). Værdien for apiKey i klartekst returneres kun i dette oprettelsessvar - kopiér den, før du kasserer response-bodyen; den kan ikke hentes senere.
Dette kopierer understøttede indstillinger, ikke en færdigtrænet chatbot. Træningsindhold, samtalehistorik, integrationer/handlinger, Flow og formulardefinitioner klones ikke af disse endpoints. Konfigurer disse separat i appen.
Yderligere forbehold:
- Filer klones ikke.
appearance.avatarUrlogwhiteLabel.whitelabelLogoUrler skrivebeskyttede og peger på kilde-bottens filer. Hvis du har brug for samme avatar eller White Label-logo på klonen, skal du downloade filerne fra kilde-URL'erne og uploade dem som multipartavatar/whitelabel_logo-dele - enten ved oprettelses-POST (tilstand B) eller i et efterfølgende PATCH-kald. - Bot Talk-nøgler klones ikke. Hver bot har sin egen pulje af Bot Talk-nøgler. Den enkelte
apiKey, der returneres af oprettelses-POST, er den eneste, der oprettes automatisk; opret yderligere nøgler fra bottens API-faneblad, hvis det er nødvendigt.
PATCH /v1/management/bots/{bot_id}
Opdater et eller flere felter på en bot, du ejer. Kun sektioner/felter, der er til stede i JSON-strukturen, ændres; alt, hvad der udelades (eller sendes som null), forbliver uændret. Semantik for delvis opdatering gælder pr. felt inden for en sendt sektion.
To ækvivalente Content-Types accepteres (samme som POST):
Tilstand A - ren JSON (anbefales, når du kun opdaterer indstillinger):
Content-Type: application/json- Request-bodyen er patch-JSON (ingen
data-indpakning)
Tilstand B - multipart/form-data (bruges ved upload af filer):
dataJSON-del (valgfri) - selve patchen. Send kun, hvis du vil ændre felter. Udelad helt, hvis du kun vil uploade en avatar eller et logo.avatarfil-del (valgfri) - erstat avatarenwhitelabel_logofil-del (valgfri) - erstat White Label-logoet (gælder kun, hvis din konto indeholder White Label)
Alle tre dele er valgfrie ved PATCH, men mindst én skal være til stede, for at kaldet giver mening.
Eksempel på request-body (flere sektioner)
Ethvert felt, der accepteres af POST /v1/management/bots, kan også sendes her. Eksemplet nedenfor illustrerer flere sektioner, ikke alle understøttede felter; i praksis sender du kun de nøgler, du ønsker at ændre (se "Minimal delvis opdatering" længere nede) - enhver nøgle, der udelades (eller sendes som null), efterlader den gemte værdi urørt.
{
"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 delvis opdatering
Udfør PATCH på et enkelt felt ved kun at sende de nøgler, du ønsker ændret - alt andet bevares.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Curl-eksempler
Tilstand A - ren JSON (enklest):
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"}}'
Tilstand B - multipart (ved udskiftning af avatar / logo):
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'
Tilstand B - erstat kun avataren (ingen feltændringer):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Response-body (200)
Samme struktur som GET /v1/management/bots/{bot_id} - bottens fulde konfiguration efter anvendelse af patchen, inklusive meta-blokken. Intet apiKey-felt. Returnerer 404 not_found_error, hvis botten ikke findes eller ikke tilhører din konto.
Eksemplet nedenfor viser svaret efter anvendelse af patchen fra Fuld request-body (flere sektioner) ovenfor på botten fra GET-eksemplet - ændrede felter afspejler de nye værdier, urørte felter bevares, og meta.updatedAt opdateres.
{
"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
Aflæs det aktuelle abonnementsforbrug for den konto, der ejer Management-nøglen.
Response-body (200)
{
"subscriptionType": "your-plan-id",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeer en identifikator med små bogstaver for kontoens nuværende plan (your-plan-ider en illustrativ pladsholder). Planer kommer fra et dynamisk katalog, så det nøjagtige sæt af identifikatorer kan ændre sig over tid, efterhånden som planer omdøbes eller tilføjes - behandl dette som en uigennemskuelig streng (opaque string), ikke en fast enum.messages.used/limit/remaininger de aktuelle beskedkreditter for kalendermåneden, som nulstilles den første dag i måneden, ikke på abonnementsfornyelsesdagen. De er kreditvægtede, ikke rå optællinger af svar.bots.used/limit/remainingtæller ejede botter, inklusive bootede på pause, op mod din kontos samlede bot-grænse.
Rate limit-headere
Svar, der når rate limit-stadiet (dvs. godkendelse og IP-whiteliste er bestået), indeholder:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- grænsen pr. nøgle, der rent faktisk anvendes på dette kald (10 som standard, eller din konfigurerederateLimitPerMinute, hvis den er lavere).X-RateLimit-Remaining- resterende tokens i spanden umiddelbart efter dette kald.X-RateLimit-Reset- Unix epoch-sekunder, hvor den næste token bliver tilgængelig (ikke en fuld nulstilling af spanden; spanden fyldes op løbende). Når spanden er fuld, er dette det aktuelle tidspunkt.
Ved 429 rate_limit_exceeded-svar angives Retry-After også, udtrykt i hele sekunder, indtil mindst én token bliver ledig.
Fejl før godkendelse (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) og 403 ip_not_whitelisted indeholder ikke X-RateLimit-*-headerne - rate limit-funktionen kontrolleres først, efter godkendelse og IP-tjek er gennemført.
Fejlformat
Samme konvolut som Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Valideringsfejl bruger code: "invalid_parameter" og tilføjer feltstien for det fejlende felt foran beskeden, så den fejlende sektion er nem at finde:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Ugyldige værdier for enum- / lukkede felter (f.eks. chatMemory.clientSummaryPromptType = "BOGUS") indeholder feltstien, den afviste værdi og listen over tilladte værdier:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Relateret
For samtale-endpoints og SSE-streaming, se Bot Talk API.