Bot Talk API
„Bot Talk API“ yra REST API, skirtas bendrauti su konkrečiu pokalbių robotu tiesiai iš Jūsų programos - individualių sistemų, vidinių įrankių ar pačių sukurtų automatizacijų. Sukuriate API raktą roboto skirtuke API, o tada kviečiate pokalbio galinį tašką naudodami šį raktą kaip „Bearer“ prieigos raktą (angl. token), kad gautumėte roboto atsakymus kaip vieną pranešimą arba srautu per SSE.
Darbo pradžia
- Pasirinkite savo pokalbių robotą ir eikite į skirtuką API roboto puslapio viršuje (Select Bot > API (Pasirinkti robotą > API)).
- Spustelėkite Create API Key (Sukurti API raktą).
Šalia mygtuko esantis skaitiklis rodo, kiek raktų šiuo metu yra aktyvūs („1 of 5 API keys active“). Nuoroda View API Documentation (Peržiūrėti API dokumentaciją) atidaro šį žinyną, o Quick Start (Greita pradžia) „curl“ pavyzdys pateikia paruoštą paleisti užklausą.
- Lange Create API Key suteikite raktui pavadinimą, pasirinktinai nustatykite leistinų IP adresų sąrašą (angl. whitelist) bei užklausų limitą (angl. rate limit), pasirinkite jam suteikiamas teises ir spustelėkite Create (Sukurti).
- Nukopijuokite visą raktą iš sėkmingo sukūrimo lango. Švarus tekstas rodomas tik vieną kartą.
Raktas atrodo taip: ck_abcdefghijklmnopqrstuvwxyz012345. Kiekvienas raktas priklauso konkrečiam robotui, todėl kiekviena užklausa su šiuo raktu bendrauja būtent su juo - robotas identifikuojamas pagal raktą ir URL adrese niekada nenurodomas.
- Iš savo serverio paleiskite žemiau pateiktą „curl“ pavyzdį su savo raktu ir trumpa bandomąja žinute. Išsisaugokite gautą
conversationId, kad galėtumėte jį naudoti tolesniam pokalbiui tęsti. Atsakymą ir pokalbį galite patikrinti roboto skirtuke Chatlogs (Pokalbių žurnalai).
Laikykite ck_ raktus savo serveryje, o ne svetainės „JavaScript“ kode ar mobiliųjų programėlių paketuose. Teisė „Conversations“ suteikia prieigą prie visų šio roboto išsaugotų lankytojų pokalbių, todėl Jūsų programa privalo autorizuoti kiekvieną galutinį naudotoją prieš pateikdama šiuos duomenis. Norėdami panaikinti rakto galiojimą, API skirtuke naudokite Revoke (Panaikinti galiojimą) arba Delete (Ištrinti); nė vienas iš šių veiksmų daugiau neparodys slapto rakto teksto.
Prieš pradėdami, sukurkite ir apmokykite savo pokalbių robotą bei patikrinkite, ar Jūsų planui suteikta API prieiga ir ar turite pakankamai žinučių kreditų.
Bazinis URL
https://api.chatlab.com/aichat
Visi šiame straipsnyje aprašyti galiniai taškai yra santykiniai šio bazinio URL atžvilgiu.
Rakto teisės
Kiekvienas raktas turi vieną arba abi šias teises, kurios nustatomos langelyje „Create API Key“:
- Chat (send messages and receive responses) - leidžia pasiekti
/v1/chatir/v1/chat/streamgalinius taškus. - Conversation history (list and read past conversations) - leidžia pasiekti
/v1/conversationsgalinius taškus.
Skirtuke API kiekvieno rakto suteiktos teisės rodomos kaip Chat ir Conversations ženkliukai.
Autentifikavimas
Kiekvienoje užklausoje pateikite raktą Authorization antraštėje:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Užklausos be Authorization: Bearer ... antraštės grąžina klaidą 401 missing_api_key. Nežinomi raktai grąžina 401 invalid_api_key; anuliuoti raktai - 401 revoked_api_key. Penki neteisingi bandymai per minutę iš to paties IP adreso sukelia 60 minučių blokavimą.
Apribojimai
- Daugiausia 5 aktyvūs „Bot Talk“ raktai vienam robotui
- Daugiausia 60 užklausų per minutę vienam raktui (žetonų kibirėlis, talpa 60, tolygus pildymas po 1 žetoną per sekundę). Galima sumažinti kuriant raktą - nustatykite mažesnę
rateLimitPerMinutereikšmę ir viršutinė riba sumažės, o pildymo greitis atitinkamai prisitaikys. - Didžiausias žinutės ilgis - 4000 simbolių
- Lygiagrečių SSE srautų skaičius vienam raktui priklauso nuo Jūsų paskyros plano apribojimų
Galiniai taškai
POST /v1/chat
Išsiųskite žinutę robotui ir gaukite visą atsakymą viename JSON objekte.
Užklausos turinys (body)
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- privaloma eilutė, ne daugiau kaip 4000 simbolių.conversationId- neprivalomas UUID. Praleiskite, jei pradedate naują pokalbį; pakartotinai naudokite anksčiau serverio grąžintą reikšmę, jei norite tęsti esamą pokalbį.metadata- neprivalomas objektas, priimantis{source, userName, userEmail, userPhone}. Šiuo metu čia naudojamas tikuserEmail, kad būtų nustatytas kliento identifikatorius; kanalas užregistruojamas kaip API. Nepasikliaukite tuo, kad kiti metaduomenų laukai bus išsaugoti potencialaus kliento (lead) įraše.
Atsakymo turinys (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.rolevisada yra"assistant";message.contentyra pilnas atsakymo tekstas.modelyra modelio ID, kurį robotas naudojo šiam atsakymui generuoti.usage.creditsUsedšiuo metu nurodo 2 kreditus ir po vieną papildomą už kiekvieną įvykdytą įrankio iškvietimą per šį žingsnį. Šis atsakymo skaitiklis neapima modelio / konteksto kreditų daugiklių ir negali būti naudojamas sąskaitų apskaitai. Paskyros suvartojimui tikrinti naudokite Management API sunaudojimą ir peržiūrėkite žinučių kreditus.actionspateikia šiame žingsnyje atliktus įrankių veiksmus. Šiuo metu pateikiami tikfunction_callįrašai (sutype,name,status: "completed").
POST /v1/chat/stream
Srautinis /v1/chat variantas. Grąžina Content-Type: text/event-stream su „Server-Sent Events“ (SSE).
Užklausos turinys (body)
Tokia pati struktūra kaip ir POST /v1/chat. Lauko stream užklausos turinyje nurodyti nereikia - SSE inicijuoja pats šio kelio iškvietimas.
Atsakymo turinys (SSE įvykiai)
message.reset- anuliuoti esamam atsakymui surinktą tekstą ir pradėti kaupti fragmentus iš naujo. Tai gali nutikti, jei generavimas prasideda iš naujo; sujungus abi versijas, atsakymas dubliuotųsi arba liktų neaktualus tekstas.message.delta- turinio fragmentas{ "content": "..." }. Generuojant atsakymą, transliuojami keli tokie įvykiai, atitinkantys gaunamus žetonus.action- įrankio vykdymas{ "type", "name", "status": "executing" }. Išsiunčiamas, kai robotas aktyvuoja funkcijos iškvietimą.message.done- galutinis įvykis, kuriame pateikiamiconversationId,model,usageir (jei buvo) įvykdytųactionssąrašas.error- išsiunčiama, jei generavimas nepavyksta; po to srautas nutraukiamas.
Ilgo generavimo metu kas 15 sekundžių siunčiami ryšio palaikymo SSE komentarai (:keepalive). Serverio laukimo limitai (angl. timeouts): 30 sekundžių pirmajam žetonui, iš viso 120 sekundžių vienam srautui.
„curl“ pavyzdys
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
Pateikia visus roboto, susieto su Jūsų raktu, pokalbius iš visų šaltinių (valdiklio, „WhatsApp“, API ir kt.).
Užklausos parametrai
limit- 1-100, numatytoji reikšmė 20. Reikšmės už šio rėžio ribų automatiškai priderinamos.cursor- identifikatorius, grąžintas ankstesnio puslapio laukenextCursor. Pirmam puslapiui praleiskite.
Atsakymo turinys (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
}
lastMessagePreviewyra sutrumpintas iki 100 simbolių su galūne....- Paskutiniame puslapyje
nextCursorreikšmė yranull; perduokite ją kaipcursor, kad gautumėte kitą puslapį.
GET /v1/conversations/{conversation_id}
Šis galinis taškas pateikia išsaugotas pokalbio žinutes.
Atsakymo turinys (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"}
]
}
Grąžinamos tik user ir assistant rolių žinutės; vidiniai system pranešimai ir įrankių iškvietimai yra išfiltruojami. Jei pokalbis nepriklauso robotui, susietam su Jūsų raktu, grąžinama klaida 404 not_found_error.
Norėdami peržiūrėti roboto konfigūraciją, naudokite „Management API“ galinį tašką GET /v1/management/bots/{bot_id} kartu su valdymo raktu.
Užklausų ribojimo antraštės
Atsakymuose, kurie pasiekia užklausų ribojimo etapą (t. y. sėkmingai praeina autentifikavimą ir IP sąrašo patikrą), pateikiamos šios antraštės:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- šiam iškvietimui faktiškai pritaikyta riba vienam raktui (pagal numatytuosius nustatymus 60, arba mažesnė, jei sukonfigūravoterateLimitPerMinute).X-RateLimit-Remaining- likęs žetonų skaičius iškart po šio iškvietimo.X-RateLimit-Reset- „Unix epoch“ laikas sekundėmis, kada taps prieinamas kitas žetonas (tai nėra pilnas limito atstatymas; rezervas pildomas nuolatos). Kai rezervas pilnas, čia rodomas dabartinis laikas.
Esant 429 rate_limit_exceeded atsakymams, taip pat nustatoma antraštė Retry-After, kurioje sveikomis sekundėmis nurodoma, kiek laiko liko palaukti, kol atsilaisvins bent vienas žetonas.
Klaidos prieš autentifikavimą (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) ir 403 ip_not_whitelisted neturi X-RateLimit-* antraščių - limitų tikrinimas atliekamas tik po to, kai sėkmingai praeina autentifikavimas ir IP patikros.
Klaidų formatas
Visos klaidos pateikiamos bendru formatu:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Dažniausi HTTP klaidų kodai:
400 invalid_request_error- neteisingai suformuota užklausa (invalid_parameter)415 invalid_request_error- nepalaikomas turinio tipas (unsupported_media_type)401 authentication_error- trūksta rakto (missing_api_key), nežinomas raktas (invalid_api_key) arba panaikintas raktas (revoked_api_key)402 quota_exceeded_error- išnaudoti žinučių kreditai403 permission_error- IP užblokuotas (ip_blocked), IP nėra leistinų adresų sąraše (ip_not_whitelisted) arba rakto tipas neleidžia naudoti šio galinio taško (key_type_not_allowed,insufficient_permissions)404 not_found_error- pokalbis nepriklauso šiam robotui405 invalid_request_error(method_not_allowed) - netinkamas HTTP metodas nurodytam URL429 rate_limit_error- viršytas užklausų skaičius (rate_limit_exceeded) arba per daug lygiagrečių srautų (concurrent_streams_exceeded)500 api_error- vidinė serverio klaida
Susijęs turinys
Paskyros lygio operacijoms (robotų kūrimui, jų atnaujinimui, suvartojimo peržiūrai) skaitykite Management API.