API Reference — chkuiskolopi.ge

Base URL: https://api.chkuiskolopi.ge/api/scrap/

ეს დოკუმენტი ორი ნაწილისგან შედგება:


ავტორიზაცია — მიმოხილვა

API-ში ოთხი სხვადასხვა ავტორიზაციის სქემაა გამოყენებული. ყოველი endpoint-ის ცხრილში მითითებულია, რომელი ვრცელდება მასზე.

სქემა სად გამოიყენება რა იცვლება
JWT Header: Authorization: Bearer <token> რეგისტრირებული მომხმარებლისთვის. ვადაგასული → 401.
Device fingerprint Body: deviceInfo.device_name + deviceInfo.ip_address სტუმრებისთვის. ლიმიტი — 15 query/დღე.
partner_key Body: partner_key (UUID) მხოლოდ widget endpoint-ისთვის. პარტნიორის ბალანსიდან ჭრის.
Webhook signature SHA1 (Flitt), verify_token (Messenger) მხოლოდ შემომავალი webhook-ებისთვის.

„Hybrid auth" ნიშნავს, რომ endpoint ჯერ JWT-ს ეძებს header-ში; თუ არ არის, fallback-ად იყენებს device fingerprint-ს body-დან.


შეცდომების ფორმატი

ყველა შეცდომა ბრუნდება JSON-ით:

{ "error": "<message>" }

ან:

{ "message": "<message>" }

ძირითადი status code-ები: 400 (missing/invalid params), 401 (auth), 402 (balance), 404 (resource), 429 (guest limit), 500 (server).


ნაწილი I — Public API (პარტნიორი ინტეგრატორებისთვის)

პარტნიორებისთვის ხელმისაწვდომია ბოტი ორი გზით: widget-ის embed (მარტივი) ან პირდაპირი API call (მოქნილი). ორივე იყენებს partner_key-ს — UUID, რომელიც პარტნიორის ბალანსს უკავშირდება.


1.1. Widget Embed — GET /widget.js

ჩაშენებული ჩატის widget. ერთი <script> ტეგი საიტზე — და ხელში მარჯვენა კუთხეში ჩატის ღილაკი გამოჩნდება.

ველი მნიშვნელობა
Method GET
Auth არ მოწმდება server-side. partner_key მხოლოდ კლიენტ-side გადადის.
Query key=<UUID> — partner_key
Response 200 OK, Content-Type: application/javascript

გამოყენება

<script src="https://api.chkuiskolopi.ge/api/scrap/widget.js?key=YOUR_PARTNER_KEY"></script>

ეს ერთი ხაზი საკმარისია. ჩატის ღილაკი (#sa-widget-btn) ავტომატურად დაემატება გვერდს. შიგნით widget იძახებს widget/query/-ს (იხ. ქვემოთ).


1.2. Direct Query — POST /widget/query/

თუ პარტნიორს უნდა საკუთარი UI-ით ან server-side-ით საუბრის გამოძახება — პირდაპირ ამ endpoint-ს იძახებს.

ველი მნიშვნელობა
Method POST
Auth partner_key body-ში (required). JWT საჭირო არ არის.
Content-Type application/json

Request body

ველი ტიპი required აღწერა
partner_key string (UUID) პარტნიორის API key
query string მომხმარებლის შეკითხვა
session_id string სესიის ID (პარტნიორი ქმნის — მაგ. UUID per visitor)
file_Ids array მიბმული ფაილების ID-ები (default: [])
deviceInfo object {device_name, ip_address}

Response — 200 OK

{
  "response": "ბოტის ტექსტური პასუხი",
  "DocumentLinks": [],
  "chat_id": 12345,
  "lawyer_info": null,
  "sandbox_url": null
}

შეცდომები

Code მიზეზი
400 partner_key მისამართის გარეშე, query ან session_id ცარიელია
401 invalid partner_key
402 partner balance < 5

მაგალითი

curl -X POST https://api.chkuiskolopi.ge/api/scrap/widget/query/ \
  -H "Content-Type: application/json" \
  -d '{
    "partner_key": "11111111-2222-3333-4444-555555555555",
    "query": "გამარჯობა",
    "session_id": "visitor-abc-123"
  }'

ბილინგი: ყოველი წარმატებული query-ი პარტნიორის ბალანსიდან ჭრის (არა მომხმარებლის). ბალანსის შევსება ხდება ცალკე — დაუკავშირდით ადმინისტრაციას.


ნაწილი II — Internal API (Frontend / Mobile / Webhooks)

ეს ნაწილი იყენებენ chkuiskolopi.ge-ის საკუთარი ფრონტენდი, მობილური აპლიკაცია, და გადახდის სერვისების webhook-ები. გარე ინტეგრატორებისთვის არ არის განკუთვნილი.


2.1. ჩატი და სესიები

POST /query/ — მთავარი query endpoint

