Fayllar
sendAudio
Audio fayl yuboradi (MP3, M4A, OGG, WAV, FLAC …).
https://api.zamin.app/bot<TOKEN>/sendAudioGET ham ishlaydi. Parametrlar: query, JSON, form yoki multipart — batafsil.
Audio yuboradi. Qo'llab-quvvatlanadi: MP3, M4A/AAC, OGG/Opus, WAV, FLAC, AIFF, AMR, CAF, WebM audio. Javobda audio maydoni bo'ladi.
M4A/AAC fayllar MP4 konteynerida bo'lgani uchun ular fayl nomining kengaytmasi (.m4a, .aac …) orqali audio deb taniladi. Multipart'da to'g'ri fayl nomini yuboring, aks holda fayl video deb aniqlanadi va type of file mismatch xatosi qaytadi.
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. |
audio | InputFile yoki String | Majburiy | ≤50 MB | Multipart orqali yangi fayl yoki bot avval ko'rgan file_id (≤128 belgi). URL qabul qilinmaydi. Fayl nomi kengaytmasi bilan yuborilsin. |
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",
"audio": {
"file_id": "BQx8Kq2vN0aLrT5mW1pZcY7uE3sHdJ9gFbR4",
"file_unique_id": "Au2sD4fG6hJ8kL0q",
"file_size": 3145728,
"mime_type": "audio/mpeg",
"file_name": "qoshiq.mp3"
}
}
}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 audio in the request | audio 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 audio) | 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("qoshiq.mp3", "rb") as f:
r = requests.post(
f"{API}/sendAudio",
data={"chat_id": CHAT_ID, "caption": "Mana fayl"},
files={"audio": ("qoshiq.mp3", f, "audio/mpeg")},
timeout=60,
)
data = r.json()
print(data)
# Keyingi safar o'sha faylni qayta yuklamasdan, file_id bilan yuborish mumkin:
file_id = data["result"]["audio"]["file_id"]
requests.post(f"{API}/sendAudio", json={"chat_id": CHAT_ID, "audio": file_id}, timeout=15)curl -s "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendAudio" \
-F chat_id=4810235517 \
-F caption="Mana fayl" \
-F audio=@qoshiq.mp3Guruh 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.