وثائق المطوّرين
العربية

تطوير البوتات

مرجع Bot API

جمعنا هنا كل الطرق التي تقبلها واجهة HTTP Bot API في Pabal، والكائنات التي تتبادلها، والأخطاء، دون استثناء. وهي متوافقة مع Bot API الخاصة بـ Telegram.

تستخدم واجهة HTTP Bot API في Pabal صيغة العناوين والطلبات والاستجابات والأخطاء نفسها المستخدمة في Telegram Bot API. ولا يذكر هذا المستند إلا ما يقبله Pabal فعلاً، والطرق غير المذكورة هنا تعيد 404 Not Found: method not found. وإن كانت هذه أول مرة لك، فابدأ بـدرس إنشاء بوت.

إرسال الطلبات

https://pabal.me/bot<token>/<method>
  • فعل HTTP: يعمل GET وPOST كلاهما.
  • المعاملات تُرسل بإحدى أربع طرق — سلسلة الاستعلام (?chat_id=1&text=hi)، وapplication/x-www-form-urlencoded، وapplication/json، وmultipart/form-data عند رفع الملفات. ويمكنك المزج بينها.
  • المعاملات التي هي كائنات (reply_markup، commands، allowed_updates) تُمرَّر كما هي كائناتٍ ومصفوفاتٍ في جسم JSON، وكسلسلة JSON في النموذج أو سلسلة الاستعلام.
  • أسماء الطرق لا تميّز بين الأحرف الكبيرة والصغيرة (sendMessage = sendmessage).
  • حجم الجسم حتى 12MB (وإذا تجاوزه فالنتيجة 413).
  • تنزيل الملفات له عنوان منفصل: https://pabal.me/file/bot<token>/<file_path> (getFile).

الاستجابات والأخطاء

الاستجابة دائماً بصيغة JSON. عند النجاح تصل HTTP 200 مع result، وعند الفشل تصل حالة HTTP المعنية مع error_code مطابق لها، وdescription يقرؤه البشر.

{"ok": true, "result": { … }}
{"ok": false, "error_code": 400, "description": "Bad Request: chat not found"}
error_codeمتىأمثلة على description
400المعاملات خاطئةBad Request: chat not found، Bad Request: message text is empty، Bad Request: message is not modified: …، Bad Request: message to edit not found، Bad Request: wrong file identifier/HTTP URL specified، Bad Request: query is too old and response timeout expired or query ID is invalid
401الرمز المميّز خاطئUnauthorized
403لا صلاحية للإرسالForbidden: bot can't initiate conversation with a user، Forbidden: bot is not a member of the group chat
404طريقة أو ملف غير موجودNot Found: method not found
409استدعاء getUpdates مع وجود webhookConflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first
413الجسم يتجاوز 12MBRequest Entity Too Large
500خطأ داخلي في الخادمInternal Server Error

لا يفرض Pabal حالياً حداً لمعدل الطلبات كلها، لكن لطرق الصوت حدوداً في الساعة، فقد يصلك 429 Too Many Requests: retry after N (المكالمات الصوتية). اكتب شيفرتك بحيث إذا استلمت 429 انتظرت parameters.retry_after ثانية ثم أعادت الإرسال.

استلام التحديثات

استخدم إحدى الطريقتين، إذ لا يمكن استخدامهما معاً.

getUpdates

POST/bot<token>/getUpdates

تجلب التحديثات المنتظرة (الاستطلاع الطويل). وإذا كان webhook مضبوطاً فالنتيجة 409.

المعاملالنوعإلزاميالوصف
offsetIntegerاختياريالتحديثات التي رقمها يساوي هذا الرقم أو يزيد عليه فقط. وما هو أصغر منه يُحذف باعتباره «مُستلَماً». مرّر update_id + 1 لآخر تحديث عالجته.
limitIntegerاختياريمن 1 إلى 100، والافتراضي 100
timeoutIntegerاختياريعدد ثواني الانتظار، من 0 إلى 50، والافتراضي 0. ننصح بقيمة بين 25 و30.
allowed_updatesArray of Stringاختياريالأنواع المراد استلامها (Update). إذا تُركت فارغة فكل الأنواع الافتراضية (message، edited_message، callback_query). أما أنواع الصوت فـلا تصل إلا إذا كتبت أسماءها. وتُحفظ القائمة التي تمرّرها إعداداً للبوت وتُستخدم في الاستدعاءات التالية وفي webhook أيضاً (وإذا لم تمرّرها تبقى القيمة السابقة كما هي)

القيمة المعادة: Array of Update

setWebhook

POST/bot<token>/setWebhook

لاستلام التحديثات على عنوان HTTPS. والشرح المفصّل في مستند Webhook.

المعاملالنوعإلزاميالوصف
urlStringنعمعنوان https:// عام. والسلسلة الفارغة تحذف webhook
secret_tokenStringاختياريمن 1 إلى 256 حرفاً، A-Z a-z 0-9 _ -. يُرسل في ترويسة الطلب X-Telegram-Bot-Api-Secret-Token
allowed_updatesArray of Stringاختياريمن بين message، edited_message، callback_query. إذا تُركت فارغة فهذه الثلاثة كلها. أما أنواع الصوت (voice_call، voice_call_tool_query، voice_call_transcript) فلا تصل إلا إذا كتبت أسماءها. وإذا لم تمرّرها تبقى القيمة السابقة كما هي
drop_pending_updatesBooleanاختياريإهمال التحديثات المنتظرة
max_connectionsIntegerاختياريمن 1 إلى 100، والافتراضي 40. تُحفظ فقط، والتسليم تحديث واحد في كل مرة لكل بوت
certificateInputFileغير مدعوم400 — استخدم شهادة عامة
ip_addressStringيُتجاهل

القيمة المعادة: True

deleteWebhook

POST/bot<token>/deleteWebhook

تحذف webhook وتعود إلى getUpdates. وتنجح حتى لو لم يكن هناك webhook.

المعاملالنوعإلزاميالوصف
drop_pending_updatesBooleanاختياريإهمال التحديثات المنتظرة

القيمة المعادة: True

getWebhookInfo

GET/bot<token>/getWebhookInfo

حالة webhook. بلا معاملات. وإذا لم يكن هناك webhook فإن url سلسلة فارغة.

القيمة المعادة: WebhookInfo

الطرق