ფრონტენდიდან ბოტთან საუბრის ძირითადი endpoint.

ველი მნიშვნელობა
Method POST
Auth Hybrid (JWT ან device fingerprint)
Content-Type application/json

Request body:

ველი ტიპი required
query string
session_id string
file_Ids array
deviceInfo object — (sub: device_name, ip_address)

Response 200:

{
  "response": "...",
  "DocumentLinks": [],
  "chat_id": 12345,
  "lawyer_info": null,
  "sandbox_url": null
}

Error codes: 400 (missing fields), 401 (token expired), 402 (balance < 5), 404 (user), 429 (guest daily limit hit), 500.

Side effects: იწერება ChatHistory, ბალანსი ჭრება (paid user), იძახება xAI Grok + OpenAI translate.


GET /sessions/ — სესიების ჩამონათვალი

ველი მნიშვნელობა
Method GET
Auth პირობითი: თუ session_id query param მითითებულია → public. წინააღმდეგ შემთხვევაში → JWT required.

Query params: session_id (optional)

Response 200: ChatHistorySerializer array (shared view) ან მომხმარებლის სესიების სია.

Errors: 400 (auth missing), 401, 404 (no shared chat).


GET /chats/ — ერთი სესიის ისტორია

ველი მნიშვნელობა
Method GET
Auth Session-based (მხოლოდ session_id-ით — ჩატის გასაზიარებლად)

Query params: session_id (required)

Response 200: timeline array — [{session_id, text, sender, timestamp, DocumentLinks, files, chat_id, feedback, lawyer_info}]

Errors: 400 (missing session_id), 404.


2.2. ფაილების მართვა

POST /upload/ — ფაილების ატვირთვა

ველი მნიშვნელობა
Method POST
Auth Hybrid
Content-Type multipart/form-data

Form fields:

ველი ტიპი required
files file[]
session_id string
device_name string
ip_address string

Allowed extensions: txt, pdf, jpg, jpeg, png, gif, webp, docx, doc, xlsx, xls, csv, pptx, ppt, html, json, md, py, c, cpp, java, xml, zip, mp3, wav, m4a

Response 201: FileInfoSerializer array. Response 207: {uploaded_files, failed_uploads} — ნაწილობრივი წარმატება.

Side effects: AWS S3 upload, OpenAI Files upload. ხმოვანი ფაილებისთვის — AWS Transcribe.


POST /list_documents/ — ფაილების სია

ველი მნიშვნელობა
Method POST (სახელის მიუხედავად)
Auth Hybrid

Query params: page (int, default 1), page_size (int, default 10) Body: deviceInfo (object)

Response 200:

{
  "total_pages": 3,
  "current_page": 1,
  "page_size": 10,
  "total_items": 27,
  "results": [/* FileInfoSerializer + file_size + file_id */]
}

PATCH /delete_document/ — ფაილის წაშლა (soft)

ველი მნიშვნელობა
Method PATCH
Auth Hybrid (JWT ან device fingerprint) + ownership check

Query params: file_id (required)

Response 200: FileInfoSerializer. Errors: 400, 401, 404.

Side effects: is_deleted=True (DB-ში რჩება).


2.3. Feedback და Email

POST /chat-history/feedback/<chat_id>/

ველი მნიშვნელობა
Method POST
Auth Hybrid (JWT ან device fingerprint) + ownership check

Path: chat_id (int) Body: action ("like" | "dislike")

Response: {message: "..."}

Errors: 401, 404.


POST /chat-history/send-email/<chat_id>/

ველი მნიშვნელობა
Method POST
Auth JWT optional (გამოიყენება მხოლოდ user_email-ის ამოსაკითხად — სტუმარს "Guest User" გადაეცემა)

Path: chat_id Body: feedback (optional, default "None")

Response 200: {message: "Email sent successfully."} Side effects: იგზავნება email DEFAULT_FROM_EMAIL-ზე.


POST /feedback/technical/

ველი მნიშვნელობა
Method POST
Auth JWT optional

Body: feedback (string, required)

Response 200: {message: "Technical feedback submitted successfully."}


2.4. სესიის მართვა

POST /chat-session-action/

ველი მნიშვნელობა
Method POST
Auth Hybrid (JWT ან device fingerprint) + ownership check

Body:

ველი ტიპი required
action "delete" | "rename"
session_id string
new_name string ✓ (მხოლოდ rename-ისთვის)

Response: {message: "..."}


POST /link-sessions/

guest user-ის სესიის გადატანა რეგისტრირებულ მომხმარებელზე ლოგინის შემდეგ.

ველი მნიშვნელობა
Method POST
Auth Hybrid (JWT უპირატესი, fallback — device_info)

Body:

ველი ტიპი required
session_id string
new_session_id string
device_info object

Response 200: {message, new_session_id}


2.5. ბალანსი და გადახდები

