Bot API v1

مستندات Ghasedak Bot API 🤖

با Bot API قاصدک می‌توانید ربات بسازید: پاسخ به کاربران، ارسال متن، عکس و ویدیو، مدیریت کامندها و دریافت لحظه‌ای پیام‌ها — با همان سبک و سمانتیک تلگرام. برای شروع در اپلیکیشن به @BotFather@ پیام دهید و /newbot بفرستید.

آدرس پایه

همه درخواست‌ها POST هستند (GET هم پذیرفته می‌شود) و این شکل را دارند:

https://ghsdk.ir/bot<token>/METHOD
# مثال: گرفتن اطلاعات خود ربات
$ curl -X POST "https://ghsdk.ir/bot<token>/getMe"
💡 توکن فقط یک بار هنگام ساخت بات نمایش داده می‌شود. اگر گم شد، در @BotFather@ دستور /revoke را بزنید تا توکن جدید صادر شود.

احراز هویت

ربات‌ها از کاربران عادی جدا هستند: لاگین OTP/ایمیل ندارند و فقط با توکن احراز می‌شوند:

<bot_user_id UUID>:<32 hex chars>

قالب پاسخ

پاسخ همه متدها JSON است با همین قالب (مطابق تلگرام):

{
  "ok": true,
  "result": { ... }
}

در صورت خطا:

{
  "ok": false,
  "error_code": 401,
  "description": "Unauthorized: invalid bot token"
}

Quick Start

curl

$ curl -X POST "https://ghsdk.ir/bot$BOT_TOKEN/sendMessage" \
     -H "Content-Type: application/json" \
     -d '{"chat_id":"<chat_uuid>", "text":"سلام از BargBot! 🌾"}'

Python — long polling کامل

import json, urllib.request

API = "https://ghsdk.ir/bot<token>"
offset = 0

def call(method, payload=None, timeout=40):
    req = urllib.request.Request(
        f"{API}/{method}",
        data=json.dumps(payload or {}).encode(),
        headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=timeout) as r:
        out = json.load(r)
    if not out["ok"]:
        raise RuntimeError(out["description"])
    return out["result"]

while True:
    updates = call("getUpdates", {"offset": offset, "timeout": 25}, timeout=35)
    for u in updates:
        offset = u["update_id"] + 1
        msg = u.get("message") or {}
        if msg.get("text") == "/start":
            call("sendMessage", {"chat_id": msg["chat"]["id"],
                                  "text": "سلام! 👋"})

متدها

getMe

اطلاعات هویتی خود ربات — برای تست سلامت توکن عالی است. بدون پارامتر.

{
  "ok": true,
  "result": {
    "id": "42d67200-beac-4ada-b9a0-ea06d64a0f38",
    "is_bot": true,
    "first_name": "BargBot",
    "username": "bargbot"
  }
}

sendMessage

ارسال پیام متنی. بات باید عضو چت باشد؛ در چت خصوصی یعنی کاربر قبلاً به بات پیام داده باشد.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیUUID چت یا @username کانال عمومی
textStringالزامیمتن پیام، حداکثر ۴۰۹۶ نویسه
reply_to_message_idStringاختیاریشناسه پیام برای ریپلای
{
  "ok": true,
  "result": {
    "message_id": "fe9c4526-6ad9-486d-b0cd-a569f739f2d8",
    "from": {
      "id": "42d67200-beac-4ada-b9a0-ea06d64a0f38",
      "is_bot": true,
      "first_name": "BargBot",
      "username": "bargbot"
    },
    "chat": {
      "id": "24a7b58b-eb91-4f7b-8d75-fab23fc35e80",
      "type": "private"
    },
    "date": 1787434922,
    "text": "سلام! 👋",
    "media_type": "text"
  }
}

sendPhoto

ارسال تصویر با کپشن اختیاری.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیمشابه sendMessage
photoStringالزامیURL عمومی تصویر — خروجی متد upload
captionStringاختیاریکپشن زیر عکس (≤۴۰۹۶)
reply_to_message_idStringاختیاریریپلای

