Hjelpesenter
Chat API

Management API

Sist oppdatert:

Oversikt over Management API

Management API er beregnet på backoffice-oppgaver som ikke innebærer å sende chatmeldinger:

  • opprette en bot programmatisk med POST /v1/management/bots
  • hente en bestemt bot du eier med GET /v1/management/bots/{bot_id}
  • oppdatere en bestemt bot med PATCH /v1/management/bots/{bot_id}
  • hente abonnementsforbruk med GET /v1/usage

Management-nøkler er knyttet til kontoen din, ikke til en bestemt bot. De holdes bevisst adskilt fra Bot Talk-nøkler, slik at en kompromittert chatnøkkel ikke kan endre botene dine eller lese faktureringsdataene dine.

Basis-URL

https://api.chatlab.com/aichat

Alle endepunkter i denne artikkelen er relative til denne basis-URL-en.

Komme i gang

  1. Åpne administratorpanelet og gå til Account Settings > Management API (Kontoinnstillinger > Management API).
  2. Klikk på Create Management Key (Opprett Management-nøkkel), gi den et navn, angi eventuelt hvitelisting av IP-adresser og hastighetsgrense, og send inn.
  3. Velg bare tillatelsene integrasjonen din trenger, og kopier hele nøkkelen fra bekreftelsesvinduet. Klarteksten vises bare én gang.
  4. Lagre den på serveren din, ikke i nettleserkode eller et offentlig filområde. Gjør en skrivebeskyttet forespørsel som GET /v1/usage med tillatelsen usage for å bekrefte tilgangen.
  5. Tilbakekall ubrukte eller kompromitterte nøkler fra Management API-siden.

En nøkkel ser slik ut: mk_abcdefghijklmnopqrstuvwxyz012345. Prefikset mk_ skiller den fra Bot Talk-nøkler (ck_).

Autentisering

Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345

