ZaminDocs

Bot API asoslari

Bot API β€” oddiy HTTPS interfeys. Har bir metod bitta URL; parametrlar query, JSON, form yoki multipart orqali yuboriladi; javob doim JSON.

So'rov manzili

Matn
https://api.zamin.app/bot<TOKEN>/<metod>

Masalan: https://api.zamin.app/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe. Metod nomi katta-kichik harfga sezgir emas (getMe = getme), lekin hujjatdagidek yozish tavsiya etiladi.

GET yoki POST

Har bir metod GET va POST bilan ishlaydi. Parametrlarni quyidagi usullardan biri bilan yuboring:

UsulContent-TypeQachon
Query satriβ€”Oddiy GET so'rovlar: ?chat_id=…&text=…
JSONapplication/jsonTavsiya etiladi. reply_markup va massivlarni obyekt sifatida yuborasiz.
Formapplication/x-www-form-urlencodedKo'p kutubxonalar shunday yuboradi.
Multipartmultipart/form-dataFayl yuklash (sendPhoto, sendDocument, …). Bitta fayl, ≀12 maydon.
  • Query, form va multipart'da murakkab qiymatlar (reply_markup, commands, allowed_updates) JSON matn sifatida yuboriladi.
  • Mantiqiy qiymatlar: true/false, matnda "true", "false", "1", "0".
  • Butun sonlar: son yoki raqamli matn (16 xonagacha).
  • Noma'lum parametrlar xato bermaydi, shunchaki e'tiborga olinmaydi.
  • JSON va form tanasi ≀64 KB; multipart'dagi har bir matn maydoni ≀64 KB; fayl ≀50 MB (rasm ≀20 MB).
Python
import os
import requests

TOKEN = os.environ["ZAMIN_BOT_TOKEN"]
API = f"https://api.zamin.app/bot{TOKEN}"

# JSON
requests.post(f"{API}/sendMessage", json={"chat_id": 4810235517, "text": "Salom"}, timeout=15)

# Query satri (GET)
requests.get(f"{API}/sendMessage", params={"chat_id": 4810235517, "text": "Salom"}, timeout=15)
curl
# JSON
curl -s -X POST "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 4810235517, "text": "Salom"}'

# Query satri (GET)
curl -s "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendMessage?chat_id=4810235517&text=Salom"

Javob shakli

Muvaffaqiyatli javob:

JSON
{
  "ok": true,
  "result": { "id": 1000001, "is_bot": true, "first_name": "Ob-havo", "username": "ObHavoBot" }
}

Xato:

JSON
{
  "ok": false,
  "error_code": 400,
  "description": "Bad Request: chat not found"
}

429 javobida qo'shimcha parameters.retry_after (soniya) bo'ladi. Bu har bir limit uchun bir xil shakl:

JSON
{
  "ok": false,
  "error_code": 429,
  "description": "Too Many Requests: retry after 3",
  "parameters": { "retry_after": 3 }
}

HTTP status kodi error_code bilan bir xil. Parametr tekshiruvi xatolarida tavsif Bad Request: <maydon>: <sabab> ko'rinishida bo'ladi, masalan Bad Request: text: message text is empty.

Autentifikatsiya va token

Token so'rov manzilida bo'ladi β€” boshqa sarlavha yoki kalit kerak emas. Token ko'rinishi: <bot_id>:<36 ta url-safe belgi> (A-Z a-z 0-9 _ -).

  • Noto'g'ri yoki bekor qilingan token: 401 Unauthorized.
  • Bitta IP manzildan (IPv6 uchun /64 tarmoqdan) 10 daqiqada 20 marta noto'g'ri token yuborilsa, shu IP'dan keladigan noto'g'ri tokenli so'rovlar vaqtincha 429 oladi. To'g'ri tokenli so'rovlar bloklanmaydi.
  • Bot bloklangan (suspended) yoki egasining hisobi cheklangan bo'lsa: 403 Forbidden: bot is suspended.

Rate limitlar

Limitlar "token chelak" (token bucket) usulida: chelak to'la bo'lsa, qisqa portlash (burst) mumkin, so'ng belgilangan tezlikda to'ladi.

  • Bitta qoida: qaysi limitdan oshsangiz ham javob 429 Too Many Requests: retry after N va parameters.retry_after = N (soniya) bo'ladi. Istisnolar: kunlik chatlar limiti (daily limit of chats reached, retry_after: 3600) va proksi darajasidagi IP limiti (pastda).
  • Rad etilgan so'rov hech narsa sarflamaydi. Limit rad etgan so'rov hech narsa qilmagan: xabar yuborilmagan, fayl saqlanmagan, boshqa limitlardan olingan tokenlar qaytarilgan. retry_after soniya kutib, aynan o'sha so'rovni qayta yuborish xavfsiz (umumiy 50/s so'rovlar limitiga esa har bir so'rov, rad etilgani ham, kiradi).
  • Tayyor yordamchi: Python yordamchi klassi (with_retry).
