Hjælpecenter
Chat API

Management API

Sidst opdateret:

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

  1. Åbn administrationsappen, og gå til Account Settings > Management API (Kontoindstillinger > Management API).
  2. 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.
  3. 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.
  4. Gem den på din server, ikke i browserkode eller i et offentligt repository. Foretag en skrivebeskyttet anmodning såsom GET /v1/usage med tilladelsen usage for at bekræfte adgangen.
  5. 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 for GET /v1/management/bots/{bot_id}
  • bot_management - påkrævet for POST /v1/management/bots og PATCH /v1/management/bots/{bot_id}
  • usage - påkrævet for GET /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-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fuldt kvalificeret offentlig URL til white-label-sidehovedlogoet. Samme mønster som avatarUrl. For at ændre det skal du uploade en ny fil via multipart-delen whitelabel_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 automatisk
  • name - bottens navn, indsat i åbningssætningen
  • role.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 ≈ 200
  • role.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, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.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, Hindi og ~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 til Auto 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 - brug 8000, 16000 eller 32000, 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, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified, pill
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - boolesk til/fra-knap. true tvinger brugeren til at udfylde leadformularen, før en samtale startes; false lader 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 er 0.0 til 1.0, modsvarende skyderen i administrationspanelet. Værdier uden for dette interval afvises med 400 invalid_parameter.

  • chatMemory.summariesToKnowledgeRatio - heltalsprocent, 10-90; brugerfladen anvender trin på 10, men API'et accepterer heltal inden for hele intervallet. Standard er 50. 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 en timezone-nøgle:

    • hver ugedagsnøgle (monday-sunday) knytter sig til {enabled: boolean, from: "H:MM", to: "H:MM"} i 24-timers format
    • timezone er 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.outOfHoursMessage for 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.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korte etiketter, der vises på kontrolknapperne for samtalebedømmelse med 👍 / 👎, når conversation.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år hideRoboAssistLogo=true, og der er uploadet en brugerdefineret logofil via multipart-delen whitelabel_logo.

  • appearance.simulateHumanTypingDelay - sekunder (ikke millisekunder), heltal 0-200. Pause mellem efterfølgende bot-talebobler, når simulateHumanTyping=true. Standard er 5.

  • appearance.autoOpenChatDelaySeconds - sekunder, heltal. Forsinkelse, før widgetten åbnes automatisk, når autoOpenChat=true og autoOpenChatDelay=true.

  • advanced.internalLocale - IETF-landestandardkode på formen ll_CC (understregning, IKKE ll-CC med 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_IL og mange flere. Afsendelse af en to-bogstavs kode alene ("en") eller BCP-47 ("en-US") er ikke på listen over tilladte værdier. Standard er en_US. Dette er den landestandard, der bruges til dato-/talformatering i widgettens elementer, adskilt fra role.language (bottens sprog i samtaleoutputtet).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltal (sendes som JSON-tal, f.eks. 30, ikke "30"). Sæt beskedgrænsen til 0 for 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ør security.talkMessagesRateLimitHitMessage vises for den besøgende.

  • advanced.botMessagesLimit - heltal (JSON-tal, f.eks. 1000). 0 betyder 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 som 100 eller 1500 afvises med 400 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.customFormId og humanSupport.customFormId.
  • Tilpassede ikoner for åbn / luk chat - customLauncherIconVisible, openChatIcon, closeChatIcon. API'et eksponerer kun de primære multipart-dele avatar og whitelabel_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 PATCH ved brug af tilstand B

Tilstand B - multipart/form-data (bruges, hvis du uploader filer i samme anmodning):

  • Content-Type: multipart/form-data; boundary=...
  • data JSON-del (påkrævet, Content-Type: application/json) - bot-konfiguration i den indlejrede struktur, der er beskrevet ovenfor
  • avatar fildel (valgfri) - billede til bot-avatar
  • whitelabel_logo fildel (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 tegn
  • advanced.temperature - mellem 0.0 og 1.0
  • chatMemory.summariesToKnowledgeRatio - heltal mellem 10 og 90 (procent, trin på 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - mellem 0 og 500
  • appearance.footerMarkdown - maks. 255 tegn
  • humanSupport.enabled=true kræver, at humanSupport.email er udfyldt
  • leadCollection.enabled=true kræver, at mindst én af leadCollection.emailEnabled eller leadCollection.phoneEnabled er sat til true; uanset hvilken kanal der aktiveres, kræves der også en tilhørende etiket samt leaveDetailsMessage og thankYouMessage
  • advanced.chatContextSize begræ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.avatarUrl og whiteLabel.whitelabelLogoUrl er 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 multipart avatar / 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):

  • data JSON-del (valgfri) - selve patchen. Send kun, hvis du vil ændre felter. Udelad helt, hvis du kun vil uploade en avatar eller et logo.
  • avatar fil-del (valgfri) - erstat avataren
  • whitelabel_logo fil-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}
}
  • subscriptionType er en identifikator med små bogstaver for kontoens nuværende plan (your-plan-id er 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 / remaining er 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 / remaining tæ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 konfigurerede rateLimitPerMinute, 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.