Sender du en mk_-nøkkel til /v1/chat (eller et annet Bot Talk-endepunkt), returneres 403 key_type_not_allowed. Sender du en ck_-nøkkel til /v1/management/*, returneres samme feil.

Grenser

  • Maks 5 aktive Management API-nøkler per bruker
  • Maks 10 forespørsler per minutt per nøkkel (token bucket, kapasitet 10, jevn påfylling med ca. 1 token hvert 6. sekund). Kan konfigureres nedover ved opprettelse - angi en lavere rateLimitPerMinute, så reduseres taket og påfyllingshastigheten skalerer tilsvarende.

Tillatelser

Hver Management-nøkkel har et hvilket som helst delsett av de tre tillatelsene nedenfor. Minst én må velges ved opprettelse; ellers avvises forespørselen med 400 invalid_request_error. Kalles et endepunkt med en nøkkel som mangler den nødvendige tillatelsen, returneres 403 insufficient_permissions.

  • bot_read - kreves for GET /v1/management/bots/{bot_id}
  • bot_management - kreves for POST /v1/management/bots og PATCH /v1/management/bots/{bot_id}
  • usage - kreves for GET /v1/usage

Struktur på body: nestede seksjoner som speiler fanene i administrasjonsgrensesnittet

POST og PATCH godtar en JSON-body gruppert i 13 seksjoner. Hver seksjon tilsvarer en underfane i sidemenyen for Bot Settings i administratorpanelet, slik at JSON-nøklene og de synlige fanene stemmer overens: hvis du endrer consent.humanSupportRequirePolicyAccept via API-et, ser du den samme bryteren endre seg i fanen Consent & Privacy (Samtykke og personvern) i administratorpanelet.

  • role - botpersona, råinstruks (prompt), svarlengde, språk, nettsteds-/bedriftskontekst (fanen Role & Behavior)
  • conversation - velkomstmelding, søkeforbedring, samtalekontinuitet, vurderingsbryter + verktøytips, innhold for foreslåtte spørsmål + dynamiske oppfølginger (fanen Chat Conversation)
  • chatMemory - bryter for chatminne, instruksjoner for sammendrag, kontekstfordeling (fanen Summaries & Memory)
  • appearance - farger, tekster, dimensjoner, tilpasset CSS, velkomstskjerm, stil for foreslåtte spørsmål, innstillinger for automatisk åpning, simulering av menneskelig skriving, bunntekst-markdown (fanen Appearance)
  • humanSupport - kontaktskjema for menneskelig hjelp (fanen Human Contact Form)
  • leadCollection - skjema for lead-innsamling (fanen Lead Collection)
  • liveChat - overlevering til Live Chat (fanen Live Chat)
  • consent - alle fire samtykkebrytere for personvernerklæring samt teksten på samtykkeskjermen (fanen Consent & Privacy)
  • whiteLabel - skjul logo, tilpasset lenke på logo, hosting på eget domene (fanen Whitelabel)
  • security - tillatte domener, søppelpostfilter, hastighetsgrenser for samtaler (fanen Security)
  • voice - stemmeinndata og talesamtaler: modell, stemme, språk, prompt, varighetstak (fanen Voice Conversation)
  • multilingual - flerspråklig modus, basisspråk, tilbudte språk, håndtering av kunnskapsspråk (fanen Languages)
  • advanced - LLM-modell, temperatur, kontekststørrelse, meldingsgrense for boten, internt språkområde, Offer Cards (fanen Model & Advanced)

Av de skrivbare innstillingene er det bare name som ligger på toppnivå, fordi det identifiserer boten i stedet for å tilhøre en bestemt fane.

Sidemenyen for Bot Settings har for øyeblikket 16 underfaner, og 13 av dem samsvarer med seksjonene over. De tre underfanene uten en tilsvarende seksjon er Flow, Actions og Forms - alle tre omtales under «Utenfor API-ets omfang» nedenfor. De 13 som har en tilsvarende seksjon, 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.

Forespørsels- og svar-body deler samme struktur. Svaret inneholder to ekstra elementer:

  • meta - skrivebeskyttet: bot-id og tidsstempler. Fjern dette for å gjøre et GET-svar om til en gyldig POST-body.
  • apiKey - vises kun ved opprettelse - den nyopprettede Bot Talk API-nøkkelen for den nye boten.

To felt i den delte strukturen er skrivebeskyttede - de returneres i svaret og ignoreres hvis du prøver å sende dem med POST/PATCH:

  • appearance.avatarUrl - fullstendig offentlig URL til botens avatarbilde (f.eks. https://api.chatlab.com/aichat/content/avatar_xyz.png). Utfør en GET direkte mot den for å laste ned filen. For å endre den laster du opp en ny fil via multipart-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fullstendig offentlig URL til topplogoen for White Label. Samme mønster som avatarUrl. For å endre den laster du opp en ny fil via multipart-delen whitelabel_logo (se PATCH).

Begge URL-ene bruker den gjeldende forespørselens protokoll + vert + kontekststi, så på et tilpasset White Label-domene returneres de med dette domenet som rot (f.eks. https://api.acme.com/aichat/content/...).

Send null for en seksjon for å hoppe over den ved PATCH; send null for et felt i en seksjon for å hoppe over det enkelte feltet. null på feltnivå sletter aldri en lagret verdi - det betyr bare «ikke rør».

Rolle og oppbygging av prompt

Systeminstruksen (prompten) som språkmodellen faktisk mottar, settes sammen på én av to måter avhengig av role.role. Ved å vite hvilken gren du befinner deg på, vet du hvilke felt som er viktige og hvilke som lagres, men ignoreres.

Gren A - role.role er CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (malbasert)

Backend setter sammen instruksen fra en innebygd mal og ignorerer role.rawPrompt fullstendig (verdien lagres fortsatt på boten, men brukes ikke). Malen inneholder:

  • role.role - rollebetegnelse (f.eks. «Customer Support») og rollespesifikke instruksjoner legges til automatisk
  • name - botnavn, flettes inn i åpningssetningen
  • role.language - "Auto Detect" gjør at boten følger brukerens språk; alle andre verdier (f.eks. "English", "Polish") blir til «Output in {language}, unless user uses another language»
  • role.responseLength - tilordnes et målantall ord: Concise ≈ 50 ord, Normal ≈ 100, Detailed ≈ 200
  • role.websiteAddress - valgfritt; når det ikke er tomt, legges det til som «for the users of the website {url}»
  • role.companyDescription - valgfritt; når det ikke er tomt, legges det til som et ekstra avsnitt før rolleinstruksjonene

Dette er den anbefalte grenen for de fleste boter - du får tilpasset atferd og sikkerhetsrammer automatisk.

Gren B - role.role er CUSTOM (egendefinert prompt fra oppkaller)

Backend bruker role.rawPrompt som rolleinstruks og legger til plattformens faste retningslinjer for svarlengde. Dette er uavhengig av role.responseLength: den valgfrie innstillingen Concise/Normal/Detailed flettes ikke inn for en CUSTOM-rolle. På samme måte lagres language, websiteAddress og companyDescription, men flettes ikke inn i denne rolleinstruksen. Inkluder ønsket språk, mål for svarlengde eller bedriftskontekst i rawPrompt selv. Ytterligere kjøretidsinstruksjoner og hentet kontekst kan også legges til, så rawPrompt utgjør ikke hele inndataene til modellen. Instruksjonene for tonefall fra den forhåndsdefinerte rollen legges ikke til, men å velge CUSTOM fjerner ikke alle plattforminstruksjoner.

Bruk CUSTOM bare når den malbaserte instruksen ikke passer til ditt bruksområde (f.eks. hvis du trenger en svært domenespesifikk persona, egne sikkerhetsbegrensninger eller et ustandardisert utdataformat).

Enum- og lukkede felt

Enum-felt og felt med faste verdisett avviser ugyldige verdier med 400 invalid_parameter. Andre felt er vanlige strenger, selv der grensesnittet tilbyr en fast liste. Bruk den dokumenterte skrivemåten og valider nyttelasten din i stedet for å anta at enhver streng som ikke støttes, blir avvist.

  • role.role - CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.language - fullt engelsk språknavn fra rullegardinmenyen i administratorpanelet, f.eks. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi og ca. 80 andre. Verdien lagres ordrett og settes inn i prompt-malen, så to-bokstavers ISO-koder (en, pl) og andre verdier utenfor listen avvises ikke av API-et, men fører til en misvisende instruksjon som «Output in en, unless...». Standardverdien er Auto Detect hvis den utelates ved opprettelse.
  • advanced.model - se «AI-tekstmodeller» nedenfor. Dette er en streng, ikke en validert enum i forespørselsskjemaet; bruk en støttet verdi, ikke et vilkårlig modellnavn.
  • advanced.chatContextSize - bruk 8000, 16000 eller 32000, i samsvar med grensesnittet. Verdier over kontoens maksimumsgrense justeres ned automatisk; dataobjektet håndhever ikke dette treverdisettet.
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified, pill
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - boolsk bryter. true tvinger brukeren til å fylle ut lead-skjemaet før samtalen startes; false lar AI-en avgjøre når skjemaet skal vises (standard).

Strukturerte felt og verdiområder

Felt som ser ut som enkle strenger eller tall, men som har spesifikke formater, verdiområder eller særegenheter i administrasjonsgrensesnittet som er verdt å kjenne til.

  • advanced.temperature - godkjent område er 0.0 til 1.0, tilsvarende glidebryteren i administratorpanelet. Verdier utenfor dette området avvises med 400 invalid_parameter.

  • chatMemory.summariesToKnowledgeRatio - heltall i prosent, 10-90; brukergrensesnittet bruker trinn på 10, men API-et godtar alle heltall i dette området. Standardverdi er 50. Når minne er aktivert og konteksten er større enn 8k, fordeler dette budsjettet for kunnskap og minne etter at det er satt av plass til prompt og nylig samtalehistorikk - ikke hele modellkonteksten. Ved 8k tildeles det ikke noe sammendragsbudsjett via denne innstillingen.

  • liveChat.schedule - JSON kodet som en streng, ikke et nestet JSON-objekt i sendingen. Serveren lagrer råstrengen ordrett; administratorpanelet parser den på klientsiden ved visning av tidsplankonfigurasjonen. Når den er parset, er strengen strukturert med én oppføring per ukedag pluss en timezone-nøkkel:

    • hver ukedagsnøkkel (monday-sunday) peker til {enabled: boolean, from: "H:MM", to: "H:MM"} i 24-timersformat
    • timezone er et IANA-sonenavn (f.eks. "Europe/Warsaw", "America/New_York")

    Eksempelverdi (merk de ytre anførselstegnene og de escaped indre anførselstegnene - det er ett strengfelt, ikke et nestet 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\"}"
    

    Utenom de oppførte tidspunktene vises liveChat.outOfHoursMessage til den besøkende, og overlevering til Live Chat deaktiveres. Validering av den indre strukturen skjer kun på klientsiden i administratorpanelet - ugyldig JSON eller ukjente nøkler godtas av API-et som en ren streng og vil først vise seg som en visningsfeil når en person senere åpner boten i administrasjonspanelet. Valider strukturen på din side før du sender den.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korte etiketter som vises på vurderingsknappene for 👍 / 👎 når conversation.conversationRatingEnabled=true. Standardtekst er «I like the response» / «I don't like the response». Synlig for sluttbrukere.

  • whiteLabel.hideRoboAssistLogo - White Label-funksjon, avhengig av kontogrensene dine. Skjuler «Powered by ChatLab» i bunnteksten. Hvis kontoen din ikke inkluderer White Label, lagres verdien, men ignoreres, og bunnteksten vises alltid.

  • whiteLabel.whitelabelLogoLink - White Label-funksjon, avhengig av kontogrensene dine. Klikkmål-URL for den tilpassede logoen når hideRoboAssistLogo=true og en tilpasset logofil er lastet opp via multipart-delen whitelabel_logo.

  • appearance.simulateHumanTypingDelay - sekunder (ikke millisekunder), heltall 0-200. Pause mellom påfølgende bot-bobler når simulateHumanTyping=true. Standardverdi er 5.

  • appearance.autoOpenChatDelaySeconds - sekunder, heltall. Forsinkelse før widgeten åpnes automatisk når autoOpenChat=true og autoOpenChatDelay=true.

  • advanced.internalLocale - IETF-lokalitets-/regionskode i formatet ll_CC (understrek, IKKE ll-CC med bindestrek). Godkjente verdier hentes fra en fast liste med ca. 95 språkområder: 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. Å sende bare en to-bokstavers kode ("en") eller BCP-47 ("en-US") støttes ikke i den tillatte listen. Standardverdi er en_US. Dette er språkområdet som brukes til dato- og tallformatering i widget-grensesnittet, i motsetning til role.language (botens utdataspråk i samtalen).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltall (sendes som JSON-tall, f.eks. 30, ikke "30"). Sett meldingsgrensen til 0 for å deaktivere denne øktbaserte grensen. Når du aktiverer den, må du oppgi en positiv varighet. Backend håndhever N meldinger per økt per varighet-i-sekunder før security.talkMessagesRateLimitHitMessage vises til den besøkende.

  • advanced.botMessagesLimit - heltall (JSON-tall, f.eks. 1000). 0 betyr at det ikke er noe ekstra tak per bot, mens kontoens kredittkvote fortsatt gjelder; ellers må det være et multiplum av 1000 (1000, 2000, 10000, ...). Verdier som 100 eller 1500 avvises med 400 invalid_parameter. Dette er et månedlig kredittak for boten, ikke et antall meldinger per samtale. Tilordningen justerer ikke denne verdien ned mot kontobudsjettet; kontoens kvote begrenser fortsatt den faktiske bruken.

AI-tekstmodeller (advanced.model)

Bruk den nøyaktige modellidentifikatoren som returneres i advanced.model når du henter en bot konfigurert med den ønskede modellen i Settings > Model & Advanced (Innstillinger > Modell og avansert). Gjeldende standardverdi ved opprettelse er 5.6-LUNA. Identifikatorene skiller mellom store og små bokstaver og avviker fra visningsnavnene; for eksempel vises 5.6-LUNA som GPT 5.6-luna.

Modelloversikten endres over tid. Ikke anta at en vilkårlig streng eller en leverandørs offentlige modell-ID støttes bare fordi forespørselsskjemaet godtar en streng. Hent ut den lagrede konfigurasjonen og test den resulterende chatbotten før du tar den i bruk.

Feltreferanse (fullstendig forespørselsskjema)

De støttede seksjonene og feltene, med tilhørende typer og viktige begrensninger. PATCH-semantikk: ethvert felt som utelates (eller sendes som null), lar den lagrede verdien forbli uendret. Samme struktur brukes for responsen (minus binært multipart-innhold; pluss den skrivebeskyttede meta-blokken i alle responser og apiKey utelukkende i opprettelsesresponsen).

Toppnivå

Felt Type Begrensning Beskrivelse
name string maks 150, obligatorisk ved opprettelse Botens visningsnavn
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

Tillegg som kun finnes i responsen:

  • meta: { id, createdAt, updatedAt } - skrivebeskyttet.
  • apiKey - string, finnes kun i responsen på POST /v1/management/bots - den nyopprettede Bot Talk-nøkkelen for den nye boten, returnert nøyaktig én gang.

§ role

Felt Type Begrensning Beskrivelse
role string (enum) CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM Persona-forhåndsinnstilling; velger ledetekstmalen (se "Role and prompt construction")
language string fullt engelsk språknavn (English, Polish, ...) eller Auto Detect Hovedspråk som mates inn i ledetekstmalen
responseLength string ∈ {Concise, Normal, Detailed} Ønsket detaljnivå for AI-svaret
websiteAddress string Nettsted som brukes til ledetekstkontekst
companyDescription string Selskapsbeskrivelse som brukes til ledetekstkontekst
rawPrompt string Tilpasset systemledetekst - brukes ordrett kun når role=CUSTOM

§ conversation

Felt Type Begrensning Beskrivelse
welcomeMessage string Første melding som vises til den besøkende ved åpning
queryRefinementEnabled boolean Hvis true, forbedres den besøkendes spørsmål før RAG-gjenfinning
conversationContinuityEnabled boolean Hvis true, gjenopptar tilbakevendende besøkende sin forrige samtale
conversationRatingEnabled boolean Hvis true, vises tommel opp/ned-knapper for samtalevurdering
positiveRatingTooltip string Verktøytips på knappen for positiv vurdering
negativeRatingTooltip string Verktøytips på knappen for negativ vurdering
suggestedQuestions string Linjeskiftseparerte foreslåtte spørsmål / samtaleåpnere
dynamicSuggestedFollowups boolean Hvis true, foreslår AI oppfølgingsspørsmål etter hvert svar
positiveRatingMessage string Melding som vises etter positiv tilbakemelding
negativeRatingMessage string Melding som vises etter negativ tilbakemelding
hideSuggestedQuestionsAfterFirstUse boolean Skjul statiske forslag etter bruk
dynamicFollowupsAutoIcons boolean Hvis true, velger AI automatisk emoji-ikoner for de dynamiske oppfølgingene

§ chatMemory

Felt Type Begrensning Beskrivelse
enabled boolean Hovedbryter for chat-minnefunksjonen
summaryConversationsEnabled boolean Lagre sammendrag per samtale
conversationSummaryPrompt string Tilpasset ledetekst som brukes til å oppsummere hver samtale
conversationSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Hvorvidt standard eller tilpasset oppsummeringsledetekst skal brukes
clientSummaryPrompt string Tilpasset ledetekst som brukes til å oppsummere klienten på tvers av samtaler
clientSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Standard vs tilpasset klientprofil-ledetekst
summariesToKnowledgeRatio int 10-90 (grensesnitt-trinn 10) % av det tilgjengelige kunnskaps-/minnebudsjettet tildelt sammendrag ved kontekster over 8k

§ appearance

Felt Type Begrensning Beskrivelse
launcherLabelLine1 string maks 60 Første linje med startknapptekst
launcherLabelLine2 string maks 60 Andre linje med startknapptekst
launcherTextColor string Tekstfarge for startknapp
launcherDismissEnabled boolean Tillat å lukke startknappen
widgetFontFamily string inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono Skriftfamilie for widget
chatDrawerEnabled boolean Aktiver skuffepresentasjon (drawer)
launcherColor string (hex) Bakgrunnsfarge for startknapp (chat-ikon)
headerColor string (hex) Bakgrunnsfarge for chat-topptekst
titleColor string (hex) Tittelfarge for chat-topptekst
subtitleColor string (hex) Undertittelfarge for chat-topptekst
clientMessageBubbleColor string (hex) Boblefarge for meldinger fra besøkende
clientMessageTextColor string (hex) Tekstfarge for meldinger fra besøkende
responseMessageBubbleColor string (hex) Boblefarge for bot-svar
responseMessageTextColor string (hex) Tekstfarge for bot-svar
chatSubheader string Slagord som vises under chat-tittelen
senderPlaceholder string Plassholdertekst i meldingsfeltet
resetConversationTooltip string Verktøytips på knappen for å tilbakestille samtalen
chatAlignment string (enum) ∈ {left, right} Hvilken side av skjermen chatten skal forankres til
launcherBottomMargin int 0-500 Startknappens avstand fra bunnkanten (px)
launcherSideMargin int 0-500 Startknappens avstand fra sidekanten (px)
displayShadow boolean Skygge under widgeten
customCss string Rå CSS injisert i widget-iframe
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Hvordan lenker inne i bot-meldinger åpnes
minimizedDisplayMode string (enum) ∈ {icon, minified, pill} Minimert tilstand: startknappikon, kompakt inntastingsfelt eller pille
chatDesktopWidthPx int Widget-bredde på datamaskin
chatDesktopHeightPx int Widget-høyde på datamaskin
chatMobileSizePercent int Widget-størrelse på mobil som % av visningsområdet
messageFontSize int Skriftstørrelse for meldingstekst (px)
showChatbotBubblesDesktop boolean Vis de flytende oppmerksomhetsboblene på datamaskin
showChatbotBubblesMobile boolean Vis de flytende oppmerksomhetsboblene på mobil
chatbotBubblesDelaySeconds int Forsinkelse før oppmerksomhetsboblene vises (sekunder)
launcherIconFullSize boolean Render det egendefinerte startknappikonet helt ut til kanten i stedet for innfelt
welcomeScreenEnabled boolean Vis Welcome Screen (velkomstskjerm) i stedet for å gå rett til chatten
welcomeScreenQuestionsLabel string Etikett over de foreslåtte spørsmålene på velkomstskjermen
welcomeScreenHideHumanContactForm boolean Skjul handlingen for kontaktskjema til mennesker i toppteksten mens velkomstskjermen vises. Den dukker opp igjen etter den besøkendes første melding. Boter opprettet før 2026-09-02 har true som standard
welcomeScreenHideLiveChat boolean Skjul live chat-handlingen i toppteksten mens velkomstskjermen vises. Den dukker opp igjen etter den besøkendes første melding. Boter opprettet før 2026-09-02 har true som standard
headerActionsLayout string ICONS eller DROPDOWN Hvordan live chat og kontaktskjema til mennesker tilbys i chat-toppteksten: ICONS (hvert sitt ikon) eller DROPDOWN (gruppert i topptekstmenyen). Boter opprettet før 2026-09-02 har ICONS som standard
stackSuggestedQuestions boolean Stable foreslåtte spørsmål vertikalt (i motsetning til side om side)
suggestedQuestionsFontSize int Skriftstørrelse for brikker med foreslåtte spørsmål (px)
suggestedQuestionsTextColor string (hex) Tekstfarge for brikker med foreslåtte spørsmål
suggestedQuestionsBackgroundColor string (hex) Bakgrunnsfarge for brikker med foreslåtte spørsmål
autoOpenChat boolean Åpne chatten automatisk på datamaskin
autoOpenChatOnMobiles boolean Åpne chatten automatisk på mobil
autoOpenChatDelay boolean Bruk en forsinkelse før automatisk åpning
autoOpenChatDelaySeconds int Forsinkelse for automatisk åpning (sekunder)
simulateHumanTyping boolean Del opp bot-svar i bobler med skriveanimasjon
simulateHumanTypingDelay int 0-200 Forsinkelse mellom meldingsbobler (sekunder)
footerMarkdown string maks 255 Egendefinert bunntekst-markdown vist under chatten
avatarUrl string skrivebeskyttet Fullstendig offentlig URL for avataren; for å endre den, last opp via multipart-delen avatar

Multipart ved POST/PATCH: avatar (fildel). GET- / responsinnhold utelater filinnholdet - bare URL-en overføres.

§ humanSupport

Felt Type Begrensning Beskrivelse
enabled boolean Bryter for Human Support-flyten
email string obligatorisk (create-strict) når enabled=true Adresse som mottar e-poster for menneskelig brukerstøtte
dialogMessage string Oppfordringsmelding som vises over skjemaet
thankYouMessage string Bekreftelse som vises etter innsending
emailMessageSubjectTemplate string Emnemal for e-posten som sendes til agenten
emailMessageContentTemplate string Innholdsmal for e-posten som sendes til agenten
emailPlaceholder string Plassholder i e-postfeltet
messagePlaceholder string Plassholder i tekstfeltet for melding
emailWithConversationContent boolean Hvis true, inkluderes samtalehistorikken i e-postteksten
customFormId long id for et eksisterende tilpasset skjema Erstatt det innebygde kontaktskjemaet med et tilpasset skjema. Ved opprettelse brukes det innebygde skjemaet dersom feltet utelates; ved PATCH lar null gjeldende valg forbli uendret
customFormMapping string JSON-kodet streng Mapper felter fra det tilpassede skjemaet over til e-postfeltene for menneskelig brukerstøtte

requirePolicyAccept ligger under consent.humanSupportRequirePolicyAccept, ikke her.

§ leadCollection

Felt Type Begrensning Beskrivelse
enabled boolean Bryter for lead-skjema
nameEnabled boolean Samle inn navn
nameLabel string Etikett på navnefeltet
emailEnabled boolean Samle inn e-post
emailLabel string obligatorisk (create-strict) når enabled=true OG emailEnabled=true Etikett på e-postfeltet
phoneEnabled boolean Samle inn telefonnummer
phoneLabel string obligatorisk (create-strict) når enabled=true OG phoneEnabled=true Etikett på telefonfeltet
leaveDetailsMessage string obligatorisk (create-strict) når enabled=true Melding som oppfordrer den besøkende til å legge igjen kontaktinformasjon
thankYouMessage string obligatorisk (create-strict) når enabled=true Bekreftelse som vises etter innsending
requireBeforeNewConversation boolean Hvis true, må skjemaet sendes inn før chatten starter; hvis false, avgjør AI når skjemaet skal vises
emailNotificationEnabled boolean Send e-post til eieren hver gang et lead samles inn
emailNotificationAddress string Varselmottaker (bruker standardmessig kontoens e-postadresse)
emailWithConversationContent boolean Hvis true, inkluderes samtalehistorikken i varselet

| customFormId | long | id for et eksisterende tilpasset skjema | Erstatt det innebygde lead-skjemaet med et tilpasset skjema. Ved opprettelse brukes det innebygde skjemaet dersom feltet utelates; ved PATCH lar null gjeldende valg forbli uendret | | customFormMapping | string | JSON-kodet streng | Mapper felter fra det tilpassede skjemaet over til navn / e-post / telefon |

Regel på tvers av felter ved opprettelse (create-strict): enabled=true krever minst én av emailEnabled eller phoneEnabled. requirePolicyAccept ligger under consent.leadCollectionRequirePolicyAccept, ikke her.

§ liveChat

Felt Type Begrensning Beskrivelse
enabled boolean Bryter for Live Chat-funksjonen
infoMessage string Forklarende melding før overlevering
startMessage string Melding som vises når live-økten starter
endMessage string Melding som vises når live-økten avsluttes
nameLabel string Etikett på navnefeltet i forhåndsskjemaet for live chat
emailLabel string Etikett på e-postfeltet i forhåndsskjemaet for live chat
schedule string JSON-kodet streng (ukedagbrytere + from/to + timezone) Åpningstider for live chat - se "Structured fields and ranges" for nøyaktig format
outOfHoursMessage string Melding som vises når åpningstidene tilsier at vi er stengt
closeModalMessage string Tittel på modalfeltet for "lukke live chat?"
closeModalConfirmLabel string Etikett på bekreftelsesknappen i lukkemodalen
closeModalCancelLabel string Etikett på avbrytknappen i lukkemodalen
closeModalTooltipText string Verktøytips på knappen for å avslutte chatten
operatorHasJoinedLabel string Etikett som vises når en operatør blir med
operatorDidNotJoinInTimeLabel string Etikett som vises når ingen operatør blir med innen tidsfristen
waitingForOperatorToJoinLabel string Etikett som vises mens man venter på en operatør
waitingForOperatorSeconds int Tidsavbrudd for at en operatør skal svare (sekunder)
redirectToHumanSupportForm boolean Hvis true, videresendes til Human Support-skjemaet når ingen operatør svarer
requireAdminOnline boolean Krev en tilgjengelig operatør i henhold til tilstedeværelsesinnstillinger
presenceMode string Tilstedeværelsesmodus; bruk verdien fra en bot konfigurert i brukergrensesnittet
hideHumanSupportWhenLiveChatAvailable boolean Skjul kontaktskjemaet når live chat er tilgjengelig
missedEmailEnabled boolean standard true Send e-post til boteieren når en live chat-forespørsel ikke ble besvart. Forblir usatt på eldre boter, noe som tolkes som aktivert

requirePolicyAccept ligger under consent.liveChatRequirePolicyAccept, ikke her.

§ consent

Felt Type Begrensning Beskrivelse
newConversationRequirePolicyAccept boolean Krev samtykke til personvernerklæringen før en ny samtale startes
humanSupportRequirePolicyAccept boolean Krev samtykke til personvernerklæringen før Human Support-skjemaet sendes inn
leadCollectionRequirePolicyAccept boolean Krev samtykke til personvernerklæringen før lead-skjemaet sendes inn
liveChatRequirePolicyAccept boolean Krev samtykke til personvernerklæringen før en live chat-økt startes
newConversationConsentDescription string Innledende tekst for samtykkeskjermen ved samtalestart
privacyPolicyConsentCheckboxLabel string Etikett ved siden av samtykkeavmerkingsboksen (inneholder vanligvis en lenke til personvernerklæringen)

§ whiteLabel

Felt Type Begrensning Beskrivelse
hideRoboAssistLogo boolean White Label-funksjon; underlagt kontogrenser Skjul standard ChatLab-logo i bunnteksten
whitelabelLogoLink string White Label-funksjon; underlagt kontogrenser URL som den tilpassede bunntekstlogoen lenker til
assignToCustomDomain boolean begrenset av CUSTOM_DOMAIN-funksjonen Vær vert for chatten på det konfigurerte egendefinerte domenet
whitelabelLogoUrl string skrivebeskyttet Fullstendig offentlig URL for White Label-logoen; for å endre den, last opp via multipart-delen whitelabel_logo

Multipart ved POST/PATCH: whitelabel_logo (fildel). GET- / responsinnhold utelater filinnholdet - bare URL-en overføres.

§ security

Felt Type Begrensning Beskrivelse
allowedDomains string Kommaseparert liste over domener som har tillatelse til å bygge inn widgeten (tom = ingen hvitliste)
spamFilterEnabled boolean Aktiver søppelpostfilteret per bot for innkommende meldinger
countryFilterMode string BLACKLIST eller WHITELIST Hvordan landlistene tolkes. Selve listene forblir kun tilgjengelige for administratorer
talkMessagesRateLimit int >= 0; 0 deaktiverer Maksimalt antall brukermeldinger tillatt innenfor frekvensgrensevinduet
talkMessagesRateLimitDurationSeconds int >= 0 Varighet for frekvensgrensevinduet (sekunder)
talkMessagesRateLimitHitMessage string Melding som vises til den besøkende når frekvensgrensen er nådd

§ voice

Felt Type Begrensning Beskrivelse
inputEnabled boolean Tillat den besøkende å diktere meldinger (tale til tekst)
conversationEnabled boolean krever talefunksjonen i abonnementet Aktiver fullstendige talesamtaler
voiceId string leverandørspesifikk stemme-ID (f.eks. alloy) Hvilken syntetisk stemme som snakker
model string f.eks. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* Talemodell. Faktureres per minutt, prisene varierer per modell
turnDetection string leverandørspesifikk Modus for turtaking
audioPrompt string Ekstra systemledetekst som kun brukes for taleinnlegg
welcomeMessage string Muntlig åpningsreplikk
language string språkkode Hovedspråk for tale
additionalLanguages string kommaseparerte språkkoder Ekstra språk taleagenten godtar
maxDurationSeconds int Absolutt maksgrense for en enkelt talesamtale
maxDurationMessage string Melding som vises når maksgrensen er nådd

§ multilingual

Felt Type Begrensning Beskrivelse
enabled boolean Bryter for flerspråklig modus
mode string AUTODETECT eller FIXED_LIST Hvordan boten velger svarspråk
baseLanguage string språkkode Språket botens egne tekster er skrevet på
languages string kommaseparerte språkkoder Språk som tilbys den besøkende
knowledgeLanguageMode string NONE, MAIN eller DYNAMIC Hvordan kunnskap på andre språk håndteres
knowledgeLanguageFallback string språkkode Språk som brukes når det ikke finnes treff

§ advanced

Felt Type Begrensning Beskrivelse
model string underlagt kontogrenser; se "AI text models" ovenfor LLM-identifikator (f.eks. 5.6-LUNA)
temperature decimal 0.0-1.0 Samplings-temperatur (tilsvarer glidebryteren i grensesnittet)
chatContextSize int ∈ {8000, 16000, 32000}; justeres automatisk ned til kontogrensen Konfigurert kontekstbudsjett, inkludert instruksjoner, historikk og kunnskap
botMessagesLimit long 0 eller multiplum av 1000 (f.eks. 1000, 2000, 10000) Månedlig grense for bot-meldingskreditter (0 = ingen ekstra bot-grense; kontobudsjettet gjelder fortsatt)
internalLocale string språkkode i formatet ll_CC Språk for grensesnittelementer i widgeten (atskilt fra role.language)
productsViewEnabled boolean Hvis true, vises Offer Cards (tilbudskort) for netthandel inne i chatten
includeProductsInKnowledgeBase boolean Hvis true, indekseres produktkatalogen som en del av kunnskapsbasen

Utenfor API-ets omfang

Administrasjonsgrensesnittet har noen områder som med hensikt ikke er eksponert i denne versjonen av Management API:

  • Trening og sletting - disse endepunktene lister ikke opp alle boter, administrerer ikke treningsdatasett og sletter ikke boter. Bruk appen for disse arbeidsflytene.
  • Flow-fanen - det visuelle redigeringsverktøyet for samtalesekvenser (Flow Editor - trinn og overganger). Ikke eksponert via Management API.
  • Actions-fanen - administrerte integrasjoner for e-handel/bestilling, AI Search og egendefinerte API-funksjoner. Verktøykall (tool calling) har aldri vært en del av Management API.
  • Selve byggemaskinen for tilpassede skjemaer - opprettelse og redigering av tilpassede skjemaer er ikke eksponert. Du kan likevel koble et eksisterende skjema til en bot via leadCollection.customFormId og humanSupport.customFormId.
  • Egendefinerte ikoner for åpning/lukking av chat - customLauncherIconVisible, openChatIcon, closeChatIcon. API-et eksponerer kun de viktigste multipart-delene avatar og whitelabel_logo.
  • IP- og landlister - selve oppføringene er kun tilgjengelige for administratorer. Bare tolkningsmodusen er eksponert via security.countryFilterMode.

Endepunkter

POST /v1/management/bots

Opprett en ny bot. To likeverdige Content-Types godtas; velg den som passer best.

Modus A - ren JSON (anbefales når du ikke trenger å laste opp en avatar / logo i samme forespørsel):

  • Content-Type: application/json
  • Forespørselskroppen (request body) er JSON-konfigurasjonen for boten (ingen data-innpakning)
  • Filer (avatar / logo) kan lastes opp senere via en ny PATCH ved bruk av modus B

Modus B - multipart/form-data (brukes ved opplasting av filer i samme forespørsel):

  • Content-Type: multipart/form-data; boundary=...
  • data-JSON-del (påkrevd, Content-Type: application/json) - botkonfigurasjon i den nestede strukturen beskrevet ovenfor
  • avatar-fildel (valgfri) - avatarbilde for boten
  • whitelabel_logo-fildel (valgfri) - White Label-logo (gjelder bare hvis kontoen din inkluderer White Label)

Bare name er påkrevd i JSON; alle andre felt faller tilbake til standardverdiene som veiviseren i administrasjonsgrensesnittet ville ha satt.

Eksempel på forespørselskropp

Dette er den maksimale data-JSON-en - hver seksjon er fylt ut. Send bare de seksjonene du har bruk for; alt annet får standardverdier.

{
  "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 egne feilmeldinger:

  • name - påkrevd, maks 150 tegn
  • advanced.temperature - mellom 0.0 og 1.0
  • chatMemory.summariesToKnowledgeRatio - heltall mellom 10 og 90 (prosent, trinn på 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - mellom 0 og 500
  • appearance.footerMarkdown - maks 255 tegn
  • humanSupport.enabled=true krever at humanSupport.email er angitt
  • leadCollection.enabled=true krever at minst én av leadCollection.emailEnabled eller leadCollection.phoneEnabled er satt til true; kanalen som er aktivert krever også tilhørende etikett, i tillegg til leaveDetailsMessage og thankYouMessage
  • advanced.chatContextSize låses til kontoens maksimale støttede kontekststørrelse. Ikke gå ut fra at andre numeriske felt låses automatisk.

Felt med verdien null på serveren utelates fra JSON-kroppen - bare felt med verdier som ikke er null overføres.

Eksempel på svarkropp (201)

Samme struktur som forespørselen, i tillegg til den skrivebeskyttede meta-blokken og engangsverdien apiKey på øverste nivå. Skrivebeskyttede filadresser (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) fylles ut av serveren når de tilhørende multipart-delene ble lastet opp.

{
  "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 opprettelse - det er den nyopprettede Bot Talk-nøkkelen som er knyttet til den nye boten. Klarteksten vises én gang og kan ikke hentes frem igjen fra API-et senere; ta vare på den på din side umiddelbart.

Svarhodet Location inneholder URL-en til den nye boten (/v1/management/bots/{id}).

Curl-eksempler

Modus 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!"}}'

Modus 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}

Returner den nåværende konfigurasjonen for en bot du eier.

Curl-eksempel

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..."

Eksempel på svarkropp (200)

Samme struktur som POST-svaret, minus engangsverdien apiKey. meta-blokken er inkludert. Returnerer 404 not_found_error hvis boten ikke finnes eller ikke tilhører kontoen din.

Nåværende avatar og White Label-logo leveres som fullt kvalifiserte, skrivebeskyttede nettadresser (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - basert på samme protokoll + vert + kontekstbane som betjente denne forespørselen. Hent dataene ved å gjøre en GET-forespørsel direkte mot disse adressene; for å erstatte en av filene laster du opp en ny via multipart-delen avatar / whitelabel_logo ved PATCH. Disse URL-feltene ignoreres dersom de sendes inn i en forespørselskropp.

{
  "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"
  }
}

Klone en bot

Forespørselskroppen (request body) til POST /v1/management/bots og responskroppen til GET /v1/management/bots/{bot_id} har samme struktur, så kloning er en tretrinnsprosess: GET kilden, fjern serveradministrerte identitetsfelter, POST resultatet.

1. GET kildeboten.

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -o source-bot.json

2. Fjern meta-blokken på toppnivå. meta-objektet (id, createdAt, updatedAt) er serveradministrert og skrivebeskyttet - å la det ligge i POST-kroppen gjør ingen skade (serveren ignorerer det), men å fjerne det gjør intensjonen eksplisitt og holder nyttelasten ren. Rediger eventuelt name slik at klonen kan skilles fra kilden.

jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json

3. POST den rensede kroppen for å opprette klonen. Se referansen for POST /v1/management/bots ovenfor for fullstendig oppbygging av kroppen 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

Responsen inneholder den nye botens meta.id pluss en nygenerert apiKey (Bot Talk-nøkkelen for klonen). apiKey i ren tekst returneres kun i denne opprettelsesresponsen - kopier den før du forkaster responskroppen; den kan ikke hentes ut senere.

Dette kopierer støttede innstillinger, ikke en ferdig trent chatbot. Treningsinnhold, samtalehistorikk, integrasjoner/handlinger, Flow og skjemadefinisjoner klones ikke av disse endepunktene. Konfigurer disse separat i appen.

Ytterligere forbehold:

  • Filer klones ikke. appearance.avatarUrl og whiteLabel.whitelabelLogoUrl er skrivebeskyttede og peker til kildebotens filer. Hvis du trenger samme avatar eller White Label-logo på klonen, laster du ned filene fra kilde-URL-ene og laster dem opp som multipart avatar / whitelabel_logo-deler - enten i selve opprettelses-POST-en (Modus B) eller i en påfølgende PATCH.
  • Bot Talk-nøkler klones ikke. Hver bot har sitt eget utvalg av Bot Talk-nøkler. Den ene apiKey-verdien som returneres av opprettelses-POST-en er den eneste som genereres automatisk; opprett flere nøkler fra botens API-fane ved behov.

PATCH /v1/management/bots/{bot_id}

Oppdater ett eller flere felter på en bot du eier. Bare seksjoner/felter som er til stede i JSON-en blir endret; alt som utelates (eller sendes som null) forblir uendret. Semantikk for delvis oppdatering gjelder per felt innenfor en innsendt seksjon.

To likeverdige Content-Type-verdier godtas (samme som POST):

Modus A - ren JSON (anbefales når du bare oppdaterer innstillinger):

  • Content-Type: application/json
  • Forespørselskroppen er patch-JSON-en (ingen data-innpakning)

Modus B - multipart/form-data (brukes ved opplasting av filer):

  • data JSON-del (valgfri) - selve patchen. Sendes bare hvis du vil endre felter. Kan utelates helt hvis du bare vil laste opp en avatar eller logo.
  • avatar fildel (valgfri) - erstatter avataren
  • whitelabel_logo fildel (valgfri) - erstatter White Label-logoen (gjelder bare hvis kontoen din inkluderer White Label)

Alle tre delene er valgfrie i PATCH, men minst én må være til stede for at kallet skal ha noen funksjon.

Eksempel på forespørselskropp (flere seksjoner)

Alle felter som godtas av POST /v1/management/bots kan også sendes her. Eksempelet nedenfor illustrerer flere seksjoner, ikke alle støttede felter; i praksis sender du bare nøklene du ønsker å endre (se «Minimal delvis oppdatering» lenger ned) - hver nøkkel som utelates (eller sendes som null) lar den lagrede verdien forbli uendret.

{
  "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 oppdatering

Utfør en PATCH på et enkelt felt ved å sende nøyaktig de nøklene du vil ha endret - alt annet beholdes.

{
  "appearance": {
    "launcherColor": "#abcdef"
  }
}

Curl-eksempler

Modus 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"}}'

Modus B - multipart (ved utskifting av 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'

Modus B - erstatt kun avataren (ingen feltendringer):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -F 'avatar=@./new-avatar.png'

Responskropp (200)

Samme struktur som GET /v1/management/bots/{bot_id} - botens fullstendige konfigurasjon etter at patchen ble utført, inkludert meta-blokken. Ingen apiKey-felt. Returnerer 404 not_found_error hvis boten ikke finnes eller ikke tilhører din konto.

Eksempelet nedenfor viser responsen etter å ha utført patchen fra Full request body (multiple sections) ovenfor på boten fra GET-eksempelet - endrede felter gjenspeiler de nye verdiene, urørte felter beholdes, og meta.updatedAt oppdateres.

{
  "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

Les av gjeldende abonnementsbruk for kontoen som eier Management-nøkkelen.

Responskropp (200)

{
  "subscriptionType": "your-plan-id",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • subscriptionType er en identifikator i små bokstaver for kontoens gjeldende plan (your-plan-id er en illustrativ plassholder). Planer hentes fra en dynamisk katalog, så det nøyaktige settet med identifikatorer kan endre seg over tid etter hvert som planer får nye navn eller legges til - behandle dette som en ugjennomsiktig streng, ikke en fast enum.
  • messages.used / limit / remaining er meldingskreditter for gjeldende kalendermåned, og tilbakestilles den første dagen i måneden, ikke på fornyelsesdagen for abonnementet. De er kredittvektet, ikke rene antall svar.
  • bots.used / limit / remaining teller eide boter, inkludert boter satt på pause, opp mot kontoens totale bot-grense.

Rate limit-headere

Responser som når rate limit-stadiet (dvs. autentisering og IP-hviteliste er bestått) inkluderer:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - grensen per nøkkel som faktisk ble brukt for dette kallet (10 som standard, eller din konfigurerte rateLimitPerMinute hvis den er lavere).
  • X-RateLimit-Remaining - gjenværende tokens i bøtten rett etter dette kallet.
  • X-RateLimit-Reset - Unix epoch-sekunder når neste token blir tilgjengelig (ikke en fullstendig tilbakestilling av bøtten; bøtten fylles opp kontinuerlig). Når bøtten er full, er dette gjeldende tidspunkt.

Ved 429 rate_limit_exceeded-responser settes også Retry-After, oppgitt i hele sekunder til minst ett token frigjøres.

Feil før autentisering (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) og 403 ip_not_whitelisted inneholder ikke X-RateLimit-*-headere - begrensningen sjekkes først etter at autentisering og IP-kontroller er fullført.

Feilformat

Samme konvolutt som Bot Talk API:

{
  "error": {
    "type": "permission_error",
    "code": "key_type_not_allowed",
    "message": "This endpoint requires a MANAGEMENT API key.",
    "param": null
  }
}

Valideringsfeil bruker code: "invalid_parameter" og setter feltstien som feilet foran meldingen, slik at det er lett å se hvilken del som feilet:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
  }
}

Ugyldige verdier for enum- / lukkede felt (f.eks. chatMemory.clientSummaryPromptType = "BOGUS") inkluderer feltstien, den avviste verdien og listen over tillatte verdier:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
  }
}

Relatert

For samtale-endepunkter og SSE-strømming, se Bot Talk API.