Hjelpesenter
Chat API

Management API

Sist oppdatert:

Oversikt over Management API

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

  • opprett en bot programmatisk med POST /v1/management/bots
  • les en bestemt bot du eier med GET /v1/management/bots/{bot_id}
  • oppdater en bestemt bot med PATCH /v1/management/bots/{bot_id}
  • les forbruk for abonnementet med GET /v1/usage

Management-nøkler er knyttet til kontoen din, ikke til en bestemt bot. De holdes bevisst atskilt 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 administrasjonsappen 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 IP-hviteliste og hastighetsgrense, og send inn.
  3. Kopier hele nøkkelen fra bekreftelsesvinduet. Ren tekst vises bare én gang.

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

Autentisering

Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345

Hvis du sender en mk_-nøkkel til /v1/chat (eller et hvilket som helst annet Bot Talk-endepunkt), returneres 403 key_type_not_allowed. Hvis du sender en ck_-nøkkel til /v1/management/*, returneres samme feilmelding.

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 ~1 token hvert 6. sekund). Kan konfigureres nedover ved opprettelse - angi en lavere rateLimitPerMinute, så reduseres taket og påfyllingshastigheten justeres deretter.

Tillatelser

Hver Management-nøkkel har et hvilket som helst delsett av de tre tillatelsene nedenfor. Minst én må velges ved opprettelse; ellers blir forespørselen avvist med 400 invalid_request_error. Et kall til et endepunkt med en nøkkel som mangler den påkrevde tillatelsen, returnerer 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 Bot Settings (Bot-innstillinger) i administrasjonsappen, slik at JSON-nøklene og de synlige fanene stemmer overens: Hvis du endrer consent.humanSupportRequirePolicyAccept via API-et, ser du at den samme bryteren endres i fanen Consent & Privacy (Samtykke og personvern) i administrasjonsappen.

  • role - botpersona, råinstruks (prompt), svarlengde, språk, kontekst for nettsted/selskap (fanen Role & Behavior [Rolle og atferd])
  • conversation - velkomstmelding, spørringsforbedring, samtalekontinuitet, vurderingsbryter + verktøytips, innhold for foreslåtte spørsmål + dynamiske oppfølginger (fanen Chat Conversation [Chatsamtale])
  • chatMemory - bryter for chatminne, instruksjoner for oppsummering, kontekstallokering (fanen Summaries & Memory [Sammendrag og minne])
  • appearance - farger, tekst, dimensjoner, tilpasset CSS, velkomstskjerm, stil for foreslåtte spørsmål, atferd for automatisk åpning, simulering av menneskelig skriving, bunntekst i markdown (fanen Appearance [Utseende])
  • humanSupport - kontaktskjema for menneskelig hjelp (fanen Human Contact Form [Kontaktskjema for mennesker])
  • leadCollection - skjema for lead-innsamling (fanen Lead Collection [Lead-innsamling])
  • liveChat - overlevering til Live Chat (fanen Live Chat)
  • consent - alle fire brytere for samtykke til personvernerklæring samt teksten på samtykkeskjermen (fanen Consent & Privacy [Samtykke og personvern])
  • whiteLabel - skjul logo, lenke til tilpasset logo, hosting på eget domene (fanen Whitelabel)
  • security - tillatte domener, søppelpostfilter, hastighetsgrenser for samtaler (fanen Security [Sikkerhet])
  • voice - taleinndata og talesamtaler: modell, stemme, språk, instruks, maks varighet (fanen Voice Conversation [Talesamtale])
  • multilingual - flerspråklig modus, basisspråk, tilbudte språk, håndtering av kunnskapsspråk (fanen Languages [Språk])
  • advanced - LLM-modell, temperatur, kontekststørrelse, grense for botmeldinger, intern språkkode, Offer Cards (fanen Model & Advanced [Modell og avansert])

Bare name ligger på toppnivået, fordi det identifiserer boten i stedet for å tilhøre en bestemt fane.

Sidemenyen for Bot Settings har for øyeblikket 15 underfaner, og 13 av dem tilsvarer seksjonene ovenfor. De to underfanene som ikke har noen tilsvarende seksjon, er Flow (Flyt) og Actions (Handlinger) - begge omtales under "Utenfor API-ets omfang" nedenfor. De 13 som tilsvarer seksjonene, 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 svarkroppen har samme struktur. Svaret inneholder to ekstra felter:

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

To felter i den felles strukturen er skrivebeskyttede - de returneres i svaret, men ignoreres hvis du prøver å sende dem med POST/PATCH:

  • appearance.avatarUrl - fullstendig offentlig URL for botens avatarbilde (f.eks. https://api.chatlab.com/aichat/content/avatar_xyz.png). Utfør en GET direkte mot denne for å laste ned dataene. Hvis du vil endre den, laster du opp en ny fil via multipart-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fullstendig offentlig URL for white label-topplogoen. Samme mønster som avatarUrl. Hvis du vil 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 det 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 akkurat det feltet. null på feltnivå sletter aldri en lagret verdi - det betyr bare "ikke rør".

Rolle- og promptoppbygging

Systeminstruksen (system prompt) som LLM-en faktisk mottar, bygges opp på én av to måter avhengig av role.role. Ved å vite hvilken gren du befinner deg på, vet du hvilke felter som har betydning, 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 inkluderer:

  • role.role - rolleetikett (f.eks. "Customer Support") og rollespesifikke instruksjoner legges til automatisk
  • name - botnavn, flettes inn i åpningssetningen
  • role.language - "Auto Detect" gjør at boten tilpasser seg 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; hvis feltet ikke er tomt, legges det til som "for the users of the website {url}"
  • role.companyDescription - valgfritt; hvis feltet 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 rollespesifikk atferd og sikkerhetsrammer automatisk.

Gren B - role.role er CUSTOM (egendefinert instruks)

Backend bruker role.rawPrompt ordrett som hele systeminstruksen. responseLength, language, websiteAddress og companyDescription lagres, men flettes ikke inn i instruksen - hvis du vil at noen av disse skal gjenspeiles i botens atferd, må du selv inkludere dem i teksten for rawPrompt. Rollespesifikke sikkerhetsrammer og toneangivelser legges heller ikke til; du styrer hele instruksen selv.

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

Enum- / lukkede felter

Flere felter godtar bare et fast sett med strengverdier. Hvis du sender noe utenfor listen, avvises det med 400 validation_failed og feltstien i error.param. Det skilles mellom store og små bokstaver.

  • role.role - CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.language - fullt engelsk språknavn fra rullegardinmenyen i administrasjonen, f.eks. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi og omtrent 80 andre. Verdien lagres ordrett og settes inn i instruksmalen, så to-bokstavers ISO-koder (en, pl) og andre verdier utenfor listen blir ikke avvist av API-et, men skaper en feilaktig instruksjon som "Output in en, unless...". Standardverdien er Auto Detect hvis feltet utelates ved opprettelse.
  • advanced.model - se "AI-tekstmodeller" nedenfor; settet du kan velge fra, avhenger av kontogrensene dine, og verdier kontoen din ikke har tilgang til, returnerer 400 invalid_parameter
  • advanced.chatContextSize - 8000, 16000, 32000. Avhenger av kontogrensene dine; høyere verdier blir automatisk justert ned
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified
  • 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 felter og intervaller

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

  • advanced.temperature - godkjent intervall er 0.0 til 1.0, som tilsvarer glidebryteren i administrasjonsgrensesnittet. Verdier utenfor dette intervallet avvises med 400 validation_failed.

  • chatMemory.summariesToKnowledgeRatio - heltall i prosent, 10-90 med trinn på 10. Styrer hvor mye av chatkonteksten som settes av til historiske klientsammendrag kontra resten (kunnskapsbase, gjeldende samtale, instruksjoner). Standard er 50. Verdier utenfor 10-90 avvises med 400 validation_failed. Gjelder bare når chatMemory.enabled=true OG chatMemory.summaryConversationsEnabled=true.

  • liveChat.schedule - JSON kodet som en streng, ikke et nestet JSON-objekt i sendingen. Serveren lagrer den rå strengen ordrett; administrasjonsgrensesnittet parser den på klientsiden ved visning av timeplaneditoren. Når strengen er parset, er den 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\"}"
    

    Utenfor de oppførte tidene vises liveChat.outOfHoursMessage for den besøkende, og overlevering til live chat undertrykkes. Validering av den indre strukturen skjer bare på klientsiden i administrasjonsgrensesnittet - feilformatert JSON eller ukjente nøkler godtas av API-et som en ren streng, og vil føre til visningsfeil når et menneske senere åpner boten i administrasjonen. Valider strukturen på din side før sending.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korte etiketter som vises på knappene 👍 / 👎 ved hvert AI-svar når conversation.conversationRatingEnabled=true. Standardteksten er "I like the response" / "I don't like the response". Synlig for sluttbrukere.

  • whiteLabel.hideRoboAssistLogo - white label-funksjon, underlagt kontogrensene dine. Skjuler bunntekstlinjen "Powered by ChatLab". Hvis kontoen din ikke inkluderer white label, lagres verdien, men ignoreres, og bunnteksten vises alltid.

  • whiteLabel.whitelabelLogoLink - white label-funksjon, underlagt kontogrensene dine. Mål-URL ved klikk på 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 botbobler når simulateHumanTyping=true. Standard er 5.

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

  • advanced.internalLocale - IETF-språk- og regionskode på formen ll_CC (understrek, IKKE ll-CC med bindestrek). Godkjente verdier kommer fra en fast liste med omtrent 95 koder: 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 en to-bokstavers kode alene ("en") eller BCP-47 ("en-US") støttes ikke i den tillatte listen. Standard er en_US. Dette er koden som brukes for formatering av dato og tall i selve widgetgrensesnittet, i motsetning til role.language (språket boten svarer på i samtalen).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltall (sendes som JSON-tall, f.eks. 30, ikke "30"). 0 deaktiverer hastighetsgrensen per IP. Hvis verdien er ulik null, håndhever widgeten N meldinger per varighet i sekunder før security.talkMessagesRateLimitHitMessage vises for den besøkende.

  • advanced.botMessagesLimit - heltall (JSON-tall, f.eks. 1000). 0 betyr "ingen grense"; ellers må det være et multiplum av 1000 (1000, 2000, 10000, ...). Verdier som 100 eller 1500 avvises med 400 validation_failed. Deretter justeres verdien automatisk ned til kontogrensen din.

AI-tekstmodeller (advanced.model)

Send den nøyaktige API-verdien (venstre kolonne med kodelit你怎么). Visningsnavnet i administrasjonsgrensesnittet står i parentes. Kontogrensene dine bestemmer hvilke modeller du kan velge; hvis du sender en modell kontoen din ikke har tilgang til, returneres 400 invalid_parameter. Standardverdi for nye boter er 5-MINI.

  • 4-O-MINI (GPT 4-o mini)
  • 4-O (GPT 4-o)
  • 4.1-MINI (GPT 4.1-mini)
  • 4.1 (GPT 4.1)
  • 5-MINI (GPT 5-mini)
  • 5 (GPT 5)
  • 5.1 (GPT 5.1)
  • 5.4-MINI (GPT 5.4-mini)
  • 5.4 (GPT 5.4)
  • 5.5 (GPT 5.5)
  • GEMINI 2.5 PRO (Gemini 2.5 Pro)
  • GEMINI 3 Flash (Gemini 3 Flash)
  • GEMINI 3.5 Flash (Gemini 3.5 Flash)
  • GEMINI 3.7 Flash (Gemini 3.7 Flash)
  • GEMINI 3.8 Flash (Gemini 3.8 Flash)
  • GEMINI 3.1 Flash-Lite (Gemini 3.1 Flash-Lite)
  • GEMINI 3 PRO (Gemini 3 Pro)

Feltreferanse (fullstendig forespørselsskjema)

Hvert felt på tråden, med type, begrensning og en kort beskrivelse. PATCH-semantikk: ethvert felt som utelates (eller sendes som null), lar den lagrede verdien forbli uendret. Samme format brukes for svaret (minus binært innhold i flere deler; pluss den skrivebeskyttede meta-blokken i hvert svar og apiKey kun i opprettelsessvaret).

Toppnivå

Field Type Constraint Description
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 svar:

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

§ role

Field Type Constraint Description
role string (enum) CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM Forhåndsinnstilt persona; velger promptmalen (se "Rolle- og promptoppbygging")
language string fullt engelsk språknavn (English, Polish, ...) eller Auto Detect Hovedspråk som mates inn i promptmalen
responseLength string ∈ {Concise, Normal, Detailed} Ønsket detaljnivå for AI-svaret
websiteAddress string Nettsted som brukes for promptkontekst
companyDescription string Selskapsbeskrivelse som brukes for promptkontekst
rawPrompt string Tilpasset systemprompt - brukes ordrett kun når role=CUSTOM

§ conversation

Field Type Constraint Description
welcomeMessage string Første melding som vises til den besøkende ved åpning
queryRefinementEnabled boolean Hvis sann, optimaliseres den besøkendes spørsmål før RAG-innhenting
conversationContinuityEnabled boolean Hvis sann, gjenopptar tilbakevendende besøkende sin forrige samtale
conversationRatingEnabled boolean Hvis sann, vises vurdering med tommel opp/ned på botmeldinger
positiveRatingTooltip string Verktøytips på knappen for positiv vurdering
negativeRatingTooltip string Verktøytips på knappen for negativ vurdering
suggestedQuestions string Linjeskift-separerte foreslåtte spørsmål / samtaleåpnere
dynamicSuggestedFollowups boolean Hvis sann, foreslår AI oppfølgingsspørsmål etter hvert svar
dynamicFollowupsAutoIcons boolean Hvis sann, velger AI automatisk emoji-ikoner for dynamiske oppfølginger

§ chatMemory

Field Type Constraint Description
enabled boolean Hovedbryter for funksjonen for chatsamtaleminne
summaryConversationsEnabled boolean Lagre sammendrag per samtale
conversationSummaryPrompt string Tilpasset prompt som brukes til å oppsummere hver samtale
conversationSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Hvorvidt standard eller tilpasset sammendragsprompt skal brukes
clientSummaryPrompt string Tilpasset prompt som brukes til å oppsummere klienten på tvers av samtaler
clientSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Standard vs. tilpasset prompt for klientprofil
summariesToKnowledgeRatio int 10-90, trinn 10 % av chatkontekstvinduet som tildeles sammendrag vs. RAG-kunnskap

§ appearance

Field Type Constraint Description
launcherColor string (hex) Bakgrunnsfarge for starteren (chatikonet)
headerColor string (hex) Bakgrunnsfarge for chattoppteksten
titleColor string (hex) Tittelfarge for chattoppteksten
subtitleColor string (hex) Undertittelfarge for chattoppteksten
clientMessageBubbleColor string (hex) Boblefarge for den besøkendes meldinger
clientMessageTextColor string (hex) Tekstfarge for den besøkendes meldinger
responseMessageBubbleColor string (hex) Boblefarge for botsvar
responseMessageTextColor string (hex) Tekstfarge for botsvar
chatSubheader string Slagord som vises under chattittelen
senderPlaceholder string Plassholdertekst i meldingsfeltet
resetConversationTooltip string Verktøytips på knappen for "tilbakestill samtale"
chatAlignment string (enum) ∈ {left, right} Hvilken side av skjermen chatten festes til
launcherBottomMargin int 0-500 Starterens avstand fra bunnkanten (px)
launcherSideMargin int 0-500 Starterens avstand fra sidekanten (px)
displayShadow boolean Fallskygge under widgeten
customCss string Rå CSS som settes inn i widgetens iframe
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Hvordan lenker inne i botmeldinger åpnes
minimizedDisplayMode string (enum) ∈ {icon, minified} Minimert tilstand: starterikon eller kompakt meldingslinje
chatDesktopWidthPx int Widgetbredde på datamaskin
chatDesktopHeightPx int Widgethøyde på datamaskin
chatMobileSizePercent int Mobil widgetstørrelse i % av visningsområdet
messageFontSize int Skriftstørrelse for meldingstekst (px)
showChatbotBubblesDesktop boolean Vis flytende oppmerksomhetsbobler på datamaskin
showChatbotBubblesMobile boolean Vis flytende oppmerksomhetsbobler på mobil
chatbotBubblesDelaySeconds int Forsinkelse før oppmerksomhetsboblene vises (sekunder)
launcherIconFullSize boolean Vis det tilpassede starterikonet helt ut til kanten i stedet for innfelt
welcomeScreenEnabled boolean Vis Welcome Screen (velkomstskjerm) i stedet for å gå rett til chatten
welcomeScreenQuestionsLabel string Tekst over de foreslåtte spørsmålene på velkomstskjermen
welcomeScreenHideHumanContactForm boolean Skjul handlingen for kontaktskjema til mennesker i toppteksten mens Welcome Screen vises. Den dukker opp igjen etter den besøkendes første melding. Boter opprettet før 2026-09-02 har standardverdi true
welcomeScreenHideLiveChat boolean Skjul handlingen for Live Chat i toppteksten mens Welcome Screen vises. Den dukker opp igjen etter den besøkendes første melding. Boter opprettet før 2026-09-02 har standardverdi true
headerActionsLayout string DROPDOWN Hvordan Live Chat og kontaktskjemaet til mennesker tilbys i chattoppteksten: ICONS (hvert sitt ikon) eller DROPDOWN (gruppert i topptekstmenyen). Boter opprettet før 2026-09-02 har standardverdi ICONS
stackSuggestedQuestions boolean Plasser foreslåtte spørsmål vertikalt over hverandre (vs. ved siden av hverandre)
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 botsvaret i bobler med skriveanimasjon
simulateHumanTypingDelay int 0-200 Forsinkelse mellom meldingsbobler (sekunder)
footerMarkdown string maks 255 Tilpasset bunntekst-markdown som vises under chatten
avatarUrl string read-only Fullstendig kvalifisert offentlig URL til avataren; for å endre den, last opp via multipart-delen avatar

Flerdelt innhold (multipart) ved POST/PATCH: avatar (fildel). GET- / svartekster utelater filinnholdet - kun URL-en sendes over nettverket.

§ humanSupport

Field Type Constraint Description
enabled boolean Bryter for flyten Human Support (menneskelig brukerstøtte)
email string obligatorisk (streng opprettelse) når enabled=true E-postadresse som mottar henvendelser til brukerstøtte
dialogMessage string Oppmuntrende melding 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 meldingsfeltet
emailWithConversationContent boolean Hvis sann, inkluderes samtalehistorikken i e-postteksten
customFormId long ID for et eksisterende tilpasset skjema Erstatt det innebygde kontaktskjemaet med et tilpasset skjema. null beholder det innebygde skjemaet
customFormMapping string JSON-kodet streng Mapper felter i det tilpassede skjemaet til e-postfeltene for brukerstøtte

requirePolicyAccept ligger under consent.humanSupportRequirePolicyAccept, ikke her.

§ leadCollection

Field Type Constraint Description
enabled boolean Bryter for leadsskjema
nameEnabled boolean Innhent navn
nameLabel string Etikett på navnefeltet
emailEnabled boolean Innhent e-post
emailLabel string obligatorisk (streng opprettelse) når enabled=true OG emailEnabled=true Etikett på e-postfeltet
phoneEnabled boolean Innhent telefonnummer
phoneLabel string obligatorisk (streng opprettelse) når enabled=true OG phoneEnabled=true Etikett på telefonfeltet
leaveDetailsMessage string obligatorisk (streng opprettelse) når enabled=true Melding som oppfordrer den besøkende til å legge igjen kontaktinformasjon
thankYouMessage string obligatorisk (streng opprettelse) når enabled=true Bekreftelse som vises etter innsending
requireBeforeNewConversation boolean Hvis true, må skjemaet sendes inn før samtalen starter; hvis false, avgjør AI når skjemaet skal vises
emailNotificationEnabled boolean Send e-post til eieren hver gang et lead innhentes
emailNotificationAddress string Mottaker av varsler (standard er kontoens e-postadresse)
emailWithConversationContent boolean Hvis sann, inkluderes samtalehistorikken i varselet

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

| customFormId | long | ID for et eksisterende tilpasset skjema | Erstatt det innebygde leadsskjemaet med et tilpasset skjema. null beholder det innebygde skjemaet | | customFormMapping | string | JSON-kodet streng | Mapper felter i det tilpassede skjemaet til navn / e-post / telefon |

§ liveChat

Field Type Constraint Description
enabled boolean Funksjonsbryter for Live Chat
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) Driftstidsplan for Live Chat - se "Strukturerte felter og områder" for nøyaktig format
outOfHoursMessage string Melding som vises utenom åpningstid
closeModalMessage string Tittel på modaldialogen "Lukke Live Chat?"
closeModalConfirmLabel string Etikett for bekreftelsesknappen i lukkemodalen
closeModalCancelLabel string Etikett for avbryt-knappen i lukkemodalen
closeModalTooltipText string Verktøytips på lukkehandlingen for 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 sann, viderekobles det til Human Support-skjemaet når ingen operatør svarer
missedEmailEnabled boolean standard true Send e-post til boteieren når en forespørsel om Live Chat forble ubesvart. Ikke satt på eldre boter, noe som tolkes som aktivert

requirePolicyAccept ligger under consent.liveChatRequirePolicyAccept, ikke her.

§ consent

Field Type Constraint Description
newConversationRequirePolicyAccept boolean Krev samtykke til personvernerklæring før en ny samtale startes
humanSupportRequirePolicyAccept boolean Krev samtykke til personvernerklæring før Human Support-skjemaet sendes inn
leadCollectionRequirePolicyAccept boolean Krev samtykke til personvernerklæring før leadsinnsamlingsskjemaet sendes inn
liveChatRequirePolicyAccept boolean Krev samtykke til personvernerklæring før en Live Chat-økt startes
newConversationConsentDescription string Innledende tekst for samtykkeskjermen ved samtaleoppstart
privacyPolicyConsentCheckboxLabel string Etikett ved siden av avmerkingsboksen for samtykke (inneholder vanligvis en lenke til personvernerklæringen)

§ whiteLabel

Field Type Constraint Description
hideRoboAssistLogo boolean White Label-funksjon; underlagt kontobegrensninger Skjul standard ChatLab-logo i bunnteksten
whitelabelLogoLink string White Label-funksjon; underlagt kontobegrensninger URL som den tilpassede bunntekstlogoen lenker til
assignToCustomDomain boolean styres av funksjonen CUSTOM_DOMAIN Ha chatten på det konfigurerte egendefinerte domenet
whitelabelLogoUrl string read-only Fullstendig kvalifisert offentlig URL til White Label-logoen; for å endre den, last opp via multipart-delen whitelabel_logo

Flerdelt innhold (multipart) ved POST/PATCH: whitelabel_logo (fildel). GET- / svartekster utelater filinnholdet - kun URL-en sendes over nettverket.

§ security

Field Type Constraint Description
allowedDomains string Kommadelt liste over domener som har tillatelse til å bygge inn widgeten (tom = ingen hvitliste)
spamFilterEnabled boolean Aktiver spambeskyttelse per bot for innkommende meldinger
countryFilterMode string BLACKLIST eller WHITELIST Hvordan landelistene tolkes. Selve listene forblir kun tilgjengelige for administratorer
talkMessagesRateLimit int >= 0; 0 deaktiverer Maksimalt antall brukermeldinger tillatt innenfor hastighetsbegrensningsvinduet
talkMessagesRateLimitDurationSeconds int >= 0 Lengde på hastighetsbegrensningsvinduet (sekunder)
talkMessagesRateLimitHitMessage string Melding som vises til den besøkende når hastighetsgrensen nås

§ voice

Field Type Constraint Description
inputEnabled boolean La den besøkende diktere meldinger (tale til tekst)
conversationEnabled boolean krever stemmefunksjonen 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-* Stemmemodell. Faktureres per minutt, prisene varierer per modell
turnDetection string leverandørspesifikk Modus for turtaking
audioPrompt string Ekstra systemprompt som kun brukes for taleinnlegg
welcomeMessage string Muntlig åpningsreplikk
language string språkkode Primært talespråk
additionalLanguages string kommadikterte språkkoder Ekstra språk taleagenten godtar
maxDurationSeconds int Fast maksimumsgrense for en enkelt talesamtale
maxDurationMessage string Melding som vises når maksimumsgrensen nås

§ multilingual

Field Type Constraint Description
enabled boolean Bryter for flerspråklig modus
mode string AUTODETECT eller en fastlistemodus Hvordan boten velger svarspråk
baseLanguage string språkkode Språket botens egne tekster er skrevet på
languages string kommadikterte språkkoder Språk som tilbys den besøkende
knowledgeLanguageMode string Hvordan kunnskap på andre språk behandles
knowledgeLanguageFallback string språkkode Språk som brukes når ingen treff blir funnet

§ advanced

Field Type Constraint Description
model string underlagt kontobegrensninger; se "AI-tekstmodeller" ovenfor LLM-identifikator (f.eks. 5-MINI)
temperature decimal 0.0-1.0 Samplingstemperatur (samsvarer med glidebryteren i grensesnittet)
chatContextSize int ∈ {8000, 16000, 32000}; justeres automatisk til din kontogrense Tokenvindu for samtalehistorikk
botMessagesLimit long 0 eller multiplum av 1000 (f.eks. 1000, 2000, 10000) Maksimalt antall botsvar per samtale (0 = ingen grense)
internalLocale string språkkode på formatet ll_CC Språkinnstilling for etiketter i widgetgrensesnittet (atskilt fra role.language)
productsViewEnabled boolean Hvis sann, vises e-handelens Offer Cards inne i chatten
includeProductsInKnowledgeBase boolean Hvis sann, indekseres produktkatalogen som en del av kunnskapsbasen

Utenfor API-ets omfang

Administratorgrensesnittet har noen områder som med vilje ikke er tilgjengelige i denne versjonen av Management API:

  • Flow-fanen - det visuelle redigeringsverktøyet Conversation Flow Editor (samtaleflyt med steg og overganger). Ikke tilgjengelig via Management API.
  • Actions-fanen - administrerte integrasjoner for e-handel / booking, AI Search og tilpassede API-funksjoner. Verktøykalling (tool calling) har aldri vært en del av Management API.
  • Selve verktøyet for tilpassede skjemaer - opprettelse og redigering av tilpassede skjemaer er ikke tilgjengelig. Du kan likevel koble et eksisterende skjema til en bot via leadCollection.customFormId og humanSupport.customFormId.
  • Tilpassede ikoner for åpning/lukking av chat - customLauncherIconVisible, openChatIcon, closeChatIcon. API-et eksponerer kun flerdelte data (multipart parts) for hoved-avatar og whitelabel_logo.
  • IP- og landelister - selve oppføringene er kun for administratorer. Bare tolkingsmodusen eksponeres, via security.countryFilterMode.

Endepunkter

POST /v1/management/bots

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

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

  • Content-Type: application/json
  • Forespørselens brødtekst er bot-konfigurasjonen i JSON (ingen data-innpakning)
  • Filer (profilbilde / logo) kan lastes opp senere via en ny PATCH ved hjelp 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 (obligatorisk, Content-Type: application/json) - bot-konfigurasjon i den nestede strukturen beskrevet ovenfor
  • avatar fildel (valgfri) - profilbilde for boten
  • whitelabel_logo fildel (valgfri) - White Label-logo (gjelder bare hvis kontoen din inkluderer White Label)

Kun name er obligatorisk i JSON-koden; alle andre felt faller tilbake på standardverdiene som veiviseren i administrasjonsgrensesnittet ville ha satt.

Fullstendig forespørselsbrødtekst

Dette er den maksimale data-JSON-en - med alle seksjoner utfylt. Send bare de seksjonene du har behov 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-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  }
}

Valideringsregler med egne feilmeldinger:

  • name - obligatorisk, maksimalt 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 - maksimalt 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å etiketten sin, i tillegg til leaveDetailsMessage og thankYouMessage
  • Begrensede felt (advanced.chatContextSize, advanced.botMessagesLimit osv.) justeres automatisk ned til grensene for kontoen din

Felt med verdien null på serveren utelates fra JSON-brødteksten - kun felt med verdier som ikke er null, overføres.

Fullstendig svarkropp (201)

Samme struktur som forespørselen, i tillegg til den skrivebeskyttede meta-blokken og engangsnøkkelen apiKey på toppnivå. 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-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  },
  "meta": {
    "id": 4287,
    "createdAt": "2026-06-01T10:11:02Z",
    "updatedAt": "2026-06-01T10:11:02Z"
  },
  "apiKey": "ck_freshly_minted_bot_talk_key_here"
}

Feltet apiKey vises kun ved opprettelse - det er den nyopprettede Bot Talk-nøkkelen knyttet til den nye boten. Klarteksten vises kun én gang og kan ikke hentes frem igjen fra API-et senere; ta vare på den på din side med en gang.

Respons-headeren 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 profilbilde:

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 gjeldende konfigurasjonen for en bot du eier.

Curl-eksempel

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

Fullstendig svarkropp (200)

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

Gjeldende profilbilde og White Label-logo vises som fullstendige, skrivebeskyttede URL-er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - forankret i samme protokoll + vert + kontekststi som behandlet denne forespørselen. Hent filene ved å sende en GET-forespørsel direkte til disse nettadressene; for å erstatte en av filene laster du opp en ny via multipart-delen avatar / whitelabel_logo ved PATCH. Disse URL-feltene ignoreres hvis de sendes med i en forespørselsbrødtekst.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Normal",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hi! How can I help today?",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about this customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#1A73E8",
    "headerColor": "#1A73E8",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI support assistant",
    "senderPlaceholder": "Type a message...",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme",
    "avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we will get back to you.",
    "thankYouMessage": "Thanks - we received your message.",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details and we will get in touch.",
    "thankYouMessage": "Thanks - we will be in touch shortly.",
    "requireBeforeNewConversation": false,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false,
    "whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  },
  "meta": {
    "id": 4287,
    "createdAt": "2026-06-01T10:11:02Z",
    "updatedAt": "2026-06-01T11:02:19Z"
  }
}

Klon en bot

Forespørselskroppen til POST /v1/management/bots og responskroppen til GET /v1/management/bots/{bot_id} deler samme struktur, så kloning er en tretrinns prosess: GET kildeboten, fjern serverstyrte identitetsfelter, og 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å øverste nivå. meta-objektet (id, createdAt, updatedAt) styres av serveren og er skrivebeskyttet - å la det ligge i POST-kroppen gjør ingen skade (serveren ignorerer det), men å fjerne det gjør intensjonen tydelig og holder nyttelasten ren. Rediger eventuelt name slik at klonen skiller seg 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 form på 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 returneres i klartekst kun i denne opprettelsesresponsen - kopier den før du forkaster responskroppen; den kan ikke hentes frem senere.

To 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 kildeadressene og laster dem opp som multipart-deler for avatar / whitelabel_logo - enten ved opprettelse med POST (Modus B) eller via en oppfø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 fra opprettelses-POST-kallet er den eneste som genereres automatisk; opprett flere nøkler fra botens API (API)-fane ved behov.

PATCH /v1/management/bots/{bot_id}

Oppdater ett eller flere felter på en bot du eier. Kun seksjoner/felter som er til stede i JSON-koden endres; alt som utelates (eller sendes som null) forblir urørt. Semantikk for delvis oppdatering gjelder per felt innenfor en innsendt seksjon.

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

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

  • Content-Type: application/json
  • Forespørselskroppen er selve oppdaterings-JSON-en (uten noen data-innpakning)

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

  • data JSON-del (valgfri) - oppdateringsdataene. Sendes kun dersom du vil endre felter. Utelat den helt dersom du bare vil laste opp en avatar eller logo.
  • avatar fildel (valgfri) - erstatter avataren
  • whitelabel_logo fildel (valgfri) - erstatter White Label-logoen (gjelder kun dersom kontoen din inkluderer White Label)

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

Fullstendig forespørselskropp (maksimalt omfang)

Alle felter som godtas av POST /v1/management/bots kan også sendes her. Eksempelet nedenfor viser det maksimale omfanget; i praksis sender du kun 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 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 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 - erstatte 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 oppdateringen ble utført, inkludert meta-blokken. Ingen apiKey-felter. Returnerer 404 not_found_error dersom boten ikke finnes eller ikke tilhører kontoen din.

Eksempelet nedenfor viser responsen etter at oppdateringen fra Fullstendig forespørselskropp (maksimalt omfang) over er utført på boten fra GET-eksempelet - endrede felter viser 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 abonnementsforbruk for kontoen som eier Management-nøkkelen.

Responskropp (200)

{
  "subscriptionType": "standard",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • subscriptionType er en identifikator med små bokstaver for kontoens nåværende plan (f.eks. standard i eksempelet). 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 vilkårlig strengverdi, ikke en fast enum.
  • messages.used / limit / remaining er meldingskreditter for den gjeldende faktureringsperioden.
  • bots.used / limit / remaining teller aktive boter opp mot kontoens bot-grense.

Rate limit-headere

Svar som når rate limit-stadiet (det vil si at autentisering og IP-hviteliste er bestått) inneholder:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - grensen per nøkkel som faktisk ble brukt på dette kallet (10 som standard, eller din konfigurerte rateLimitPerMinute hvis den er lavere).
  • X-RateLimit-Remaining - antall tokens igjen 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-svar er Retry-After også angitt, uttrykt i hele sekunder frem til minst én 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 - hastighetsbegrenseren konsulteres først etter at autentisering og IP-sjekker er vellykkede.

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 delen som feiler er enkel å oppdage:

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

Ugyldige verdier for opplisting / lukkede sett med felter (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.