ZaminDocs

Fayllar

sendPhoto

Rasm yuboradi (multipart yoki file_id).

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

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

Rasm yuboradi. Fayl mazmuni bo'yicha tekshiriladi (nomi yoki e'lon qilingan turi emas): JPEG, PNG, WebP, GIF, HEIC/HEIF, AVIF. Server rasmni qayta kodlaydi: 2048Γ—2048 ichiga sig'diradi (kattalashtirmaydi), JPEG'ga o'tkazadi va EXIF ma'lumotlarini (jumladan GPS joylashuvni) olib tashlaydi. Shaffof joylar oq bo'ladi, GIF animatsiyasi saqlanmaydi.

Javobdagi photo massivida hozircha bitta PhotoSize bo'ladi.

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.
photoInputFile yoki StringMajburiy≀20 MBMultipart orqali yangi fayl yoki bot avval ko'rgan file_id (≀128 belgi). URL qabul qilinmaydi. Rasm bo'lishi shart.
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",
    "photo": [
      {
        "file_id": "BQx8Kq2vN0aLrT5mW1pZcY7uE3sHdJ9gFbR4",
        "file_unique_id": "Xk3pQ9vR2mLwT8aZ",
        "file_size": 183402,
        "width": 1280,
        "height": 960
      }
    ]
  }
}

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 photo in the requestphoto 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: type of file mismatch (expected photo)Fayl turi metodga mos emas (masalan, sendPhoto'ga video).
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("rasm.jpg", "rb") as f:
    r = requests.post(
        f"{API}/sendPhoto",
        data={"chat_id": CHAT_ID, "caption": "Mana fayl"},
        files={"photo": ("rasm.jpg", f, "image/jpeg")},
        timeout=60,
    )
data = r.json()
print(data)

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

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.