sendVideo

ارسال ویدیو (mp4/webm). همان ساختار sendPhoto ولی فیلد مدیا video است.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیمشابه sendMessage
videoStringالزامیURL عمومی ویدیو — خروجی متد upload
captionStringاختیاریکپشن ویدیو
reply_to_message_idStringاختیاریریپلای
$ curl -X POST "https://ghsdk.ir/bot$BOT_TOKEN/sendVideo" \
     -H "Content-Type: application/json" \
     -d '{"chat_id":"<chat_uuid>",
          "video":"https://ghsdk.ir/media/abc.mp4",
          "caption":"خروجی ربات 🎬"}'

editMessageText

ویرایش متن یک پیام که خود بات فرستاده، تا ۴۸ ساعت پس از ارسال.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیشناسه چت
message_idStringالزامیشناسه پیام هدف
textStringالزامیمتن جدید

پاسخ: آبجکت پیامِ به‌روزشده.

deleteMessage

حذف یک پیامِ فرستاده‌شده توسط بات. پاسخ {"ok":true,"result":true}.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیشناسه چت
message_idStringالزامیشناسه پیام

getChat

اطلاعات پایه یک چت که بات در آن عضو است.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیUUID چت یا @username
{
  "ok": true,
  "result": {
    "id": "24a7b58b-eb91-4f7b-8d75-fab23fc35e80",
    "type": "private"
  }
}

در گروه/کانال فیلدهای title و username هم برمی‌گردند.

getChatMember

وضعیت و نقش یک عضو در چت.

پارامترنوعوضعیتتوضیح
chat_idStringالزامیشناسه چت
user_idStringالزامیشناسه کاربر (UUID)
{
  "ok": true,
  "result": {
    "user": {
      "id": "de17273b-717d-4e40-bf00-fd33cc316868",
      "is_bot": false,
      "first_name": "taha",
      "username": "iTahaSm"
    },
    "status": "creator"
  }
}

status یکی از: creator | administrator | member | left

getUpdates

دریافت پیام‌ها و رویدادهای رسیده به بات با long polling — تنها راه دریافت آپدیت‌ها. اگر آپدیتی نباشد، درخواست تا رسیدن آپدیت جدید یا پایان timeout باز می‌ماند (حداکثر ۵۵ ثانیه).

پارامترنوعوضعیتتوضیح
offsetIntegerاختیاریآپدهای با شناسه ≥ این مقدار برگردانده می‌شوند. برای تأیید مصرف، offset را روی «آخرین update_id + 1» بگذارید.
limitIntegerاختیاری۱ تا ۱۰۰ (پیش‌فرض ۱۰۰)
timeoutIntegerاختیاریثانیه انتظار برای long polling
{
  "ok": true,
  "result": [
    {
      "update_id": 31,
      "message": {
        "message_id": "4657574f-bd55-45b3-aa96-99bd5a03b636",
        "from": { "id": "48fc529c-db75-4d58-827a-0308eed543a7", "is_bot": false, "first_name": "" },
        "chat": { "id": "24a7b58b-eb91-4f7b-8d75-fab23fc35e80", "type": "private" },
        "date": 1787434922,
        "text": "/start",
        "media_type": "text"
      }
    }
  ]
}
📌 سمانتیک offset شمولی است (مثل تلگرام): update_id >= offset. آپدیت وقتی «مصرف‌شده» حساب می‌شود که بار بعدی offset را بزرگ‌تر از update_id آن بفرستید. صف هر بات حداکثر ۱۰۰۰ آپدیت نگه می‌دارد.

فیلدهای مهم message:

حریم خصوصی گروهی (Privacy Mode)

مثل تلگرام، به‌صورت پیش‌فرض بات در گروه‌ها فقط این‌ها را دریافت می‌کند:

برای بات‌هایی مثل دانلودر که باید همه پیام‌ها را ببینند، در @BotFather@ دستور /setprivacy را بزنید و حالت disable را انتخاب کنید. تغییر بلافاصله اعمال می‌شود.

upload

آپلود فایل برای استفاده در sendPhoto / sendVideo — معادل POST /v1/upload اما با احراز توکن بات. بدنه multipart با فیلد file:

$ curl -X POST "https://ghsdk.ir/bot$BOT_TOKEN/upload" \
     -F "file=@/path/to/video.mp4;type=video/mp4"
{
  "ok": true,
  "result": {
    "url": "https://ghsdk.ir/media/4db977a9-c208-464c-8d71-942476807d1f.mp4",
    "media_width": 0,
    "media_height": 0,
    "media_duration": 0
  }
}

منوی کامندها

setMyCommands

تنظیم منوی کامندهای عمومی بات که در کلاینت نمایش داده می‌شود.

پارامترنوعوضعیتتوضیح
commandsArrayالزامیحداکثر ۱۰۰ مورد از {command, description} — کامند فقط a-z/0-9/_ تا ۳۲ نویسه
$ curl -X POST "https://ghsdk.ir/bot$BOT_TOKEN/setMyCommands" \
     -H "Content-Type: application/json" \
     -d '{"commands":[{"command":"start","description":"شروع کار"},
                      {"command":"help","description":"راهنما"}]}'

getMyCommands

دریافت منوی فعلی. بدون پارامتر؛ پاسخ آرایه‌ای از {command, description}.

📌 کاربران (کلاینت‌ها) نیز می‌توانند منوی هر بات را بدون توکن ببینند:
GET https://ghsdk.ir/v1/users/{botUserID}/commands با JWT کاربر

متدهای متفرقه

متدخروجیتوضیح
logOuttrueبرای خروج ایمن پیش از انتقال توکن به سرور دیگر (سازگاری تلگرام)
closetrueبستن نشست بات پیش از مهاجرت (سازگاری تلگرام)

محدودیت‌ها

موردمقدار
نرخ درخواست هر بات۶۰۰ درخواست در دقیقه (۴29 پس از عبور)
طول متن / کپشن۴٬۰۹۶ نویسه
حجم آپلود۵۰ مگابایت
طول long pollingحداکثر ۵۵ ثانیه
صف آپدیت هر بات۱٬۰۰۰ آپدیت آخر
تعداد کامندها۱۰۰
تعداد بات برای هر کاربر۲۰ (از طریق BotFather)

خطاهای رایج و رفع آن‌ها

خطاعلت و راه‌حل
401 Unauthorizedتوکن اشتباه یا باطل‌شده — از getMe شروع کنید؛ در صورت لزوم /revoke
403 Forbidden: not a memberبات عضو چت نیست — کاربر باید اول به بات پیام دهد یا بات به گروه اضافه شود
400 requires a valid media_urlفیلد photo/video خالی است یا URL آن http(s) نیست — اول upload کنید
429 Too Many Requestsعبور از ۶۰۰ req/min — یک دقیقه صبر کنید
getUpdates همیشه خالیoffset را بیش از آخرین update_id نفرستید؛ سمانتیک شمولی است

مرجع BotFather@

مدیریت بات‌ها داخل خود پیام‌رسان، با پیام دادن به @BotFather@:

کامندکار
/newbotساخت بات جدید: نام → یوزرنیم (باید به bot ختم شود) → توکن یک‌بارمصرف
/mybotsلیست بات‌های شما
/revokeباطل‌کردن همه توکن‌ها و صدور توکن جدید
/setnameتغییر نام نمایشی بات
/setdescriptionتغییر بیوی بات
/setcommandsتنظیم منوی کامندها (قالب: «cmd - توضیح» در هر خط)
/setprivacyفعال/غیرفعال کردن حریم خصوصی گروهی
/cancelلغو عملیات جاری
⚠️ حداکثر ۲۰ بات برای هر حساب کاربری قابل ساخت است.