POST /get-user-balance/

ველი მნიშვნელობა
Method POST
Auth JWT required

Body: არ მოიხმარება.

Response: {balance: 12.50}


POST /recharge/smart-router/რეკომენდირებული შევსების endpoint

ავტომატურად ირჩევს გადახდის გზას მომხმარებლის ლოკაციით (GE → Flitt GEL, სხვა → PayPal).

ველი მნიშვნელობა
Method POST
Auth JWT required

Body:

ველი ტიპი required
amount float (USD) ✓ (≥ 10)
paymentMethod string — (მხოლოდ არა-GE-ისთვის)

Response 200 (GE მომხმარებელი):

{
  "status": "success",
  "gateway": "flitt_gel",
  "payment_url": "https://pay.flitt.com/...",
  "amount_gel": 27.50,
  "currency": "GEL",
  "conversion_rate": 2.75
}

არა-GE-ისთვის — გადასცემს recharge/initiate/ (PayPal) ან flitt/recharge/-ს.


POST /recharge/initiate/ — PayPal-ის ინიცირება

ველი მნიშვნელობა
Method POST
Auth JWT required

Body: amount (≥ 10)

Response 200: {approval_url: "https://www.paypal.com/..."}


POST /recharge/success/ — PayPal callback-ის შემდეგ ფრონტიდან

ველი მნიშვნელობა
Method POST
Auth არ მოწმდება (paymentId/payer_id გასაღებებად)

Body: paymentId, payer_id

Response 200: {message, new_balance}


POST /flitt/recharge/ — Flitt-ის ინიცირება (USD direct)

ველი მნიშვნელობა
Method POST
Auth JWT required

Body: amount (USD, ≥ 10)

Response 200:

{
  "success": true,
  "payment_id": "...",
  "order_id": "...",
  "checkout_url": "https://pay.flitt.com/...",
  "transaction_id": "..."
}

GET/POST /flitt/return/ — Flitt-ის redirect endpoint

Flitt-ი ბრაუზერს გადამისამართებს აქ, ეს კი redirect-ით აგზავნის ფრონტენდზე.

Response: 302 → https://chkuiskolopi.ge/payment-success?<params>

შენიშვნა: ხელმისაწვდომია trailing slash-იანი (/flitt/return/) და უ-slash-ო (/flitt/return) — ერთი და იგივე handler.


2.6. შემომავალი Webhook-ები

ეს endpoint-ები გარე სერვისებიდან გამოიძახება. ფრონტენდიდან მათი გამოყენება არ არის საჭირო.

POST /flitt/callback/ და /flitt/callback

Flitt-ის გადახდის შედეგების webhook.

ველი მნიშვნელობა
Method POST (CSRF exempt)
Auth SHA1 signature (currency-specific shared secret)

Side effects: RechargeTransaction.status განახლდება, user.update_balance ეშვება.


GET/POST /messenger/webhook/ — Facebook Messenger

ველი მნიშვნელობა
Method GET (verify) + POST (events)
Auth Facebook-ის verify_token (GET) + webhook events (POST)

GET response: <challenge> plain text თუ verify_token სწორია. POST response: "EVENT_RECEIVED".


GET /facebook/callback/ — FB OAuth callback

OAuth code-ის მისაღები endpoint.


POST /telegram/webhook/

ველი მნიშვნელობა
Method POST
Auth Telegram Bot API webhook

Response: 200 "OK".


დანართი: ცნობარი

ყველა endpoint-ის სია

# Path Method Auth
1 /query/ POST Hybrid
2 /sessions/ GET Conditional
3 /chats/ GET Session-based
4 /upload/ POST Hybrid
5 /list_documents/ POST Hybrid
6 /delete_document/ PATCH Hybrid + ownership
7 /chat-history/feedback/<chat_id>/ POST Hybrid + ownership
8 /chat-history/send-email/<chat_id>/ POST JWT optional
9 /feedback/technical/ POST JWT optional
10 /chat-session-action/ POST Hybrid + ownership
11 /link-sessions/ POST Hybrid
12 /recharge/initiate/ POST JWT
13 /recharge/success/ POST Payment token
14 /get-user-balance/ POST JWT
15 /recharge/smart-router/ POST JWT
16 /flitt/recharge/ POST JWT
17–18 /flitt/callback/ & /flitt/callback POST Signature
19–20 /flitt/return/ & /flitt/return GET/POST Payment token
21 /widget.js GET Public
22 /widget/query/ POST partner_key
23 /messenger/webhook/ GET/POST FB webhook
24 /facebook/callback/ GET OAuth
25 /telegram/webhook/ POST TG webhook

გარე სერვისები

ბექენდი ინტეგრირებულია შემდეგი მესამე-მხარის სერვისებთან: xAI Grok, OpenAI, AWS, Google Vision, PayPal, Flitt, NBG (გაცვლითი კურსი).