Xabarlar
sendMessage
Shaxsiy chat, guruh yoki kanalga matnli xabar yuboradi (ixtiyoriy klaviatura bilan).
POST
https://api.zamin.app/bot<TOKEN>/sendMessageGET ham ishlaydi. Parametrlar: query, JSON, form yoki multipart — batafsil.
Matnli xabar yuboradi va yuborilgan Message'ni qaytaradi. Matn oddiy matn sifatida ko'rsatiladi: Markdown yoki HTML formatlash yo'q.
reply_markup ichida inline klaviatura bo'lsa, u xabarga biriktiriladi. Reply klaviatura (keyboard) chatning faol klaviaturasiga aylanadi, remove_keyboard esa uni olib tashlaydi (faqat shaxsiy chatda).
Guruh va kanalda
- Guruh (
chat_idmanfiy): Xabar 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.
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. |
text | String | Majburiy | 1–4096 belgi | Faqat bo'shliqdan iborat matn rad etiladi. Belgilar Unicode code point bo'yicha sanaladi. |
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
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,
"text": "Salom! Bugun Toshkentda +24°C ☀️",
"reply_markup": {
"inline_keyboard": [
[
{"text": "✅ Ha", "callback_data": "yes"},
{"text": "❌ Yo'q", "callback_data": "no"}
]
]
}
}
}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: text: message text is empty | Matn bo'sh yoki faqat bo'shliqlardan iborat. |
| 400 | Bad Request: text: message is too long | Matn 4096 belgidan uzun: bo'lib yuboring. |
| 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). |
| 400 | Bad Request: reply_markup… | Klaviatura cheklovlarga mos emas (tugma matni 1–64, callback_data ≤64 bayt, ruxsat etilmagan URL va h.k.). |
| 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: daily limit of chats reached | Tasdiqlanmagan bot bir kunda 10 000 dan ortiq turli chatga yoza olmaydi (retry_after = 3600). |
| 400 | Bad Request: not enough rights to send text messages to the chat | Guruh: bot admin emas va guruh sozlamalarida a'zolarga yozish 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
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
r = requests.post(
f"{API}/sendMessage",
json={
"chat_id": CHAT_ID,
"text": "Salom! Bugun Toshkentda +24°C ☀️",
"reply_markup": {
"inline_keyboard": [[
{"text": "✅ Ha", "callback_data": "yes"},
{"text": "❌ Yo'q", "callback_data": "no"},
]]
},
},
timeout=15,
)
print(r.json())
# Guruhga yoki kanalga — xuddi shunday, faqat chat_id manfiy (yoki "@kanal_username"):
GROUP_ID = -4012345678 # message.chat.id guruhdagi xabardan
requests.post(f"{API}/sendMessage", json={"chat_id": GROUP_ID, "text": "Hammaga salom! 👋"}, timeout=15)curl
curl -s -X POST "https://api.zamin.app/bot$ZAMIN_BOT_TOKEN/sendMessage" \
-H "Content-Type: application/json" \
-d '{"chat_id": 4810235517, "text": "Salom!"}'