ZaminDocs

Fayllar

sendDocument

Istalgan faylni hujjat sifatida yuboradi.

POSThttps://api.zamin.app/bot<TOKEN>/sendDocument

GET ham ishlaydi. Parametrlar: query, JSON, form yoki multipart β€” batafsil.

Istalgan turdagi faylni hujjat sifatida yuboradi. Javobda doim document maydoni bo'ladi. Fayl nomi saqlanadi (120 belgigacha; rasmlarda nom saqlanmaydi).

mime_type fayl mazmunidan aniqlanadi. Rasm, video va audio bo'lmagan fayllar uchun u doim application/octet-stream bo'ladi (PDF uchun ham). Fayl turini file_name'dan aniqlang. Rasm hujjat sifatida yuborilsa ham qayta kodlanadi (JPEG).

Parametrlar

ParametrTuriMajburiyCheklovIzoh
chat_idInteger yoki StringMajburiy≀16 raqam (manfiy ham) yoki @usernameShaxsiy chat: foydalanuvchining id'si (message.chat.id), faqat botni boshlagan va bloklamagan bo'lsa. Guruh yoki kanal: manfiy id (-4012345678, -100…) yoki bot a'zo bo'lgan ochiq chatning @username'i. Chat id'lari.
documentInputFile yoki StringMajburiy≀50 MB (rasm ≀20 MB)Multipart orqali yangi fayl yoki bot avval ko'rgan file_id (≀128 belgi). URL qabul qilinmaydi.
captionStringIxtiyoriy0–1024 belgiFayl ostidagi matn (oddiy matn).
reply_markupInlineKeyboardMarkup, ReplyKeyboardMarkup yoki ReplyKeyboardRemoveIxtiyoriy≀12 qator, qatorda ≀8, jami ≀100 tugmaJSON obyekt. Query, form yoki multipart so'rovda JSON matn sifatida yuboriladi. Klaviaturalar. Guruhda faqat inline klaviatura; kanal postida tugma bo'lmaydi.
reply_to_message_idIntegerIxtiyoriyβ€”Javob qilinadigan xabar. Shu chatda bo'lishi va o'chirilmagan bo'lishi kerak. Kanal postlarida e'tiborga olinmaydi.

Javob

Natija (result): Message

JSON
{
  "ok": true,
  "result": {
    "message_id": 14,
    "from": {
      "id": 1000001,
      "is_bot": true,
      "first_name": "Ob-havo",
      "username": "ObHavoBot",
      "can_join_groups": true,
      "can_read_all_group_messages": false,
      "supports_inline_queries": false
    },
    "chat": {
      "id": 4810235517,
      "type": "private",
      "first_name": "Ali",
      "last_name": "Valiyev",
      "username": "ali"
    },
    "date": 1791106200,
    "caption": "Mana fayl",
    "document": {
      "file_id": "BQx8Kq2vN0aLrT5mW1pZcY7uE3sHdJ9gFbR4",
      "file_unique_id": "Pq7wE2rT9yU4iO1a",
      "file_size": 52144,
      "mime_type": "application/octet-stream",
      "file_name": "hisobot.pdf"
    }
  }
}

Xatolar

KodTavsifSabab va yechim
400Bad Request: chat not foundchat_id noto'g'ri, foydalanuvchi botni boshlamagan, bloklagan yoki hisobi o'chirilgan. Hammasi uchun javob bir xil (atayin).
400Bad Request: there is no document in the requestdocument maydoni yo'q (yoki multipart fayl boshqa nom bilan yuborilgan).
400Bad Request: sending files by URL is not supportedFaylni URL bilan emas, multipart yoki file_id bilan yuboring.
400Bad Request: wrong file identifier/HTTP URL specifiedBu file_id shu botga tegishli emas yoki fayl o'chirilgan.
400Bad Request: caption: message caption is too longcaption 1024 belgidan oshmasin.
400Bad Request: empty_fileFayl bo'sh.
400Bad Request: invalid_imageRasmni o'qib bo'lmadi (buzilgan fayl yoki 50 megapikseldan katta).
413Bad Request: file_too_largeFayl limitdan katta (rasm 20 MB, boshqalar 50 MB).
413Request Entity Too LargeMultipart so'rov 52 MB dan katta.
400Bad Request: message to be replied not foundreply_to_message_id bo'yicha xabar yo'q yoki o'chirilgan (guruhda β€” bot qo'shilishidan oldingi xabar ham).
429Too Many Requests: retry after NXabar limiti. So'rov bajarilmagan va limitlardan olgan tokenlari qaytarilgan: parameters.retry_after soniya kutib, o'sha so'rovni qayta yuboring.
429Too Many Requests: retry after 1Bir vaqtda juda ko'p fayl uzatish: bot bo'yicha 3 ta, umumiy 16 ta (multipart yuklash; guruh yoki kanalga file_id bilan qayta yuborish ham). 1 soniyadan keyin qayta urining.
400Bad Request: not enough rights to send media messages to the chatGuruh: bot admin emas va guruh sozlamalarida a'zolarga fayl yuborish o'chirilgan.
400Bad Request: not enough rights to send messages to the chatKanal: botda "Post joylash" (can_post_messages) huquqi yo'q yoki bu rasmiy kanal.
400Bad Request: only inline keyboards are supported in groupsGuruhda reply klaviatura (keyboard, remove_keyboard) ishlamaydi.
400Bad Request: channel posts can't have buttonsKanal postiga reply_markup berib bo'lmaydi.
400Bad Request: &lt;sabab&gt;Kanal: post (yoki tahrir) matni kontent filtridan o'tmadi β€” odamlarning postlaridagi qoidalar bilan bir xil.
403Forbidden: the bot's owner must accept Zamin's terms of use firstKanal: yangi post uchun bot egasi Zamin foydalanish shartlarini qabul qilishi kerak.
400Bad Request: method is not available for this chatKanal izohlari chatida (supergroup) bu amal yo'q: bot izoh yoza olmaydi, izohlar chatini boshqarmaydi.
429Too Many Requests: retry after NBitta guruh yoki kanalga daqiqasiga 20 ta xabar, bot bo'yicha soniyasiga 30 ta yoki guruhda shifrlash byudjeti (1 000 qurilma/s bot, 1 500/s bot egasi, 5 000/s umumiy). Rad etilgan so'rov hech narsa qilmagan: retry_after soniya kutib, qayta yuboring.

