مستندات 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>
- توکن در URL قرار میگیرد؛ هرگز آن را در مخازن عمومی commit نکنید.
- توکن تا زمان
/revokeمعتبر میماند و چند کلاینت همزمان پشتیبانی میشود. - باتها presence ندارند (آنلاین/آخرینبازدید معنا ندارد) و به فیچرهای انسانی مانند گیفت و تماس دسترسی ندارند.
- کاربر باید ابتدا به بات پیام دهد (چت بسازد)؛ سپس بات میتواند پاسخ دهد.
قالب پاسخ
پاسخ همه متدها 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_id | String | الزامی | UUID چت یا @username کانال عمومی |
| text | String | الزامی | متن پیام، حداکثر ۴۰۹۶ نویسه |
| reply_to_message_id | String | اختیاری | شناسه پیام برای ریپلای |
{
"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_id | String | الزامی | مشابه sendMessage |
| photo | String | الزامی | URL عمومی تصویر — خروجی متد upload |
| caption | String | اختیاری | کپشن زیر عکس (≤۴۰۹۶) |
| reply_to_message_id | String | اختیاری | ریپلای |
sendVideo
ارسال ویدیو (mp4/webm). همان ساختار sendPhoto ولی فیلد مدیا video است.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| chat_id | String | الزامی | مشابه sendMessage |
| video | String | الزامی | URL عمومی ویدیو — خروجی متد upload |
| caption | String | اختیاری | کپشن ویدیو |
| reply_to_message_id | String | اختیاری | ریپلای |
$ 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_id | String | الزامی | شناسه چت |
| message_id | String | الزامی | شناسه پیام هدف |
| text | String | الزامی | متن جدید |
پاسخ: آبجکت پیامِ بهروزشده.
deleteMessage
حذف یک پیامِ فرستادهشده توسط بات. پاسخ {"ok":true,"result":true}.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| chat_id | String | الزامی | شناسه چت |
| message_id | String | الزامی | شناسه پیام |
getChat
اطلاعات پایه یک چت که بات در آن عضو است.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| chat_id | String | الزامی | UUID چت یا @username |
{
"ok": true,
"result": {
"id": "24a7b58b-eb91-4f7b-8d75-fab23fc35e80",
"type": "private"
}
}
در گروه/کانال فیلدهای title و username هم برمیگردند.
getChatMember
وضعیت و نقش یک عضو در چت.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| chat_id | String | الزامی | شناسه چت |
| user_id | String | الزامی | شناسه کاربر (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 باز میماند
(حداکثر ۵۵ ثانیه).
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| offset | Integer | اختیاری | آپدهای با شناسه ≥ این مقدار برگردانده میشوند. برای تأیید مصرف، offset را روی «آخرین update_id + 1» بگذارید. |
| limit | Integer | اختیاری | ۱ تا ۱۰۰ (پیشفرض ۱۰۰) |
| timeout | Integer | اختیاری | ثانیه انتظار برای 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"
}
}
]
}
update_id >= offset.
آپدیت وقتی «مصرفشده» حساب میشود که بار بعدی offset را بزرگتر از update_id آن بفرستید.
صف هر بات حداکثر ۱۰۰۰ آپدیت نگه میدارد.
فیلدهای مهم message:
from.photo_url،from.username— اکستنشن قاصدک (در تلگرام نیست)media_type: text | image | video | voice | audio | file | sticker | system | giftmedia_url،caption— برای پیامهای مدیاreply_to_message— پیام والد در صورت ریپلایchat.type: private | group | channel
حریم خصوصی گروهی (Privacy Mode)
مثل تلگرام، بهصورت پیشفرض بات در گروهها فقط اینها را دریافت میکند:
- کامندها (
/start@botname)؛ اگر تنها باتِ گروه باشد، کامند بدون منشن هم کافی است - ریپلایهای مستقیم به پیامهای خود بات
- پیامهای سیستمی (عضویت، خروج و…)
برای باتهایی مثل دانلودر که باید همه پیامها را ببینند، در
@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
}
}
- حداکثر حجم: ۵۰ مگابایت
- فرمتهای مجاز: jpg، png، webp، gif (تصویر) — mp3، ogg، wav، m4a (صدا) — mp4، webm (ویدیو)
- نوع واقعی فایل از محتوا تشخیص داده میشود، نه از هدر ادعایی
- فیلدهای اختیاری
width،height،durationرا هم میتوانید بفرستید
منوی کامندها
setMyCommands
تنظیم منوی کامندهای عمومی بات که در کلاینت نمایش داده میشود.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
| commands | Array | الزامی | حداکثر ۱۰۰ مورد از {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 کاربر
متدهای متفرقه
| متد | خروجی | توضیح |
|---|---|---|
| logOut | true | برای خروج ایمن پیش از انتقال توکن به سرور دیگر (سازگاری تلگرام) |
| close | true | بستن نشست بات پیش از مهاجرت (سازگاری تلگرام) |
محدودیتها
| مورد | مقدار |
|---|---|
| نرخ درخواست هر بات | ۶۰۰ درخواست در دقیقه (۴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 | لغو عملیات جاری |