دریافت پیامها با روش Long Polling (getUpdates)¶
روش Long Polling سادهترین راهکار برای دریافت پیامها و رویدادهای ربات بدون نیاز به داشتن دامنه عمومی یا گواهی SSL است. این روش برای توسعه، دیباگ و سرورهای محلی بسیار ایدهآل است.
نحوه کار متد getUpdates¶
هنگامی که متد getUpdates را صدا میزنید، سرور تا زمانی که پیام جدیدی برسد (یا مهلت timeout به پایان برسد) اتصال را باز نگه میدارد.
GET
POST
https://botapi.codemeet.chat/bot<TOKEN>/getUpdates
پارامترهای ورودی¶
| پارامتر | نوع داده | وضعیت | پیشفرض | توضیحات |
|---|---|---|---|---|
offset |
Integer |
اختیاری | null |
شناسه اولین آپدیتی که باید بازگردانده شود. برای تأیید دریافت آپدیتها، مقدار update_id + 1 آخرین آپدیت را ارسال کنید. |
limit |
Integer |
اختیاری | 100 |
تعداد مجاز پیامها در هر درخواست (بین ۱ تا ۱۰۰). |
timeout |
Integer |
اختیاری | 0 |
مدت زمان انتظار بر حسب ثانیه برای دریافت پیام جدید (حداکثر ۵۰ ثانیه). |
allowed_updates |
Array of String |
اختیاری | تمام انواع | لیست انواع آپدیتهای مجاز (مانند ["message", "callback_query"]). |
ساختار پاسخ getUpdates¶
خروجی این متد آرایهای از اشیاء Update است:
{
"ok": true,
"result": [
{
"update_id": 1042,
"message": {
"message_id": 25,
"date": 1724419200,
"chat": {
"id": "e9b2a1c0-4411-4fa3-9f88-d4508671b122",
"type": "private"
},
"from": {
"id": "c1f72b9a-1122-3344-5566-778899aabbcc",
"is_bot": false,
"first_name": "سارا",
"username": "sara_dev"
},
"text": "سلام ربات!"
}
},
{
"update_id": 1043,
"callback_query": {
"id": "a90f12d83b4c",
"from": {
"id": "c1f72b9a-1122-3344-5566-778899aabbcc",
"is_bot": false,
"first_name": "سارا"
},
"message": { "message_id": 24, "chat": { "id": "..." } },
"data": "btn_confirm"
}
}
]
}
الگوریتم مدیریت offset (تأیید دریافت)¶
برای اینکه پیامهای تکراری دریافت نکنید، باید پس از پردازش هر آپدیت، شناسه offset را به مقدار update_id + 1 تنظیم کنید:
sequenceDiagram
participant Bot as ربات شما
participant Server as سرور کدمیت
Bot->>Server: GET /getUpdates (offset=null, timeout=30)
Server-->>Bot: updates: [update_id: 100, update_id: 101]
Note over Bot: پردازش پیامهای 100 و 101
Bot->>Server: GET /getUpdates (offset=102, timeout=30)
Note over Server: پیامهای زیر 102 به عنوان تحویلشده علامت میخورند
Server-->>Bot: updates: [update_id: 102]
/// tip | نکته مهم در مورد وبهوک
اگر قبلاً برای ربات خود وبهوک تنظیم کردهاید، قبل از استفاده از getUpdates باید وبهوک را با متد deleteWebhook یا دستور /deletewebhook در BotFather حذف کنید.
///