ZaminDocs

Xabarlar

sendMessage

Shaxsiy chat, guruh yoki kanalga matnli xabar yuboradi (ixtiyoriy klaviatura bilan).

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

GET 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_id manfiy): 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_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.

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.
textStringMajburiy1–4096 belgiFaqat bo'shliqdan iborat matn rad etiladi. Belgilar Unicode code point bo'yicha sanaladi.
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,
    "text": "Salom! Bugun Toshkentda +24°C ☀️",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "✅ Ha", "callback_data": "yes"},
          {"text": "❌ Yo'q", "callback_data": "no"}
        ]
      ]
    }
  }
}

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: text: message text is emptyMatn bo'sh yoki faqat bo'shliqlardan iborat.
400Bad Request: text: message is too longMatn 4096 belgidan uzun: bo'lib yuboring.
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).
400Bad Request: reply_markup…Klaviatura cheklovlarga mos emas (tugma matni 1–64, callback_data ≤64 bayt, ruxsat etilmagan URL va h.k.).
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: daily limit of chats reachedTasdiqlanmagan bot bir kunda 10 000 dan ortiq turli chatga yoza olmaydi (retry_after = 3600).
400Bad Request: not enough rights to send text messages to the chatGuruh: bot admin emas va guruh sozlamalarida a'zolarga yozish 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

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!"}'