الطريقةما تفعله
getMeمعلومات البوت نفسه
sendMessageإرسال نص (مع الأزرار)
sendPhotoإرسال صورة
sendDocumentإرسال ملف
sendLocationإرسال موقع (بما في ذلك الموقع المباشر)
sendVenueإرسال مكان (موقع له اسم وعنوان)
sendContactإرسال بطاقة جهة اتصال
editMessageLiveLocation · stopMessageLiveLocationتحديث الموقع المباشر أو إيقافه
editMessageTextتعديل نص رسالة مرسلة وأزرارها
editMessageCaptionتعديل وصف الصورة
editMessageReplyMarkupتعديل الأزرار فقط
deleteMessageحذف رسالة
answerCallbackQueryالرد على ضغط زر
sendChatActionإظهار «يكتب الآن» (يُقبل الطلب فقط)
getChatمعلومات المحادثة
getFileمسار تنزيل صورة مستلمة
setMyCommands · getMyCommands · deleteMyCommandsقائمة الأوامر
logOut · closeللتوافق (لا تفعل شيئاً)
getUpdates · setWebhook · deleteWebhook · getWebhookInfoاستلام التحديثات (أعلاه)
setVoiceCallSettings · getVoiceCallSettings · endVoiceCall · sendVoiceCallContext · getVoiceCallUsage · startVoiceCall · answerVoiceCallToolQuery · setVoiceCallApiKey · setVoiceCallMcpServer …البوتات الصوتية (راجع المكالمات الصوتية أدناه)
ما يمكن وضعه في chat_id

في المحادثة الفردية معرّف الشخص (عدد موجب)، وفي المجموعة العادية معرّف المجموعة (عدد سالب)، أو اسم مستخدم الشخص ("@hana_lee"). ويمكن معرفة كل ذلك من chat.id في التحديث. أما معرّفات القنوات والمجموعات الخارقة (-100…) فغير موجودة بعد (400 chat not found).

getMe

GET/bot<token>/getMe

تُستخدم للتحقق من صحة الرمز المميّز. بلا معاملات.

القيمة المعادة: User — ويُضاف للبوت can_join_groups (true)، وcan_read_all_group_messages (true)، وsupports_inline_queries (false)، وcan_connect_to_business (false)، وhas_main_web_app (false).

sendMessage

POST/bot<token>/sendMessage

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها (انظر المربع أعلاه)
textStringنعممن 1 إلى 4,096 حرفاً. يُرسل النص كما هو
reply_markupInlineKeyboardMarkup · ReplyKeyboardMarkup · ReplyKeyboardRemove · ForceReplyاختياريالأزرار
disable_notificationBooleanاختياريالإرسال دون صوت
parse_mode، entities، reply_parameters، link_preview_options …يُتجاهلتُقبل لكنها لا تُستخدم. ولا يُطبّق أي تنسيق

القيمة المعادة: الرسالة المرسلة Message

