Bot Talk API
Bot Talk API je REST API za komunikaciju sa jednim konkretnim chatbotom iz Vaše sopstvene aplikacije - prilagođenih aplikacija, internih alata ili automatizacija koje sami napravite. Kreirate API ključ na kartici API bota, a zatim pozivate chat krajnju tačku sa ključem kao Bearer tokenom da biste dobili odgovore bota, bilo kao pojedinačni odgovor ili strimovano putem SSE-a.
Prvi koraci
- Izaberite svog chatbota i idite na karticu API na vrhu stranice bota (Select Bot > API (Izaberi bota > API)).
- Kliknite na Create API Key (Kreiraj API ključ).
Brojač pored dugmeta prikazuje koliko je ključeva aktivno ("1 of 5 API keys active"). Link View API Documentation (Pogledaj API dokumentaciju) otvara ovu referencu, a curl isečak Quick Start (Brzi početak) daje Vam primer spreman za pokretanje.
- U dijalogu Create API Key (Kreiraj API ključ), dajte ključu naziv, opciono podesite belu listu IP adresa i ograničenje brzine (rate limit), izaberite dozvole koje ima, a zatim kliknite na Create (Kreiraj).
- Kopirajte ceo ključ iz dijaloga o uspešnom kreiranju. Čist tekst ključa se prikazuje samo jednom.
Ključ izgleda ovako: ck_abcdefghijklmnopqrstuvwxyz012345. Svaki ključ pripada tom jednom botu, tako da svaki zahtev upućen sa ovim ključem komunicira sa tim botom - bot se identifikuje putem ključa i nikada se ne pojavljuje u URL-u.
Osnovni URL
https://api.chatlab.com/aichat
Sve krajnje tačke u ovom članku su relativne u odnosu na ovaj osnovni URL.
Dozvole ključa
Svaki ključ nosi jednu ili obe ove dozvole, podešene pomoću prekidača u dijalogu Create API Key:
- Chat (send messages and receive responses) - omogućava krajnje tačke
/v1/chati/v1/chat/stream. - Conversation history (list and read past conversations) - omogućava krajnje tačke
/v1/conversations.
Kartica API prikazuje dodeljene dozvole svakog ključa kao oznake Chat i Conversations.
Autentifikacija
Pošaljite ključ u zaglavlju Authorization pri svakom zahtevu:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Zahtevi bez zaglavlja Authorization: Bearer ... vraćaju 401 missing_api_key. Nepoznati ključevi vraćaju 401 invalid_api_key; opozvani ključevi vraćaju 401 revoked_api_key. Pet nevažećih pokušaja u jednom minutu sa iste IP adrese pokreću blokadu od 60 minuta.
Ograničenja
- Maksimalno 5 aktivnih Bot Talk ključeva po botu
- Maksimalno 60 zahteva u minutu po ključu (token bucket, kapacitet 60, ravnomerno dopunjavanje od 1 tokena u sekundi). Može se konfigurisati na manju vrednost prilikom kreiranja - podesite niži
rateLimitPerMinutei gornja granica opada, a brzina dopunjavanja se usklađuje sa njom. - Maksimalna dužina poruke 4000 znakova
- Istovremeni SSE strimovi po ključu podležu ograničenjima Vašeg naloga
Krajnje tačke
POST /v1/chat
Pošaljite poruku botu i primite ceo odgovor u jednom JSON odgovoru.
Telo zahteva
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- obavezan string, maksimalno 4000 znakova.conversationId- opcioni UUID. Izostavite za novi razgovor; ponovo upotrebite vrednost koju je server prethodno vratio da biste se nadovezali na postojeći.metadata- opcioni objekat:{source, userName, userEmail, userPhone}.userEmailse takođe koristi za izvođenje internog ID-ja klijenta.
Telo odgovora (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.roleje uvek"assistant";message.contentje ceo odgovor.modelje ID modela na kom je bot radio za ovaj poziv.usage.creditsUsedobuhvata poruku korisnika + odgovor bota (obično 2), plus jedan dodatni kredit po izvršenom pozivu alata.actionsnavodi izvršavanja alata koja su pokrenuta tokom ovog koraka. Trenutno se emituju samo stavkefunction_call(satype,name,status: "completed").
POST /v1/chat/stream
Striming varijanta krajnje tačke /v1/chat. Vraća Content-Type: text/event-stream sa Server-Sent Events.
Telo zahteva
Isti format kao POST /v1/chat. Oznaka stream u telu nije potrebna - korišćenje ove putanje je ono što pokreće SSE.
Telo odgovora (SSE događaji)
message.delta- fragment sadržaja{ "content": "..." }. Više ovih se strimuje kako tokeni pristižu.action- izvršenje alata{ "type", "name", "status": "executing" }. Emituje se kada bot pokrene poziv funkcije.message.done- završni događaj sa parametrimaconversationId,model,usagei (ako ih ima) završenom listomactions.error- šalje se ako generisanje ne uspe; strim se nakon toga prekida.
SSE komentari za održavanje veze (:keepalive) šalju se na svakih 15 sekundi tokom dugih generisanja. Vremenska ograničenja na strani servera: 30 sekundi za prvi token, 120 sekundi ukupno po strimu.
Curl primer
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
Izlistajte razgovore za bota povezanog sa Vašim ključem, sa svih izvora (widget, WhatsApp, API, itd).
Parametri upita
limit- 1-100, podrazumevano 20. Vrednosti izvan ovog opsega se fiksiraju na granice.cursor- neprozirna vrednost vraćena unextCursorna prethodnoj stranici. Izostavite za prvu stranicu.
Telo odgovora (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
}
lastMessagePreviewse skraćuje na 100 znakova sa sufiksom....nextCursorjenullna poslednjoj stranici; prosledite ga kaocursorza preuzimanje sledeće.
GET /v1/conversations/{conversation_id}
Kompletna istorija razgovora.
Telo odgovora (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"}
]
}
Vraćaju se samo uloge user i assistant; interne poruke system i poruke alata se filtriraju. Vraća 404 not_found_error ako razgovor ne pripada botu koji je povezan sa Vašim ključem.
Da biste pregledali konfiguraciju bota, koristite krajnju tačku Management API-ja GET /v1/management/bots/{bot_id} sa Management ključem.
Zaglavlja ograničenja brzine (rate limit)
Odgovori koji dođu do faze provere ograničenja brzine (odnosno, prošli su autentifikaciju i belu listu IP adresa) sadrže:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- gornja granica po ključu koja je zapravo primenjena na ovaj poziv (podrazumevano 60, ili Vaš konfigurisanirateLimitPerMinuteako je niži).X-RateLimit-Remaining- preostali tokeni u skladištu (bucket) neposredno nakon ovog poziva.X-RateLimit-Reset- Unix epoch sekunde u kojima sledeći token postaje dostupan (nije potpuno resetovanje skladišta; ono se dopunjava neprekidno). Kada je skladište puno, ovo je trenutno vreme.
U odgovorima 429 rate_limit_exceeded, takođe je postavljeno zaglavlje Retry-After, izraženo u celim sekundama dok se ne oslobodi bar jedan token.
Greške pre autentifikacije (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) i 403 ip_not_whitelisted ne sadrže zaglavlja X-RateLimit-* - mehanizam ograničenja se proverava tek nakon uspešne autentifikacije i provera IP adrese.
Format grešaka
Sve greške dele isti format:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Uobičajeni HTTP kodovi:
400 invalid_request_error- neispravan unos (kodovi:invalid_parameter,unsupported_media_type)401 authentication_error- nedostaje ključ (missing_api_key), nepoznat ključ (invalid_api_key) ili opozvan ključ (revoked_api_key)402 quota_exceeded_error- iskorišćeni krediti za poruke403 permission_error- IP adresa je blokirana (ip_blocked), IP adresa nije na beloj listi ključa (ip_not_whitelisted) ili tip ključa ne dozvoljava ovu krajnju tačku (key_type_not_allowed,insufficient_permissions)404 not_found_error- razgovor ne pripada ovom botu405 invalid_request_error(method_not_allowed) - pogrešan HTTP glagol na URL-u429 rate_limit_error- previše zahteva (rate_limit_exceeded) ili previše istovremenih strimova (concurrent_streams_exceeded)500 api_error- interna greška
Povezano
Za operacije na nivou naloga (kreiranje botova, ažuriranje botova, pregled potrošnje), pogledajte Management API.