Bot Talk API
Bot Talk API on REST-rajapinta, jonka avulla voit keskustella tietyn chatbotin kanssa suoraan omasta sovelluksestasi käsin - olipa kyseessä räätälöity sovellus, sisäinen työkalu tai itse rakentamasi automaatio. Luot API-avaimen botin API-välilehdellä ja kutsut sen jälkeen chat-päätepistettä käyttäen avainta Bearer-tokenina saadaksesi botin vastaukset, joko yksittäisenä vastauksena tai SSE-yhteyden yli suoratoistettuna (stream).
Aloittaminen
- Valitse chatbotisi ja siirry sivun yläreunassa olevalle API-välilehdelle (Select Bot > API (Valitse botti > API)).
- Napsauta Create API Key (Luo API-avain).
Painikkeen vieressä oleva laskuri näyttää, kuinka monta avainta on aktiivisena ("1 of 5 API keys active"). Linkki View API Documentation (Näytä API-dokumentaatio) avaa tämän ohjeen, ja Quick Start (Pika-aloitus) -curl-koodinpätkä tarjoaa heti suoritettavan esimerkin.
- Anna avaimelle nimi Create API Key -valintaikkunassa, määritä halutessasi IP-osoitteiden sallittujen lista (whitelist) ja pyyntöjen enimmäismäärä (rate limit), valitse sen käyttöoikeudet ja napsauta sitten Create (Luo).
- Kopioi koko avain onnistumisilmoituksesta. Selkokielinen avain näytetään vain kerran.
Avain näyttää tältä: ck_abcdefghijklmnopqrstuvwxyz012345. Jokainen avain kuuluu kyseiselle yhdelle botille, joten kaikki avaimella tehdyt pyynnöt ohjautuvat tälle botille - botti tunnistetaan avaimen perusteella, eikä se näy koskaan URL-osoitteessa.
Perus-URL
https://api.chatlab.com/aichat
Kaikki tämän artikkelin päätepisteet ovat suhteessa tähän perus-URL-osoitteeseen.
Avainten käyttöoikeudet
Jokaisella avaimella on toinen tai molemmat näistä käyttöoikeuksista, jotka määritetään Create API Key -ikkunan valitsimilla:
- Chat (send messages and receive responses) - sallii päätepisteet
/v1/chatja/v1/chat/stream. - Conversation history (list and read past conversations) - sallii päätepisteet
/v1/conversations.
API-välilehti näyttää kullekin avaimelle myönnetyt luvat Chat- ja Conversations-tunnisteina.
Todennus
Lähetä avain Authorization-otsakkeessa jokaisessa pyynnössä:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Pyynnöt ilman Authorization: Bearer ... -otsaketta palauttavat virheen 401 missing_api_key. Tuntemattomat avaimet palauttavat virheen 401 invalid_api_key; kumotut avaimet palauttavat virheen 401 revoked_api_key. Viisi virheellistä yritystä minuutin sisällä samasta IP-osoitteesta johtaa 60 minuutin estoon.
Rajoitukset
- Enintään 5 aktiivista Bot Talk -avainta per botti
- Enintään 60 pyyntöä minuutissa avainta kohden (token bucket, kapasiteetti 60, tasainen täyttyminen 1 tokeni per sekunti). Määritettävissä pienemmäksi luontivaiheessa - aseta alempi
rateLimitPerMinute, jolloin katto laskee ja täyttönopeus skaalautuu sen mukana. - Viestin enimmäispituus 4 000 merkkiä
- Samanaikaisten SSE-streamien määrä avainta kohden riippuu tilisi rajoituksista
Päätepisteet
POST /v1/chat
Lähetä viesti botille ja vastaanota koko vastaus yhtenä JSON-vastauksena.
Pyynnön runko
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- pakollinen merkkijono, enintään 4 000 merkkiä.conversationId- valinnainen UUID. Jätä pois aloittaaksesi uuden keskustelun; käytä palvelimen aiemmin palauttamaa arvoa jatkaaksesi olemassa olevaa keskustelua.metadata- valinnainen objekti:{source, userName, userEmail, userPhone}.userEmail-kenttää käytetään myös sisäisen asiakastunnisteen johtamiseen.
Vastauksen runko (200)
{
"message": {"role": "assistant", "content": "Sure, what's your order number?"},
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"model": "gpt-4o-mini",
"usage": {"creditsUsed": 2},
"actions": []
}
message.roleon aina"assistant";message.contenton koko vastaus.modelon sen mallin tunniste, jolla botti suoritti tämän kutsun.usage.creditsUsedhuomioi käyttäjän viestin + botin vastauksen (yleensä 2) sekä yhden ylimääräisen creditin jokaista suoritettua työkalukutsua kohden.actionslistaa työkalujen suoritukset, jotka tapahtuivat tämän vuoron aikana. Tällä hetkellä palautetaan vainfunction_call-merkintöjä (kenttinätype,name,status: "completed").
POST /v1/chat/stream
/v1/chat-päätepisteen suoratoistoversio. Palauttaa otsakkeen Content-Type: text/event-stream käyttäen Server-Sent Events -tapahtumia.
Pyynnön runko
Samanmuotoinen kuin POST /v1/chat. Rungon stream-lippua ei tarvita - tämän polun käyttäminen käynnistää SSE:n automaattisesti.
Vastauksen runko (SSE-tapahtumat)
message.delta- sisältöfragmentti{ "content": "..." }. Näitä saapuu useita peräkkäin sitä mukaa kuin tokeneita muodostuu.action- työkalun suoritus{ "type", "name", "status": "executing" }. Lähetetään, kun botti käynnistää funktiokutsun.message.done- päättävä tapahtuma, joka sisältää kentätconversationId,model,usageja (mahdollisen) suoritettujen toimintojen listanactions.error- lähetetään, jos vastauksen luominen epäonnistuu; yhteys katkaistaan tämän jälkeen.
Yhteyttä ylläpitäviä SSE-kommentteja (:keepalive) lähetetään 15 sekunnin välein pitkien vastausten luomisen aikana. Palvelinpuolen aikakatkaisut: 30 sekuntia ensimmäiselle tokenille, 120 sekuntia yhteensä yhtä streamia kohden.
Curl-esimerkki
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
Listaa avaimeesi liitetyn botin keskustelut kaikista lähteistä (widget, WhatsApp, API jne.).
Kyselyparametrit
limit- 1-100, oletusarvo 20. Alueen ulkopuolella olevat arvot rajataan sallittuun väliin.cursor- edellisellä sivulla kentässänextCursorpalautettu arvo. Jätä pois ensimmäisellä sivulla.
Vastauksen runko (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
}
lastMessagePreviewkatkaistaan 100 merkkiin ja sen perään lisätään....nextCursoronnullviimeisellä sivulla; anna secursor-parametrina hakeaksesi seuraavan sivun.
GET /v1/conversations/{conversation_id}
Koko keskusteluhistoria.
Vastauksen runko (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"}
]
}
Vastauksessa palautetaan vain roolit user ja assistant; sisäiset system- ja työkaluviestit suodatetaan pois. Palauttaa virheen 404 not_found_error, jos keskustelu ei kuulu avaimeesi liitetylle botille.
Jos haluat tarkastella botin asetuksia ja määrityksiä, käytä Management API:n päätepistettä GET /v1/management/bots/{bot_id} Management-avaimella.
Pyyntörajojen otsakkeet
Vastaukset, jotka etenevät pyyntörajojen tarkistusvaiheeseen (eli todennus ja IP-sallittujen lista on hyväksytty), sisältävät seuraavat otsakkeet:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- tälle kutsulle todellisuudessa sovellettu avainkohtainen enimmäismäärä (oletuksena 60 tai määrittämäsi alempirateLimitPerMinute).X-RateLimit-Remaining- jäljellä olevat tokenit heti tämän kutsun jälkeen.X-RateLimit-Reset- Unix-aikaleima sekunteina, jolloin seuraava tokeni on käytettävissä (ei koko kapasiteetin nollautuminen; tokenit täydentyvät jatkuvasti). Kun säiliö on täynnä, tämä vastaa nykyistä aikaa.
Vastauksissa 429 rate_limit_exceeded lähetetään myös Retry-After-otsake, joka ilmoittaa kokonaisina sekunteina ajan, kunnes vähintään yksi tokeni vapautuu.
Todennusta edeltävät virheet (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) ja 403 ip_not_whitelisted eivät sisällä X-RateLimit-*-otsakkeita - rajoitinta tarkistetaan vasta todennuksen ja IP-tarkistusten onnistuttua.
Virhemuoto
Kaikki virheet noudattavat samaa perusrakennetta:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Yleisimmät HTTP-tilakoodit:
400 invalid_request_error- virheellinen syöte (koodit:invalid_parameter,unsupported_media_type)401 authentication_error- puuttuva avain (missing_api_key), tuntematon avain (invalid_api_key) tai kumottu avain (revoked_api_key)402 quota_exceeded_error- viesticreditit loppu403 permission_error- IP-osoite estetty (ip_blocked), IP-osoite ei ole avaimen sallittujen listalla (ip_not_whitelisted) tai avaintyyppi ei salli tätä päätepistettä (key_type_not_allowed,insufficient_permissions)404 not_found_error- keskustelu ei kuulu tälle botille405 invalid_request_error(method_not_allowed) - väärä HTTP-verbi URL-osoitteessa429 rate_limit_error- liian monta pyyntöä (rate_limit_exceeded) tai liian monta samanaikaista streamia (concurrent_streams_exceeded)500 api_error- sisäinen virhe
Aiheeseen liittyvää
Tilintason toimenpiteitä (bottien luominen, päivittäminen ja kulutustietojen nouto) varten katso Management API.