Bot Talk API
Bot Talk API er et REST-API for å kommunisere med én bestemt chatbot fra din egen applikasjon - tilpassede apper, interne verktøy eller automatiseringer du bygger selv. Du oppretter en API-nøkkel i botens API-fane, og kaller deretter chat-endepunktet med nøkkelen som et Bearer-token for å motta botens svar, enten som en enkel respons eller strømmet over SSE.
Kom i gang
- Velg chatboten din og naviger til API-fanen øverst på bot-siden (Select Bot > API (Velg bot > API)).
- Klikk på Create API Key (Opprett API-nøkkel).
Telleren ved siden av knappen viser hvor mange nøkler som er aktive ("1 of 5 API keys active"). Lenken View API Documentation (Vis API-dokumentasjon) åpner denne referansen, og curl-eksempelet under Quick Start (Hurtigstart) gir deg et bruksklart eksempel.
- I dialogboksen Create API Key gir du nøkkelen et navn, angir eventuelt en hviteliste for IP-adresser og en hastighetsgrense, velger hvilke tillatelser den skal ha, og klikker deretter på Create (Opprett).
- Kopier hele nøkkelen fra bekreftelsesdialogen. Nøkkelen i ren tekst vises bare én gang.
En nøkkel ser ut som ck_abcdefghijklmnopqrstuvwxyz012345. Hver nøkkel tilhører denne ene boten, så alle forespørsler som gjøres med nøkkelen, kommuniserer med den boten - boten identifiseres av nøkkelen og vises aldri i URL-en.
- Kjør curl-eksempelet nedenfor fra serveren din med nøkkelen din og en kort testmelding. Lagre den returnerte verdien for
conversationId, og gjenbruk den deretter for oppfølgingsmeldinger. Bekreft svaret og samtalen i botens Chatlogs-fane (Samtalelogger).
Oppbevar ck_-nøkler på serveren din, ikke i JavaScript på nettstedet eller i pakker for mobilapper. En Conversations-tillatelse gir tilgang til denne botens lagrede samtaler på tvers av alle besøkende, så applikasjonen din må autorisere hver enkelt sluttbruker før disse dataene returneres. Bruk Revoke (Tilbakekall) eller Delete (Slett) i API-fanen for å deaktivere en nøkkel; ingen av handlingene viser nøkkelen i ren tekst igjen.
Før du starter, bør du opprette og trene chatboten din og kontrollere at kontoen din inkluderer API-tilgang og har meldingskreditter.
Base-URL
https://api.chatlab.com/aichat
Alle endepunkter i denne artikkelen er relative til denne base-URL-en.
Nøkkeltillatelser
Hver nøkkel har én eller begge av disse tillatelsene, angitt med bryterne i dialogboksen Create API Key:
- Chat (send messages and receive responses) - gir tilgang til endepunktene
/v1/chatog/v1/chat/stream. - Conversation history (list and read past conversations) - gir tilgang til
/v1/conversations-endepunktene.
API-fanen viser hver nøkkels tildelte tillatelser som Chat- og Conversations-merker.
Autentisering
Send nøkkelen i Authorization-headeren ved hver forespørsel:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Forespørsler uten en Authorization: Bearer ...-header returnerer 401 missing_api_key. Ukjente nøkler returnerer 401 invalid_api_key; tilbakekalte nøkler returnerer 401 revoked_api_key. Fem ugyldige forsøk i løpet av ett minutt fra samme IP-adresse utløser en 60-minutters blokkering.
Grenser
- Maks 5 aktive Bot Talk-nøkler per bot
- Maks 60 forespørsler per minutt per nøkkel (token bucket, kapasitet 60, jevn påfylling med 1 token per sekund). Kan konfigureres nedover ved opprettelse - angi en lavere
rateLimitPerMinute, så reduseres grensen, og påfyllingshastigheten justeres tilsvarende. - Maks meldingslengde 4000 tegn
- Samtidige SSE-strømmer per nøkkel er underlagt kontogrensene dine
Endepunkter
POST /v1/chat
Send en melding til boten og motta hele svaret i én enkelt JSON-respons.
Forespørselskropp (Request body)
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- obligatorisk streng, maks 4000 tegn.conversationId- valgfri UUID. Utelat for en ny samtale; gjenbruk verdien serveren returnerte tidligere for å legge til i en eksisterende samtale.metadata- valgfritt objekt som godtar{source, userName, userEmail, userPhone}. For øyeblikket brukes bareuserEmailher for å utlede klientidentifikatoren; kanalen registreres som API. Ikke stol på at de andre metadatafeltene lagres i en lead-oppføring.
Responskropp (Response body) (200)
{
"message": {"role": "assistant", "content": "Sure, what's your order number?"},
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"model": "5.6-LUNA",
"usage": {"creditsUsed": 2},
"actions": []
}
message.roleer alltid"assistant";message.contenter hele svaret.modeler modell-ID-en boten kjørte på for dette kallet.usage.creditsUsedrapporterer for øyeblikket 2 pluss én per rapportert verktøykall for en fullført samtalerunde. Denne responstelleren inkluderer ikke kredittmultiplikatorer for modell/kontekst og må ikke brukes som fakturagrunnlag. Bruk Management API-forbruk for kontoforbruk og se meldingskreditter.actionsviser verktøykjøringer som ble utført i løpet av denne runden. Foreløpig sendes barefunction_call-oppføringer (medtype,name,status: "completed").
POST /v1/chat/stream
Strømmingsvariant av /v1/chat. Returnerer Content-Type: text/event-stream med Server-Sent Events.
Forespørselskropp (Request body)
Samme struktur som POST /v1/chat. stream-flagget i kroppen er ikke påkrevd - det er bruken av denne stien som utløser SSE.
Responskropp (Response body) (SSE-hendelser)
message.reset- forkast teksten som er akkumulert for det nåværende svaret, og begynn å samle inn deltas på nytt. Dette kan skje når genereringen starter på nytt; å slå sammen begge versjonene ville føre til et duplisert eller foreldet svar.message.delta- innholdsfragment{ "content": "..." }. Flere av disse strømmes etter hvert som tokens ankommer.action- verktøykjøring{ "type", "name", "status": "executing" }. Sendes når boten utløser et funksjonskall.message.done- avsluttende hendelse medconversationId,model,usage, og (hvis aktuelt) listen over fullførteactions.error- sendes hvis genereringen mislykkes; strømmen avsluttes deretter.
Keep-alive SSE-kommentarer (:keepalive) sendes hvert 15. sekund under lange genereringer. Tidsavbrudd på serversiden: 30 sekunder for første token, 120 sekunder totalt per strøm.
Curl-eksempel
curl -N -X POST https://api.chatlab.com/aichat/v1/chat/stream \
-H "Authorization: Bearer ck_..." \
-H "Content-Type: application/json" \
-d '{"message":"hello"}'
GET /v1/conversations
Vis samtaler for boten som er knyttet til nøkkelen din, på tvers av alle kilder (widget, WhatsApp, API osv.).
Spørreparametere (Query parameters)
limit- 1-100, standard er 20. Verdier utenfor dette intervallet justeres automatisk til grensene.cursor- ugjennomsiktig verdi returnert inextCursorpå forrige side. Utelat for den første siden.
Responskropp (Response body) (200)
{
"data": [
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"lastMessagePreview": "Thanks for the help."
}
],
"hasMore": false,
"nextCursor": null
}
lastMessagePreviewer avkortet til 100 tegn med et...-suffiks.nextCursorernullpå den siste siden; send den somcursorfor å hente neste side.
GET /v1/conversations/{conversation_id}
Lagrede samtalemeldinger tilgjengeliggjort via dette endepunktet.
Responskropp (Response body) (200)
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"messages": [
{"role": "user", "content": "Hi", "createdAt": "2026-05-10T14:11:02Z"},
{"role": "assistant", "content": "Hello! How can I help?", "createdAt": "2026-05-10T14:11:03Z"}
]
}
Kun rollene user og assistant returneres; interne system- og verktøymeldinger filtreres ut. Returnerer 404 not_found_error hvis samtalen ikke tilhører boten som er knyttet til nøkkelen din.
For å undersøke bot-konfigurasjonen, bruk Management API-endepunktet GET /v1/management/bots/{bot_id} med en Management-nøkkel.
Hastighetsgrense-headere (Rate limit headers)
Svar som når hastighetsgrense-fasen (det vil si at autentisering og IP-hviteliste er godkjent), inkluderer:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- grensen per nøkkel som faktisk gjelder for dette kallet (60 som standard, eller din konfigurerterateLimitPerMinutehvis den er lavere).X-RateLimit-Remaining- gjenværende tokens i bøtten rett etter dette kallet.X-RateLimit-Reset- Unix-tid i sekunder da neste token blir tilgjengelig (ikke en full tilbakestilling av bøtten; bøtten fylles kontinuerlig). Når bøtten er full, er dette gjeldende tidspunkt.
Ved 429 rate_limit_exceeded-svar er Retry-After også satt, angitt i hele sekunder frem til minst ett token blir ledig.
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 - grensekontrollen konsulteres bare etter at autentisering og IP-kontroller er fullført.
Feilformat
Alle feil deler samme struktur:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Vanlige HTTP-koder:
400 invalid_request_error- feilformatert inndata (invalid_parameter)415 invalid_request_error- innholdstype støttes ikke (unsupported_media_type)401 authentication_error- manglende nøkkel (missing_api_key), ukjent nøkkel (invalid_api_key) eller tilbakekalt nøkkel (revoked_api_key)402 quota_exceeded_error- meldingskreditter er brukt opp403 permission_error- IP blokkert (ip_blocked), IP ikke i nøkkelens hviteliste (ip_not_whitelisted), eller nøkkeltypen tillater ikke dette endepunktet (key_type_not_allowed,insufficient_permissions)404 not_found_error- samtalen tilhører ikke denne boten405 invalid_request_error(method_not_allowed) - feil HTTP-metode for URL-en429 rate_limit_error- for mange forespørsler (rate_limit_exceeded) eller for mange samtidige strømmer (concurrent_streams_exceeded)500 api_error- intern feil
Relatert
For operasjoner på kontonivå (opprette boter, oppdatere boter, hente forbruk), se Management API.