Istalgan metodda bo'lishi mumkin: 401 Unauthorized, 403 Forbidden: bot is suspended, 429 Too Many Requests, 400 Bad Request: <maydon>: … β€” xato kodlari.

Misol

Python
import os
import requests

TOKEN = os.environ["ZAMIN_BOT_TOKEN"]
API = f"https://api.zamin.app/bot{TOKEN}"
CHAT_ID = int(os.environ["ZAMIN_CHAT_ID"])  # getUpdates javobidagi message.chat.id

with open("hisobot.pdf", "rb") as f:
    r = requests.post(
        f"{API}/sendDocument",
        data={"chat_id": CHAT_ID, "caption": "Mana fayl"},
        files={"document": ("hisobot.pdf", f, "application/pdf")},
        timeout=60,
    )
data = r.json()
print(data)

# Keyingi safar o'sha faylni qayta yuklamasdan, file_id bilan yuborish mumkin:
file_id = data["result"]["document"]["file_id"]
requests.post(f"{API}/sendDocument", json={"chat_id": CHAT_ID, "document": file_id}, timeout=15)
curl
curl -s "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendDocument" \
  -F chat_id=4810235517 \
  -F caption="Mana fayl" \
  -F document=@hisobot.pdf

Guruh va kanalda

  • Guruh (chat_id manfiy): Fayl guruhning barcha a'zolari telefonlari uchun uchidan-uchiga shifrlanadi (boshqa botlar uni ko'rmaydi). Faqat inline klaviatura. Bot admin bo'lmasa, guruhning a'zolar uchun ruxsatlari amal qiladi. reply_to_message_id β€” guruhdagi xabar raqami.
  • Kanal: botda can_post_messages huquqi bo'lishi kerak, bot egasi esa Zamin foydalanish shartlarini qabul qilgan bo'lishi kerak; matn odamlarning postlari kabi kontent filtridan o'tadi. Post oddiy kanal posti bo'lib chiqadi (obunachilarga bildirishnoma boradi), javobda sender_chat bor, from yo'q. Tugmalar yo'q (reply_markup β†’ 400), reply_to_message_id e'tiborga olinmaydi.
  • Kanal izohlari chati: bot izoh yoza olmaydi (400 method is not available for this chat).
  • Limit: bitta guruh yoki kanalga daqiqasiga 20 ta xabar; guruhda β€” shifrlash byudjeti ham (xabar har bir odamning eng so'nggi faol 10 ta qurilmasiga shifrlanadi). Limitlar.

Guruhga yuborilgan fayl server tomonidan tekshiriladi va qayta kodlanadi (shaxsiy chatdagidek), so'ng uchidan-uchiga shifrlab saqlanadi; kalit faqat a'zolar telefonlariga va botning o'ziga boradi. Guruhda olingan file_id'ni boshqa guruh yoki kanalga yuborish mumkin, lekin shaxsiy chatga emas (wrong file identifier). Guruh yoki kanalga file_id bilan qayta yuborish ham, multipart yuklash ham (shaxsiy chatda ham) bir vaqtdagi fayl uzatish limitiga kiradi: bot bo'yicha 3 ta, umumiy 16 ta (429, retry_after: 1). Guruhdagi fayllar.