LimitQiymatNimaga
Bot API so'rovlari50 / soniya (portlash 100 gacha)Bitta botning barcha metod chaqiruvlari, getUpdates ham.
Bot xabarlari30 / soniya (portlash 30)sendMessage, sendPhoto, … β€” bot bo'yicha jami.
Bitta chatga xabar1 / soniya (portlash 5)Bitta foydalanuvchiga ketma-ket xabarlar.
Bitta guruh yoki kanalga xabar20 / daqiqa (portlash 20)Guruhda yuborish, tahrirlash, qadash; kanalda post. Batafsil.
Guruh xabarlarini shifrlash1 000 qurilma / soniya bot bo'yicha, 1 500 bot egasi bo'yicha (barcha botlari), 5 000 umumiyGuruhdagi har bir xabar (tahrir, qadash) har bir odamning ≀10 ta qurilmasi + botning o'zi uchun shifrlanadi: 50 kishilik guruhda har kimda 2 tadan telefon bo'lsa β€” 101. Batafsil.
Bir vaqtdagi fayl uzatishlar3 ta bot bo'yicha, 16 ta umumiy β€” yuklab olish va yuklash alohidaYuklab olish (/file/bot…) va multipart yuklash, shaxsiy chatlar ham; guruh yoki kanalga file_id bilan qayta yuborish yuklash hisoblanadi. Oshsa: 429, retry_after: 1.
Kunlik chatlar10 000 turli chat / kun (UTC)Faqat tasdiqlanmagan botlar. Oshsa: daily limit of chats reached, retry_after 3600.
Noto'g'ri token20 / 10 daqiqa / IPKeyin shu IP'dan noto'g'ri tokenli so'rovlar 429.
Bir IP'dan so'rovlarβ‰ˆ20 / soniya (portlash 60)api.zamin.app proksisi darajasida, IP bo'yicha. Bu 429 javobida JSON bo'lmasligi mumkin.
Long poll'lar2000 ta ochiq so'rov (barcha botlar)To'lib qolsa, getUpdates darhol (bo'sh) javob qaytaradi.

Xato kodlari

Har bir metod sahifasida uning o'ziga xos xatolari bor. Quyidagilar istalgan metodda bo'lishi mumkin:

KodTavsifMa'nosiNima qilish kerak
400Bad Request: …Parametr noto'g'ri yoki yetishmaydi.Tavsifdagi maydon nomini tekshiring.
400Bad Request: chat not foundchat_id noto'g'ri, foydalanuvchi botni boshlamagan, bloklagan yoki hisobi o'chirilgan; guruh yoki kanalda β€” bot u yerda a'zo emas.Shu foydalanuvchiga yozishni to'xtating. Bloklash haqida my_chat_member yangilanishi keladi.
401UnauthorizedToken noto'g'ri yoki bekor qilingan.Tokenni tekshiring; @ZaminBot'dan yangisini oling.
403Forbidden: bot is suspendedBot moderatsiya tomonidan bloklangan.Zamin qo'llab-quvvatlash xizmatiga murojaat qiling.
404Not Found: method not foundBunday metod yo'q.Metod nomini tekshiring (ro'yxat).
409Conflict: …getUpdates va webhook to'qnashuvi yoki ikkita getUpdates.Yangilanishlar sahifasiga qarang.
413Request Entity Too LargeSo'rov yoki fayl juda katta.Fayl ≀50 MB (rasm ≀20 MB), JSON tanasi ≀64 KB.
429Too Many Requests: retry after NLimitlardan biri (so'rovlar, xabarlar, guruh, shifrlash, fayl uzatish). So'rov bajarilmagan, olgan tokenlari qaytarilgan.parameters.retry_after soniya kutib, o'sha so'rovni qayta yuboring (Rate limitlar).
500Internal Server ErrorServer xatosi.Biroz kutib qayta urining.

Fayllarni yuklab olish

Fayl yuborilgan xabarda file_id bo'ladi. getFile bilan file_path'ni oling va faylni quyidagi manzildan yuklab oling:

Matn
GET https://api.zamin.app/file/bot<TOKEN>/<file_path>
  • file_id shu botga xos: boshqa bot uni ishlata olmaydi.
  • Bot ko'rgan faylni qayta yuklamasdan, file_id orqali qayta yuborishi mumkin.
  • Faylni URL orqali yuborib bo'lmaydi: multipart bilan yuklang.

Telegram Bot API'dan farqlar

Zamin Bot API shakllari Telegram'ga o'xshash, lekin bir xil emas. Asosiy farqlar:

MavzuZamin
ChatlarShaxsiy chatlar, guruhlar va kanallar. Guruhlar uchidan-uchiga shifrlangan; privacy mode'dan tashqari xabarlar faqat guruh egasi roziligi bilan (guruhdagi farqlar).
Foydalanuvchi id'siHar bir bot uchun alohida psevdonim raqam.
Bloklangan foydalanuvchi400 chat not found (403 emas).
Formatlashparse_mode yo'q β€” faqat oddiy matn.
FayllarURL orqali yuborish yo'q; javoblarda kamroq maydon (davomiylik, eskiz yo'q).
Webhook sarlavhasiX-Zamin-Bot-Api-Secret-Token.
Webhook javobiFaqat status kodi muhim (2xx); javob tanasidagi metod chaqiruvi bajarilmaydi.
Yo'q metodlarInline rejim, to'lovlar, o'yinlar, stikerlar, forward/copy, caption tahrirlash va boshqalar.