للإرسال إلى شخص يجب أن يكون هو من بدأ المحادثة مع البوت (403 Forbidden: bot can't initiate conversation with a user). وللإرسال إلى مجموعة يجب أن يكون البوت عضواً فيها.

sendPhoto

POST/bot<token>/sendPhoto

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها
photoInputFile أو Stringنعمملف مرفوع بصيغة multipart/form-data (حتى 10MB، بصيغ JPEG وPNG وGIF)، أو file_id لصورة استلمتها من قبل. عناوين URL غير مدعومة بعد
captionStringاختياريمن 0 إلى 1,024 حرفاً
reply_markupمثل sendMessageاختياري
disable_notificationBooleanاختياري

القيمة المعادة: الرسالة المرسلة Message (مع file_id جديد في photo)

sendDocument

POST/bot<token>/sendDocument

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها
documentInputFile أو Stringنعمملف مرفوع بصيغة multipart/form-data (بلا قيد على الصيغة، وحتى 20MB)، أو file_id لملف استلمته من قبل. عناوين URL غير مدعومة بعد
filenameStringاختياريالاسم الذي يظهر للجهة المستلِمة. وإن لم تحدّده استُخدم اسم الملف المرفوع
captionStringاختياريمن 0 إلى 1,024 حرفاً
reply_markupمثل sendMessageاختياري
disable_notificationBooleanاختياري
thumbnail، disable_content_type_detectionيُتجاهلتُقبل لكنها لا تُستخدم

القيمة المعادة: الرسالة المرسلة Message (مع file_id جديد في document)

يُستنتج النوع (mime_type) من امتداد اسم الملف. والملفات المرسلة من جهة التطبيق تصل إلى 2GB، أما ما يرفعه البوت أو ينزّله عبر HTTP فحدّه 20MB كما في Telegram.

sendLocation

POST/bot<token>/sendLocation

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها
latitude، longitudeFloatنعمخط العرض (من −90 إلى 90) وخط الطول (من −180 إلى 180). وما يخرج عن النطاق يعطي 400 Bad Request: GEO_POINT_INVALID
horizontal_accuracyFloatاختيارينصف قطر عدم الدقة بالأمتار، من 0 إلى 1,500. يُقرَّب إلى عدد صحيح عند الحفظ
live_periodIntegerاختيارييجعله موقعاً مباشراً: من 60 إلى 86,400 ثانية، أو 2147483647 (0x7FFFFFFF) حتى الإيقاف. وأي قيمة أخرى تعطي 400 Bad Request: wrong live_period
headingIntegerاختيارياتجاه حركة الموقع المباشر، من 1 إلى 360 درجة
proximity_alert_radiusIntegerاختيارينصف قطر تنبيه الاقتراب للموقع المباشر، بالأمتار. يُحفظ ويُعرض، لكن لا يُرسَل أي تنبيه بعد
reply_markupمثل sendMessageاختياري
disable_notificationBooleanاختياري

القيمة المعادة: الرسالة المرسلة Message (مع Location في location)

sendVenue

POST/bot<token>/sendVenue

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها
latitude، longitudeFloatنعمموضع المكان (كما في sendLocation)
titleStringنعماسم المكان
addressStringنعمالعنوان
foursquare_id، foursquare_typeStringاختياريمعرّف المكان ونوعه في Foursquare، يُمرَّران كما وصلا
google_place_id، google_place_typeStringاختياريمعرّف المكان ونوعه في Google. لا يُستخدمان إلا إذا لم يوجد foursquare_id
reply_markupمثل sendMessageاختياري
disable_notificationBooleanاختياري

القيمة المعادة: الرسالة المرسلة Message (مع Venue في venue، والنقطة نفسها في location)

بدون title أو address تكون النتيجة 400 Bad Request: title and address are required.

sendContact

POST/bot<token>/sendContact

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة المرسل إليها
phone_numberStringنعمرقم الهاتف، يُمرَّر كما كُتب
first_nameStringنعمالاسم الأول
last_nameStringاختيارياسم العائلة
vcardStringاختياريبيانات إضافية بصيغة vCard، حتى 64KB
reply_markupمثل sendMessageاختياري
disable_notificationBooleanاختياري

القيمة المعادة: الرسالة المرسلة Message (مع Contact في contact)

بطاقة جهة الاتصال التي يرسلها بوت لا تحمل user_id أبداً، حتى لو كان الرقم لحساب في Pabal — فالبوت ليست له جهات اتصال، ولو مُلئ هذا الحقل لاستطاع البوت أن يعرف صاحب أي رقم بإرسال بطاقة لكل رقم. وبدون phone_number أو first_name تكون النتيجة 400 Bad Request: phone_number and first_name are required.

editMessageLiveLocation

POST/bot<token>/editMessageLiveLocation

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة التي فيها الرسالة
message_idIntegerنعمالموقع المباشر المراد تحديثه (مما أرسله البوت)
latitude، longitudeFloatنعمالموضع الجديد
horizontal_accuracyFloatاختيارينصف قطر عدم الدقة بالأمتار، من 0 إلى 1,500
headingIntegerاختيارياتجاه الحركة، من 1 إلى 360 درجة
proximity_alert_radiusIntegerاختيارينصف قطر تنبيه الاقتراب بالأمتار. والقيمة 0 تُطفئه
live_periodIntegerاختياريمدة المشاركة الجديدة، بالثواني محسوبةً من وقت إرسال الرسالة. لا يمكن تمديدها بأكثر من يوم فوق المدة الحالية، و2147483647 تعني حتى الإيقاف
reply_markupInlineKeyboardMarkupاختياريالأزرار الجديدة
inline_message_idStringغير مدعوم400 لعدم وجود الوضع المضمّن (inline)

القيمة المعادة: الرسالة المعدّلة Message

الموقع المباشر الذي انتهى بالفعل — بإيقافه أو بانقضاء مدته — لا يمكن تحديث موضعه ولا إحياؤه بتمديد مدته (400 Bad Request: message can't be edited). والأمر نفسه للرسالة التي ليست موقعاً مباشراً.

الحركة التي تأتي بعد أقل من 10 ثوانٍ من آخر حركة طُبِّقت، أو التي تقل عن 10 أمتار، يتجاوزها الخادم دون حفظها. أما الإيقاف وتغيير المدة أو نصف قطر التنبيه فتُطبَّق دائماً. وعند تجاوز حركة ما، تُظهر الرسالة Message المعادة آخر موضع طُبِّق، لذا لا بأس بإرسال حركة كل بضع ثوانٍ.

stopMessageLiveLocation

POST/bot<token>/stopMessageLiveLocation

المعاملات: chat_id، وmessage_id، وreply_markup (اختياري). يوقف الموقع المباشر عند آخر موضع له. تُختصر مدة المشاركة إلى الوقت الذي مضى فعلاً، فتعرضه كل التطبيقات موقعاً منتهياً. وإذا كان قد أُوقف أو انتهى من قبل فالنتيجة 400 Bad Request: message is not modified: …. القيمة المعادة: الرسالة المعدّلة Message.

editMessageText

POST/bot<token>/editMessageText

المعاملالنوعإلزاميالوصف
chat_idInteger أو Stringنعمالمحادثة التي فيها الرسالة
message_idIntegerنعمالرسالة المراد تعديلها (مما أرسله البوت)
textStringنعمالنص الجديد، من 1 إلى 4,096 حرفاً
reply_markupInlineKeyboardMarkupاختياريالأزرار الجديدة. إذا حذفته تختفي الأزرار (كما في Telegram)
inline_message_idStringغير مدعوم400 لعدم وجود الوضع المضمّن (inline)

القيمة المعادة: الرسالة المعدّلة Message. ينعكس التعديل فوراً في التطبيق، والرسائل التي يعدّلها الأشخاص تصل إلى البوت على شكل edited_message.

إذا كان النص والأزرار مطابقين لما سبق فالنتيجة 400 Bad Request: message is not modified: …، وإذا حاولت تعديل رسالة غيرك فالنتيجة 400 Bad Request: message can't be edited.

editMessageCaption

POST/bot<token>/editMessageCaption

المعاملات: chat_id، وmessage_id، وcaption (من 0 إلى 1,024 حرفاً، وحذفه يمسح الوصف)، وreply_markup. القيمة المعادة: الرسالة المعدّلة Message.

editMessageReplyMarkup

POST/bot<token>/editMessageReplyMarkup

تُبقي النص كما هو وتغيّر الأزرار فقط. المعاملات: chat_id، وmessage_id، وreply_markup (حذفه يمسح الأزرار). القيمة المعادة: الرسالة المعدّلة Message.

deleteMessage

POST/bot<token>/deleteMessage

المعاملات: chat_id، وmessage_id. تحذف الرسالة من طرفي المحادثة. وإذا لم تكن الرسالة موجودة فالنتيجة 400 Bad Request: message to delete not found. القيمة المعادة: True.

answerCallbackQuery

POST/bot<token>/answerCallbackQuery

ترد على زر ضغطه شخص (CallbackQuery). ويمكنك الرد خلال 10 ثوانٍ ومرة واحدة فقط.

المعاملالنوعإلزاميالوصف
callback_query_idStringنعمقيمة callback_query.id من التحديث
textStringاختيارينص يظهر لحظات أعلى الشاشة
show_alertBooleanاختياريإذا كانت true يظهر النص في نافذة فيها زر تأكيد
urlStringاختياريعنوان يفتحه التطبيق
cache_timeIntegerاختياريعدد الثواني التي يتذكر فيها التطبيق هذا الرد

القيمة المعادة: True. وإذا تأخرت كثيراً أو كنت قد رددت من قبل فالنتيجة 400 Bad Request: query is too old and response timeout expired or query ID is invalid.

sendChatAction

POST/bot<token>/sendChatAction

تُقبل للتوافق وتعيد True، لكنها لا تُظهر بعدُ «يكتب الآن…» في التطبيق.

getChat

GET/bot<token>/getChat?chat_id=…

المعامل: chat_id (رقم). إذا كان شخصاً فذلك الشخص، وإذا كانت مجموعة فلا يشمل إلا المجموعات التي البوت عضو فيها. القيمة المعادة: Chat. وإذا لم تكن موجودة أو لم يكن مسموحاً برؤيتها فالنتيجة 400 Bad Request: chat not found.

getFile

GET/bot<token>/getFile?file_id=…

تحصل بواسطة file_id لصورة مستلمة على مسار تنزيلها. القيمة المعادة: File. ثم تنزّلها من هذا العنوان.

https://pabal.me/file/bot<token>/<file_path>

وfile_id هو أيضاً إذن بالحصول على تلك الصورة. وإذا كانت القيمة خاطئة فالنتيجة 400 Bad Request: wrong file identifier/HTTP URL specified.

setMyCommands

POST/bot<token>/setMyCommands

المعاملالنوعإلزاميالوصف
commandsArray of BotCommandنعم100 أمر كحد أقصى
language_codeStringاختياريتُحفظ كقائمة خاصة بتلك اللغة. والتطبيق لا يعرض حالياً إلا القائمة الافتراضية التي لا رمز لغة لها
scopeBotCommandScopeيُتجاهل

القيمة المعادة: True. وإذا خالفت القائمة القواعد فلا يُحفظ شيء: 400 Bad Request: BOT_COMMAND_INVALID (أمر)، BOT_COMMAND_DESCRIPTION_INVALID (وصف فارغ أو يتجاوز 256 حرفاً)، BOT_COMMANDS_TOO_MUCH (أكثر من 100).

getMyCommands

GET/bot<token>/getMyCommands

المعامل: language_code (اختياري). القيمة المعادة: Array of BotCommand.

deleteMyCommands

POST/bot<token>/deleteMyCommands

المعامل: language_code (اختياري). تُفرغ تلك القائمة. القيمة المعادة: True.

logOut · close

في Telegram تُستخدم هاتان الطريقتان عند الانتقال إلى خادم Bot API محلي. وبما أنه لا يوجد في Pabal مكان يُنتقل إليه، فهما تُقبلان فقط وتعيدان True. ولإبطال الرمز المميّز استخدم الأمر /revoke لدى BotFather.

الكائنات

تعني اختياري بجانب الحقل أنه قد لا يكون موجوداً. أما حقول Telegram الأخرى غير المذكورة هنا فلا يرسلها Pabal.

Update

تحديث جديد واحد. يحتوي على update_id وواحد من الحقول أدناه.

الحقلالنوعالوصف
update_idIntegerرقم يزيد بمقدار 1. يُستخدم في offset الخاص بـ getUpdates
message اختياريMessageرسالة جديدة إلى البوت (محادثة فردية، أو كل الرسائل في مجموعة البوت عضو فيها)
edited_message اختياريMessageرسالة عُدّلت
callback_query اختياريCallbackQueryضغط زر مضمّن
voice_call اختياريVoiceCallبداية مكالمة إلى بوت صوتي أو مكالمة أجراها ونهايتها (لا يصل إلا إذا طُلب بالاسم)
voice_call_tool_query اختياريVoiceCallToolQueryأداة من أدوات البوت استدعاها النموذج أثناء المكالمة (لا يصل إلا إذا طُلب بالاسم)
voice_call_transcript اختياريVoiceCallTranscriptدور واحد من نص المحادثة أثناء المكالمة (لا يصل إلا إذا طُلب بالاسم)

User

الحقلالنوعالوصف
idIntegerمعرّف المستخدم (لا معنى له إلا داخل هذا الخادم)
is_botBooleantrue إذا كان بوتاً
first_nameStringالاسم. وللحسابات المحذوفة Deleted Account
last_name اختياريStringاسم العائلة
username اختياريStringاسم المستخدم (دون @)

Chat

الحقلالنوعالوصف
idIntegerللشخص معرّفه (عدد موجب)، وللمجموعة العادية عدد سالب
typeStringprivate أو group
title اختياريStringاسم المجموعة (group)
first_name، last_name، username اختياريStringاسم الطرف الآخر واسم المستخدم الخاص به (private)

Message

الحقلالنوعالوصف
message_idIntegerرقم الرسالة داخل هذه المحادثة
from اختياريUserالمرسل
chatChatالمحادثة التي فيها الرسالة
dateIntegerوقت الإرسال (بتوقيت يونكس بالثواني)
edit_date اختياريIntegerوقت آخر تعديل
text اختياريStringالنص (موجود دائماً ما لم تكن رسالة صورة أو ملف أو موقع أو مكان أو جهة اتصال)
entities اختياريArray of MessageEntityالأوامر والإشارات وعناوين URL والوسوم داخل النص
photo اختياريArray of PhotoSizeالصورة (في Pabal عنصر واحد هو الأصل)
document اختياريDocumentالملف
location اختياريLocationموقع أو موقع مباشر. ورسالة المكان تحمل موقعها هنا أيضاً
venue اختياريVenueالمكان
contact اختياريContactبطاقة جهة الاتصال
caption اختياريStringوصف الصورة
caption_entities اختياريArray of MessageEntityالأوامر والإشارات وعناوين URL والوسوم داخل الوصف
reply_markup اختياريInlineKeyboardMarkupالأزرار المضمّنة المرفقة بالرسالة

MessageEntity

الحقلالنوعالوصف
typeStringbot_command، mention، url، hashtag
offsetIntegerموضع البداية (بوحدات ترميز UTF-16)
lengthIntegerالطول (بوحدات ترميز UTF-16)

يستخرجها الخادم من النص تلقائياً ويضيفها. أما كيانات التنسيق مثل الغامق والمائل فغير موجودة بعد.

PhotoSize

الحقلالنوعالوصف
file_idStringالمعرّف المستخدم للتنزيل (getFile) ولإعادة الإرسال (sendPhoto)
file_unique_idStringالقيمة نفسها للصورة نفسها حتى لو اختلف البوت. ولا يصلح للتنزيل
width، heightIntegerالأبعاد بالبكسل
file_sizeIntegerبالبايت

Document

الحقلالنوعالوصف
file_idStringالمعرّف المستخدم للتنزيل (getFile) ولإعادة الإرسال (sendDocument)
file_unique_idStringالقيمة نفسها للملف نفسه حتى لو اختلف البوت. ولا يصلح للتنزيل
file_nameStringالاسم الذي أعطته الجهة المرسِلة
mime_typeStringالنوع الذي ذكرته الجهة المرسِلة
file_sizeIntegerبالبايت

Location

الحقلالنوعالوصف
latitude، longitudeFloatخط العرض وخط الطول
horizontal_accuracy اختياريFloatنصف قطر عدم الدقة بالأمتار
live_period اختياريIntegerمدة مشاركة الموقع المباشر، بالثواني محسوبةً من وقت إرسال الرسالة. وعند الإيقاف تُختصر إلى الوقت الذي مضى فعلاً
heading اختياريIntegerاتجاه الحركة، من 1 إلى 360 درجة
proximity_alert_radius اختياريIntegerنصف قطر تنبيه الاقتراب بالأمتار

الموقع المباشر الذي يشاركه شخص ما يصل من جديد على شكل edited_message في كل مرة يطبّق فيها الخادم حركة.

Venue

الحقلالنوعالوصف
locationLocationموضع المكان
titleStringاسم المكان
addressStringالعنوان
foursquare_id، foursquare_type اختياريStringمعرّف المكان ونوعه في Foursquare
google_place_id، google_place_type اختياريStringمعرّف المكان ونوعه في Google

Contact

الحقلالنوعالوصف
phone_numberStringالرقم كما كتبه المرسل
first_nameStringالاسم الأول
last_name اختياريStringاسم العائلة
user_id اختياريIntegerحساب Pabal صاحب هذا الرقم. لا يظهر إلا إذا كان المرسل قد حفظ ذلك الشخص في جهات اتصاله، أو كان هو نفسه ذلك الشخص
vcard اختياريStringبيانات إضافية بصيغة vCard

File

الحقلالنوعالوصف
file_id، file_unique_idStringمثل PhotoSize
file_sizeIntegerبالبايت
file_pathStringبالشكل photos/<file_id>.jpg أو documents/<file_id>. أضِفه بعد /file/bot<token>/ لتنزيل الملف

CallbackQuery

الحقلالنوعالوصف
idStringالمعرّف الذي تمرّره إلى answerCallbackQuery
fromUserالشخص الذي ضغط الزر
message اختياريMessageالرسالة المرفق بها الزر
chat_instanceStringقيمة تمثّل تلك المحادثة
data اختياريStringقيمة callback_data الخاصة بالزر

InlineKeyboardMarkup

inline_keyboard: Array of Array of InlineKeyboardButton — المصفوفة الخارجية هي الصفوف، والداخلية هي أزرار الصف الواحد. والحد الأقصى 100 صف و100 زر في الرسالة الواحدة.

InlineKeyboardButton

الحقلالنوعالوصف
textStringنص الزر
callback_data أحدهماStringالقيمة التي تذهب إلى البوت عند الضغط، من 1 إلى 64 بايت
url أحدهماStringالعنوان الذي يُفتح عند الضغط

الأنواع الأخرى مثل switch_inline_query وweb_app وlogin_url وpay غير متاحة بعد (400).

ReplyKeyboardMarkup

الحقلالنوعالوصف
keyboardArray of Array of KeyboardButtonلوحة الأزرار أسفل حقل الإدخال
resize_keyboard، one_time_keyboard، is_persistent، selective اختياريBooleanملاءمة الحجم · الإخفاء بعد استخدام واحد · الظهور الدائم · لأشخاص محددين فقط
input_field_placeholder اختياريStringالنص الإرشادي في حقل الإدخال

KeyboardButton

سلسلة نصية واحدة، أو كائن فيه text والحقلان الاختياريان request_contact (إرسال جهة اتصالي) وrequest_location (إرسال موقعي، Boolean).

ReplyKeyboardRemove

{"remove_keyboard": true} — يُخفي لوحة الأزرار. وselective اختياري.

ForceReply

{"force_reply": true} — يفتح التطبيق حقل الإدخال في وضع الرد على هذه الرسالة. وselective وinput_field_placeholder اختياريان.

BotCommand

الحقلالنوعالوصف
commandStringمن 1 إلى 32 حرفاً من الأحرف اللاتينية الصغيرة والأرقام والشرطة السفلية (دون /)
descriptionStringمن 1 إلى 256 حرفاً

WebhookInfo

الحقلالنوعالوصف
urlStringعنوان webhook، أو سلسلة فارغة إن لم يوجد
has_custom_certificateBooleanدائماً false
pending_update_countIntegerعدد التحديثات التي تنتظر التسليم
ip_address اختياريStringعنوان IP الذي أُرسل إليه آخر مرة
last_error_date اختياريIntegerوقت آخر فشل (بتوقيت يونكس بالثواني)
last_error_message اختياريStringسبب آخر فشل (القائمة)
max_connections اختياريIntegerالقيمة التي مرّرتها إلى setWebhook
allowed_updates اختياريArray of Stringالقيمة التي مرّرتها إلى setWebhook

المكالمات الصوتية

هذه طرق خاصة بـ Pabal وحده. البوت الصوتي بوت يرد فيه نموذج صوتي بالذكاء الاصطناعي عندما يتصل به شخص من التطبيق، وبهذه الطرق تضبط إعدادات ذلك النموذج وتتعامل مع المكالمات. وما يجب تفعيله وطريقة التفعيل والأمثلة في دليل البوتات الصوتية. والطرق موجودة حتى على الخوادم التي عُطّل فيها الصوت، فيمكنك قراءة الإعدادات، لكن إذا كان الصوت معطّلاً أو لم يسمح المشغّل للبوت بعد فلا يمكن تغيير أي إعداد سوى التعطيل والحذف (403 VOICE_NOT_AVAILABLE).

setVoiceCallSettings

POST/bot<token>/setVoiceCallSettings

تغيّر إعدادات الصوت للبوت. لا يتغيّر إلا ما أرسلته، ويُفحص الكل ثم يُكتب مرة واحدة أو يُرفض كله. ولكل بوت 30 مرة في الساعة (محسوبة مع @BotFather).

المعاملالنوعإلزاميالوصف
enabledBooleanاختياريلا يمكن التفعيل إلا بعد الموافقة على قواعد البوتات الصوتية لدى @BotFather (403 VOICE_RULES_NOT_ACCEPTED). والتعطيل ممكن دائماً
instructionsStringاختياريتعليمات النموذج، حتى 8,192 بايت. و"" تعني الحذف (غير مسموح لبوت مفعّل في الوضع المُدار)
greetingStringاختياريالتحية الأولى، حتى 512 بايت. وإذا كانت "" يحيّي النموذج من تلقاء نفسه
voiceStringاختياريمعرّف الصوت، الافتراضي kore (القائمة)
languageStringاختياريko-KR (الافتراضي) · en-US · ja-JP · cmn-CN · fr-FR · es-US · id-ID · vi-VN · ar-EG (القائمة). ولا فرق بين الأحرف الكبيرة والصغيرة، ويُحفظ zh-CN على أنه cmn-CN. والبوت الذي ليست لغته الكورية أو الإنجليزية لا يستقبل المكالمات إلا بعد أن يقرأ المشغّل التعليمات والتحية ويسمح له
max_call_durationIntegerاختياريبالثواني، من 60 إلى limits.max_call_duration
max_concurrent_callsIntegerاختياريمن 1 إلى limits.max_concurrent_calls
toolsArray of VoiceCallToolاختياريأدوات البوت التي يستدعيها النموذج أثناء المكالمة: {"name", "description", "parameters"?, "timeout_ms"?}. والقواعد في تعريف الأدوات. وفي النموذج (form) تكون سلسلة JSON
transcriptBooleanاختياريمفتاح تشغيل نص المحادثة. ولا يُفعَّل إلا بعد الموافقة على شروط مالكي البوتات
modeStringاختياريmanaged (الوضع المُدار: نموذج الذكاء الاصطناعي في Pabal) أو stream (وضع الصوت الخام)
stream_url، stream_secretStringاختياريمع mode=stream. ولا يُرسل السرّ إلا في جسم الطلب

القيمة المعادة: True

getVoiceCallSettings

GET/bot<token>/getVoiceCallSettings

بلا معاملات. الإعدادات الحالية، وهل يستطيع البوت الآن استقبال المكالمات (available، unavailable_reason)، وحدود الخادم، وقوائم الأصوات واللغات، ووجهة استعلامات الأدوات ونص المحادثة، وحالة مفتاح المالك ووضع الصوت الخام وخوادم MCP. ولا تظهر المفاتيح والأسرار، بل بصماتها فقط. والحقول موضّحة في البوتات الصوتية — عرض الإعدادات الحالية.

القيمة المعادة: VoiceCallSettings (كائن)

endVoiceCall

POST/bot<token>/endVoiceCall

المعاملالنوعإلزاميالوصف
voice_call_idStringنعمvoice_call.id
farewellBooleanاختياريالافتراضي true: يودّع النموذج بإيجاز ثم ينهي المكالمة (وإذا لم تنتهِ خلال 10 ثوانٍ ينهيها الخادم). وfalse تعني الإنهاء فوراً

القيمة المعادة: True. وإذا لم تكن مكالمة جارية لهذا البوت فالنتيجة 400 VOICE_CALL_NOT_FOUND.

sendVoiceCallContext

POST/bot<token>/sendVoiceCallContext

المعاملالنوعإلزاميالوصف
voice_call_idStringنعممكالمة جارية
textStringنعمملاحظة من مالك البوت إلى النموذج. حتى 2,000 حرف · 6,144 بايت، وتُفحص وفق قواعد المحتوى
respondBooleanاختياريالافتراضي false. وإذا كانت true يتفاعل النموذج فوراً

القيمة المعادة: True. قبل الاتصال VOICE_CALL_NOT_ACTIVE، ولمكالمات الصوت الخام VOICE_CONTEXT_NOT_SUPPORTED، وللنص الطويل جداً VOICE_CONTEXT_TOO_LONG، وإذا تجاوزت 10 ملاحظات في الدقيقة للمكالمة الواحدة 429.

getVoiceCallUsage

GET/bot<token>/getVoiceCallUsage

المعاملالنوعإلزاميالوصف
periodStringاختياريtoday (الافتراضي) أو month
monthStringاختياريYYYY-MM، ولا يُستخدم إلا مع period=month

القيمة المعادة: period، from_date، to_date، calls، seconds، missed، refused (busy·budget·unavailable)، platform_seconds، own_key_seconds، remaining_seconds_today (bot·owner)، وoutbound (today·limits) لبوت فعّل الاتصال ولو مرة — وحدود الأيام وفق المنطقة الزمنية للخادم

startVoiceCall

POST/bot<token>/startVoiceCall

يتصل البوت بشخص. لا يستطيع ذلك إلا بوت فعّل مالكه الميزة في @BotFather وراجعه المشغّل، ولا يتصل إلا بمن أذِن لذلك البوت. والردود وطريقة فحص الطلبات في البوتات الصوتية — الاتصال.

المعاملالنوعإلزاميالوصف
user_idIntegerنعمالشخص المراد الاتصال به
purposeStringنعمما اختاره البوت من reminder، wake_up، delivery، appointment
contextStringنعمما يعرفه النموذج وحده، حتى 1,000 حرف و3,072 بايت، ويُفحص بقواعد المحتوى
max_durationIntegerاختياريأقصى مدة بعد الرد بالثواني، 30–300 (حتى الحد الأقصى للبوت). الافتراضي 180
ring_timeoutIntegerاختياريثواني الرنين، 30–45. الافتراضي 40

القيمة المعادة: {"voice_call_id": "…"} — تعني فقط أن الطلب استُلم؛ أما هل رنّ وهل ردّ أحد فيصل في تحديثات voice_call. والرفض: 403 VOICE_OUTBOUND_OFF: <reason>، و403 USER_UNAVAILABLE (المحتوى نفسه دائماً)، و429، و503 VOICE_UNAVAILABLE. ولا يمكن استدعاؤها من رد الـwebhook.

answerVoiceCallToolQuery

POST/bot<token>/answerVoiceCallToolQuery

المعاملالنوعإلزاميالوصف
tool_query_idStringنعمid الخاص بـ VoiceCallToolQuery
resultString · Object · Arrayأحدهمانتيجة الأداة، حتى 16,384 بايت
errorStringأحدهماعبارة فشل من البوت، حتى 512 بايت

القيمة المعادة: True. الرد الأول هو الأخير. وإذا تأخرت فالنتيجة 400 TOOL_QUERY_EXPIRED: answered|timeout|cancelled|call_ended|unreachable، وللمعرّف المجهول TOOL_QUERY_ID_INVALID، وإذا رُفض الرد TOOL_RESULT_EMPTY·TOOL_RESULT_INVALID·TOOL_RESULT_TOO_LONG·TOOL_ERROR_TOO_LONG·TOOL_RESULT_REFUSED: <code>. ويمكنك أيضاً الرد على POST استعلام الأداة الوارد عبر webhook في جسم الاستجابة.

setVoiceCallApiKey · deleteVoiceCallApiKey

POST/bot<token>/setVoiceCallApiKey

المعاملالنوعإلزاميالوصف
providerStringنعمgoogle (مفتاح JSON لحساب خدمة Vertex AI) أو openai (sk-…)
api_keyStringنعمالمفتاح. في جسم الطلب فقط (وفي سلسلة الاستعلام 400)، حتى 8KiB

القيمة المعادة: True — ولا يُحفظ المفتاح إلا بعد اجتياز جلسة الاختبار في البوابة. API_KEY_INVALID، API_KEY_NO_REALTIME_ACCESS، 503 API_KEY_CHECK_UNAVAILABLE (لا يُحفظ)، 403 VOICE_OWN_KEY_NOT_AVAILABLE (هذا الخادم لا يقبل مفاتيح المالكين). وdeleteVoiceCallApiKey بلا معاملات ويعيد دائماً True. ولا يمكن استدعاء أيٍّ من الطريقتين عبر bots.sendCustomRequest، ولا يمكن استدعاء setVoiceCallApiKey عبر استجابة webhook أيضاً. والتفاصيل في مفتاح النموذج الخاص بالمالك.

طرق خوادم MCP

الطريقةالمعاملاتالقيمة المعادة
setVoiceCallMcpServerlabel، url، auth (كائن)، واختيارياً audience، allowed_tools، requested_level، timeout_ms، tools (تجاوز التصنيف)، declaration، auto_repinنتيجة التسجيل (status، job_id). وإذا تغيّرت جهة الاستلام فالنتيجة 400 MCP_CHANGE_NEEDS_CONFIRMATION ثم التأكيد لدى @BotFather
refreshVoiceCallMcpServerlabelإعادة الفحص (refreshing: true، job_id)
deleteVoiceCallMcpServerlabelTrue — ممكن حتى إذا كان MCP معطّلاً
getVoiceCallMcpBindingلا يوجدiss، sub (bot:<id>)، issuer_document، jwks_uri، audiences
createVoiceCallMcpClientKeylabeljwk العام وthumbprint (المفتاح الخاص لا يغادر Pabal)

تُرسل auth والأسرار في جسم الطلب فقط. وعلى خادم عُطّلت فيه MCP تكون النتيجة 403 VOICE_NOT_AVAILABLE: MCP tools are not available on this server. والتفاصيل في البوتات الصوتية — خوادم MCP.

لاستلام تحديثات الصوت

voice_call وvoice_call_tool_query وvoice_call_transcript لا تصل إلا إذا طُلبت بأسمائها — اكتبها في allowed_updates الخاصة بـ getUpdates أو setWebhook. ولا تصل بالقائمة الفارغة، وما يقع قبل طلبها لا يُحفظ. وتصل استعلامات الأدوات في طلب POST منفصل إذا كان هناك webhook، وإذا استدعيت getUpdates خلال آخر 15 ثانية فإنها تأتي في مقدمة getUpdates التالي.

VoiceCall

الحقلالنوعالوصف
idStringمعرّف المكالمة (عدد عشري بلا إشارة)
directionStringincoming (مكالمة إلى البوت) أو outgoing (مكالمة أجراها البوت). موجود دائماً
eventStringstarted، ended، missed، refused؛ ولمكالمة أجراها البوت started، ended، not_answered، failed
from اختياريUserللمكالمات إلى البوت فقط — المتصل: id، is_bot، first_name، last_name، language_code. ولا يتضمن اسم المستخدم ولا رقم الهاتف
to اختياريObjectللمكالمات التي أجراها البوت فقط — {"id": …}، معرّف المتلقّي وحده
purpose اختياريStringللمكالمات التي أجراها البوت فقط — غرض الطلب
dateIntegerوقت الحدوث (بتوقيت يونكس بالثواني). في started هو وقت انتهاء تبادل المفاتيح لمكالمة التطبيق، ووقت اتصال صوت الساعة لمكالمة Apple Watch. ويتأخر ended حتى 10 ثوانٍ على الخادم الذي ينتظر نص المحادثة أو فُعّل فيه الاحتفاظ بالمحادثة. وفي المكالمات التي أجراها البوت يتأخر ended للمكالمة التي رُدّ عليها دائماً حتى 10 ثوانٍ أياً كانت إعدادات الخادم، لأن الخادم ينتظر استخدام البوابة
max_duration اختياريIntegerأقصى مدة لهذه المكالمة (بالثواني) — started، ended
start_date، duration اختياريIntegerوقت الاتصال وعدد ثوانيه (بساعة الخادم) — ended
end_reason اختياريStringcaller (callee لمكالمة أجراها البوت)، bot، max_length، failed، operator، suspended — ended، missed
refused_reason اختياريStringbusy، budget، unavailable — refused
transcript اختياريObject{"turns": [{"role", "text", "offset_ms"}], "truncated"} — ended، عند تفعيل نص المحادثة. ولا يوجد أبداً في مكالمة أجراها البوت

لا يوجد في VoiceCall حقل يبيّن هل اختار المتصل الاحتفاظ بالمحادثة. وهذا مقصود — فذلك النص ملك المتصل ولا يصل إلى البوت. لذا على الخادم الذي فُعّل فيه الاحتفاظ بالمحادثة ينتظر ended المدة نفسها في كل المكالمات غير الصوت الخام، ويكون رقم الرسالة التالية لسجل المكالمة أكبر من رقم السجل بـ 31 على الأقل في كل المكالمات (لأن الأرقام محجوزة مسبقاً).

VoiceCallToolQuery

الحقلالنوعالوصف
idStringالمعرّف الذي تمرّره إلى answerVoiceCallToolQuery
voice_call_idStringمعرّف المكالمة
fromUserالمتصل (الحقول نفسها كما في VoiceCall)
nameStringاسم الأداة
argumentsStringالوسائط، نصّ كائن JSON (فحصه الخادم)
budget_msIntegerالمهلة بالمللي ثانية، من لحظة الاستلام حتى الموعد الذي يجب أن يصل فيه الرد إلى الخادم

VoiceCallTranscript

الحقلالنوعالوصف
voice_call_idStringمعرّف المكالمة
seqIntegerرقم الدور
roleStringcaller أو bot
textStringالنص الذي كتبه الذكاء الاصطناعي. وإذا احتوى على رقم بطاقة أو رقم هوية وطنية تُستبدل الأرقام بـ *
is_finalBooleantrue دائماً
offset_ms، dateIntegerالمدة بالمللي ثانية منذ بدء صوت المكالمة، ووقت الحدوث

لا يصل إلا عبر HTTP Bot API. والمكالمة كاملة في transcript الخاص بـ voice_call المنتهية.

وضع الصوت الخام (mode=stream)

في وضع الصوت الخام يذهب صوت المكالمة إلى خادم مالك البوت بدلاً من نموذج الذكاء الاصطناعي في Pabal. عندما ترسل إلى setVoiceCallSettings القيم mode=stream وstream_url=wss://… وstream_secret=… (من 32 إلى 128 حرف ASCII قابل للطباعة، في جسم الطلب فقط)، تحاول بوابة Pabal الاتصال بذلك العنوان مرة واحدة (فحص تجريبي)، وإذا نجحت يُفعَّل الوضع. ويلزم لذلك قبول شروط مالكي البوتات، وإصدار من التطبيق يتضمن نافذة تأكيد الصوت الخام. والإعداد ونتائج الفحص والأمثلة في البوتات الصوتية — وضع الصوت الخام.

  • الاتصال: TLS 1.2 فأعلى، وشهادة عامة تطابق الاسم الوارد في URL، والبروتوكول الفرعي pabal.voice.v1، بلا ضغط، والرسالة الواحدة حتى 64KiB · والنصية حتى 4KiB، بلا إعادة توجيه.
  • التوقيع: X-Pabal-Voice-Signature: t=…,nonce=…,call=…,v1=HMAC-SHA256(stream_secret, "pabal-voice-stream/1\n<t>\n<nonce>\n<call>\n<host>\n<path?query>"). وhost هو مضيف URL الذي أبلغت به. تحقّق من 300 ثانية · وnonce لمرة واحدة · والمقارنة بالبايتات · وتطابق start.call_id مع call (التفاصيل).
  • الصوت: الرسائل النصية أحداث JSON، والثنائية PCM16 little-endian · أحادي القناة · 24 kHz. وصوت المتصل قطع طولها 20 ms (960 بايت).
  • Pabal ← البوت: start (مرة واحدة) · live (انتهى إعلان الذكاء الاصطناعي) · الصوت · mark · cleared · buffer_full · stop (← إغلاق 1000).
  • البوت ← Pabal: ready (خلال 3 ثوانٍ بعد start، وقبل أي شيء) · الصوت (بعد live) · clear · mark · hangup.

وشكل كل رسالة مفصّل في الجدول في البوتات الصوتية — المواصفة.

أخطاء طرق الصوت

جُمعت رموز أخطاء طرق الصوت ومعانيها في البوتات الصوتية — الأخطاء. وتأتي أخطاء 403 بالشكل Forbidden: <code>: <description> (VOICE_RULES_NOT_ACCEPTED، VOICE_NOT_AVAILABLE، VOICE_SUSPENDED، VOICE_OWNER_TERMS_NOT_ACCEPTED، VOICE_OWN_KEY_NOT_AVAILABLE، VOICE_STREAM_NOT_AVAILABLE، VOICE_OUTBOUND_OFF)، أما USER_UNAVAILABLE فيكون دائماً Forbidden: USER_UNAVAILABLE تماماً بلا وصف، وعند تجاوز الحد في الساعة تكون النتيجة 429 مع retry_after.

الاختلافات عن Telegram Bot API

  • أنواع التحديثات: لا يصل إلا message وedited_message وcallback_query، وأنواع البوتات الصوتية الخاصة بـ Pabal (voice_call، voice_call_tool_query، voice_call_transcript). ولا توجد منشورات القنوات، ولا الاستعلامات المضمّنة، ولا المدفوعات، ولا الاستطلاعات، ولا تغييرات الأعضاء (my_chat_member) وما شابهها.
  • التنسيق: يُتجاهل parse_mode وentities ويُرسل النص كما هو. ولا يُعرض تلقائياً إلا الأوامر والإشارات وعناوين URL والوسوم.
  • أنواع المحادثات: المحادثات الفردية والمجموعات العادية فقط. ولا توجد قنوات ولا مجموعات خارقة ولا مواضيع منتديات.
  • الوسائط: الصور والملفات (sendDocument) والمواقع والمواقع المباشرة والأماكن وجهات الاتصال فقط. ولا توجد رسائل تُشغَّل بوصفها فيديو أو صوتاً، ولا ملصقات، ولا ألبومات (sendMediaGroup)، ولا استطلاعات، ولا الإرسال عبر URL. والحدّ الأقصى للرفع والتنزيل عبر HTTP هو 20MB.
  • المواقع: تنبيه الاقتراب للموقع المباشر (proximity_alert_radius) يُحفظ فقط ولا يُرسَل. والحركات التي تقع خلال 10 ثوانٍ أو 10 أمتار تُتجاوز دون تطبيق، وبطاقة جهة الاتصال التي يرسلها بوت لا تحمل user_id.
  • البوتات في المجموعات: لا يوجد وضع خصوصية، فيستلم البوت كل رسائل المجموعة.
  • قائمة الانتظار: التحديثات التي لم تُجلب تُحفظ في الذاكرة حتى آخر 1,000 تحديث لكل بوت، وتضيع عند إعادة تشغيل الخادم (بينما يحتفظ بها Telegram مدة 24 ساعة).
  • Webhook: يُرسل تحديثاً واحداً في كل مرة بالترتيب (وmax_connections تُحفظ فقط)، ولا تُقبل الشهادات الموقّعة ذاتياً، ولا قيود على المنفذ.
  • المعرّفات: معرّفات المستخدمين والرسائل والملفات لا معنى لها إلا داخل هذا الخادم. ولعدم وجود قنوات ومجموعات خارقة، لا توجد كذلك معرّفات بالشكل -100….
  • الطرق غير الموجودة: ما ليس في القائمة أعلاه (forwardMessage، copyMessage، sendVideo، sendPoll، getChatMember، banChatMember، answerInlineQuery …) يعيد 404 Not Found: method not found.