Fayllar
sendPhoto
Rasm yuboradi (multipart yoki file_id).
https://api.zamin.app/bot<TOKEN>/sendPhotoGET 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
| Parametr | Turi | Majburiy | Cheklov | Izoh |
|---|---|---|---|---|
chat_id | Integer yoki String | Majburiy | β€16 raqam (manfiy ham) yoki @username | Shaxsiy 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. |
photo | InputFile yoki String | Majburiy | β€20 MB | Multipart orqali yangi fayl yoki bot avval ko'rgan file_id (β€128 belgi). URL qabul qilinmaydi. Rasm bo'lishi shart. |
caption | String | Ixtiyoriy | 0β1024 belgi | Fayl ostidagi matn (oddiy matn). |
reply_markup | InlineKeyboardMarkup, ReplyKeyboardMarkup yoki ReplyKeyboardRemove | Ixtiyoriy | β€12 qator, qatorda β€8, jami β€100 tugma | JSON obyekt. Query, form yoki multipart so'rovda JSON matn sifatida yuboriladi. Klaviaturalar. Guruhda faqat inline klaviatura; kanal postida tugma bo'lmaydi. |
reply_to_message_id | Integer | Ixtiyoriy | β | Javob qilinadigan xabar. Shu chatda bo'lishi va o'chirilmagan bo'lishi kerak. Kanal postlarida e'tiborga olinmaydi. |
Javob
Natija (result): Message
{
"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
| Kod | Tavsif | Sabab va yechim |
|---|---|---|
| 400 | Bad Request: chat not found | chat_id noto'g'ri, foydalanuvchi botni boshlamagan, bloklagan yoki hisobi o'chirilgan. Hammasi uchun javob bir xil (atayin). |
| 400 | Bad Request: there is no photo in the request | photo maydoni yo'q (yoki multipart fayl boshqa nom bilan yuborilgan). |
| 400 | Bad Request: sending files by URL is not supported | Faylni URL bilan emas, multipart yoki file_id bilan yuboring. |
| 400 | Bad Request: wrong file identifier/HTTP URL specified | Bu file_id shu botga tegishli emas yoki fayl o'chirilgan. |
| 400 | Bad Request: type of file mismatch (expected photo) | Fayl turi metodga mos emas (masalan, sendPhoto'ga video). |
| 400 | Bad Request: caption: message caption is too long | caption 1024 belgidan oshmasin. |
| 400 | Bad Request: empty_file | Fayl bo'sh. |
| 400 | Bad Request: invalid_image | Rasmni o'qib bo'lmadi (buzilgan fayl yoki 50 megapikseldan katta). |
| 413 | Bad Request: file_too_large | Fayl limitdan katta (rasm 20 MB, boshqalar 50 MB). |
| 413 | Request Entity Too Large | Multipart so'rov 52 MB dan katta. |
| 400 | Bad Request: message to be replied not found | reply_to_message_id bo'yicha xabar yo'q yoki o'chirilgan (guruhda β bot qo'shilishidan oldingi xabar ham). |
| 429 | Too Many Requests: retry after N | Xabar limiti. So'rov bajarilmagan va limitlardan olgan tokenlari qaytarilgan: parameters.retry_after soniya kutib, o'sha so'rovni qayta yuboring. |
| 429 | Too Many Requests: retry after 1 | Bir 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. |
| 400 | Bad Request: not enough rights to send media messages to the chat | Guruh: bot admin emas va guruh sozlamalarida a'zolarga fayl yuborish o'chirilgan. |
| 400 | Bad Request: not enough rights to send messages to the chat | Kanal: botda "Post joylash" (can_post_messages) huquqi yo'q yoki bu rasmiy kanal. |
| 400 | Bad Request: only inline keyboards are supported in groups | Guruhda reply klaviatura (keyboard, remove_keyboard) ishlamaydi. |
| 400 | Bad Request: channel posts can't have buttons | Kanal postiga reply_markup berib bo'lmaydi. |
| 400 | Bad Request: <sabab> | Kanal: post (yoki tahrir) matni kontent filtridan o'tmadi β odamlarning postlaridagi qoidalar bilan bir xil. |
| 403 | Forbidden: the bot's owner must accept Zamin's terms of use first | Kanal: yangi post uchun bot egasi Zamin foydalanish shartlarini qabul qilishi kerak. |
| 400 | Bad Request: method is not available for this chat | Kanal izohlari chatida (supergroup) bu amal yo'q: bot izoh yoza olmaydi, izohlar chatini boshqarmaydi. |
| 429 | Too Many Requests: retry after N | Bitta 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
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 -s "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendPhoto" \
-F chat_id=4810235517 \
-F caption="Mana fayl" \
-F photo=@rasm.jpgGuruh va kanalda
- Guruh (
chat_idmanfiy): 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_messageshuquqi 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), javobdasender_chatbor,fromyo'q. Tugmalar yo'q (reply_markupβ 400),reply_to_message_ide'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.