البدء
نبذة عن Pabal
ما هو Pabal وكيف بُني، وما الذي يعمل الآن وما الذي لا يعمل بعد.
ما هو Pabal
الـ Pabal (파발 擺撥) نظامُ محطات بريدية عرفته مملكة جوسون الكورية، كان السعاة فيه يبدّلون الخيل في المحطات وهم يتناوبون على نقل الأخبار العاجلة دون توقف. وPabal.me تطبيق مراسلة سُمّي بهذا الاسم، وهو تطبيق مراسلة متوافق مع Telegram تشغّله المؤسسات أو المجتمعات على خوادمها الخاصة.
- تشغّل الخادم بنفسك. تُحفظ الحسابات والمحادثات والصور كلها على خادم المشغّل وفي قاعدة بياناته (PostgreSQL). واسم برنامج الخادم هو HunsTelegram (Java 21).
- يتحدث بلغة Telegram نفسها. بين التطبيق والخادم يُستخدم MTProto 2.0 (الطبقة 216) نفسه الذي يستخدمه Telegram، وبين البوت والخادم تُستخدم HTTP Bot API نفسها التي يستخدمها Telegram. لذلك تتصل التطبيقات والمكتبات والبوتات المبنية لـ Telegram بـ Pabal بمجرد تغيير العنوان.
- إنه عالم منفصل لا يتصل بـ Telegram. حسابات Pabal موجودة على خادم Pabal فقط، ولا يمكن تبادل الرسائل مع مستخدمي Telegram.
كيف بُني
شرح المخطط
- ثلاث مناطق: على اليسار ما يعمل خارج الخادم (التطبيق وبرامج البوتات والمتصفح)، وفي الوسط مدخلا الخادم، وعلى اليمين ما بداخل الخادم. وبرامج البوتات أيضاً تعمل خارج الخادم، على حاسوب المشغّل أو المطوّر.
- لا يوجد إلا مدخلان: يتصل التطبيق مباشرة عبر منفذ MTProto (8443) (لا حاجة إلى HTTPS لأن MTProto يشفّر بنفسه)، أما الموقع وBot API فيدخلان عبر HTTPS (443).
- يتصل البوت بأحد طريقين: عادةً عبر Bot API على HTTPS (الخط المتصل)، وإن شئت فعبر MTProto نفسه الذي يستخدمه التطبيق (الخط الأزرق المتقطع). وفي الحالتين هو حساب البوت نفسه وصندوق الرسائل نفسه.
- الخط الأحمر المتقطع هو السهم الوحيد الذي يسير في الاتجاه المعاكس: عندما يضبط البوت webhook، يرسل الخادم التحديثات الجديدة إلى عنوان HTTPS الخاص ببرنامج البوت. أما البقية فكلها طلبات تدخل من الخارج إلى الخادم.
- السجلّ في مكان واحد: يمر كل تغيير عبر الخدمات ويبقى في مخزن الأحداث في PostgreSQL، ولا يُحفظ في ملفات سوى الصور الأصلية. والرسائل المرسلة من التطبيق والرسائل التي يرسلها البوت تسلك الطريق نفسه، لذا تنطبق الإشعارات الفورية (push) وقائمة المحادثات واستعادة ما فات عند إعادة الاتصال على الجميع بالطريقة نفسها.
ما يعمل الآن، وما لا يعمل بعد
| الميزة | الحالة | ملاحظات |
|---|---|---|
| التسجيل وتسجيل الدخول (رقم الهاتف + رمز) | يعمل | يختار المشغّل إيصال الرمز عبر SMS أو البريد الإلكتروني أو عن طريق المسؤول |
| المحادثات الفردية، والاستلام الفوري، والأجهزة المتعددة | يعمل | الجهاز الذي كان مطفأً يستدرك ما فاته عند تشغيله من جديد |
| تعديل الرسائل وحذفها | يعمل | ينعكس فوراً على شاشة الطرف الآخر أيضاً |
| المجموعات الأساسية (الإنشاء، وإضافة الأعضاء، وإخراجهم، والاسم) | يعمل | يُضاف الأعضاء مباشرة من معلومات المجموعة |
| إرسال الصور، وصورة الملف الشخصي | يعمل | تُحفظ بحجم واحد هو الأصل |
| البوتات — @BotFather، وHTTP Bot API، وwebhook، وبوتات MTProto | يعمل | الأزرار، والاستدعاءات (callbacks)، وقائمة الأوامر، والصور، والمجموعات |
| صفحة الإدارة، وإعدادات التشغيل | يعمل | متاحة فقط على العنوان 127.0.0.1 في الخادم |
| الموقع بعشر لغات، وصفحات روابط أسماء المستخدمين والدعوات | يعمل | ووثائق المطوّرين أيضاً بعشر لغات |
| القنوات، والمجموعات الخارقة | ليس بعد | قد لا تظهر بشكل صحيح في التطبيق |
| ملفات المستندات والفيديو والصوت، والألبومات | ليس بعد | تُرفض عند الإرسال بالخطأ MEDIA_INVALID |
النص المنسّق (غامق، مائل)، وparse_mode في البوتات | ليس بعد | يُرسل النص كما هو. أما الأوامر والإشارات والروابط والوسوم فتُعرض تلقائياً |
| المكالمات الصوتية والمرئية، والمحادثات السرية | ليس بعد | |
| التحقق بخطوتين (كلمة مرور السحابة) | ليس بعد | يُرفض حتى لو حاولت ضبطه |
| تطبيق الهاتف، والإشعارات الفورية (push) | ليس بعد | المتاح حالياً تطبيق سطح المكتب لنظام macOS |
| الانضمام إلى مجموعة عبر رابط دعوة | ليس بعد | يُنشأ الرابط، لكن النقر عليه لا يجعلك عضواً |
الوضع المضمّن (@bot كلمات البحث)، والمدفوعات، والألعاب | ليس بعد |
العلاقة مع Telegram
Pabal خادم مستقل يتّبع البروتوكول المنشور علناً الخاص بـ Telegram. ولا علاقة له بشركة Telegram، ولا يتصل بخوادم Telegram.
- ما هو متوافق: MTProto 2.0 (أنواع النقل الأربعة، والمصافحة، وربط المفاتيح المؤقتة)، وصيغ الطلبات والاستجابات في الطبقة 216، وصيغة العناوين والطلبات والاستجابات والأخطاء في HTTP Bot API. وقد تحقّقنا من ذلك بتوصيل تطبيق Telegram Desktop الرسمي 6.2.6 دون أي تعديل (بتغيير عنوان الخادم والمفتاح العام فقط).
- ما هو مختلف: الحسابات والبيانات منفصلة لكل خادم. ومعرّفات المستخدمين والرسائل والملفات لا معنى لها إلا داخل هذا الخادم. ولا يمكنك استخدام الرمز المميّز (token) للبوت الذي كنت تستخدمه في Telegram، بل عليك الحصول على رمز جديد من @BotFather في Pabal.
صيغ الروابط
ينشئ التطبيق والخادم الروابط بالعنوان https://pabal.me/. وعند فتح الرابط في المتصفح تظهر صفحة صغيرة تفتح التطبيق.
| الرابط | المعنى | العنوان الذي يُفتح في التطبيق |
|---|---|---|
pabal.me/<اسم المستخدم> | فتح المحادثة مع شخص أو بوت | tg://resolve?domain=<اسم المستخدم> |
pabal.me/+<رمز الدعوة> | رابط دعوة إلى مجموعة (يفتح التطبيق، لكن الانضمام عبر الرابط لا يعمل بعد) | tg://join?invite=<رمز الدعوة> |
pabal.me/joinchat/<رمز الدعوة> | رابط دعوة بالصيغة القديمة (المعنى نفسه) | tg://join?invite=<رمز الدعوة> |
اسم المستخدم من 5 إلى 32 حرفاً من الأحرف اللاتينية والأرقام والشرطة السفلية، ويبدأ بحرف لاتيني (وينتهي اسم مستخدم البوت بـ bot). والأسماء المطابقة لمسارات يستخدمها الموقع، مثل docs وadmin وhealth، لا تُفتح كروابط.
نموذج الأمان
- التطبيق ↔ الخادم: الاتصال مشفّر بـ MTProto 2.0. ويُبنى التطبيق ومفتاح RSA العام للخادم مضمّن فيه، فلا يستطيع خادم آخر أن ينتحل صفة خادم Pabal. والمحادثات مثل «المحادثات السحابية» في Telegram، لذلك يستطيع الخادم قراءة محتواها (فهي ليست مشفّرة من طرف إلى طرف). ولهذا يجب أن يشغّل الخادمَ شخصٌ جدير بالثقة.
- البوت ↔ الخادم: لا تُتاح Bot API إلا عبر HTTPS. والرمز المميّز للبوت هو كلمة مروره — فإذا تسرّب فغيّره بالأمر
/revokeلدى @BotFather. عندها يُلغى الرمز السابق وتُقطع فوراً الاتصالات التي كانت قائمة به. - الخادم ← webhook: لا يرسل الخادم الطلبات إلا إلى webhook عنوانه HTTPS وعام. ويرفض العناوين الداخلية مثل الشبكات الخاصة وعنوان الاسترجاع (loopback) وخدمة البيانات الوصفية السحابية (metadata). ويستطيع البوت أن يتحقق عبر
secret_tokenمن أن الطلب جاء فعلاً من خادم Pabal. - الإدارة: لا تُفتح صفحة الإدارة إلا على الخادم نفسه (127.0.0.1)، ولا يمكن رؤية البيانات إلا بوجود رمز مميّز. ويدخل المشغّل إليها عبر نفق SSH.
- التخزين: مفاتيح المصادقة محفوظة في قاعدة البيانات كما هي، لأن الخادم يحتاج إليها لفك التشفير. لذلك يجب حماية قاعدة البيانات والنسخ الاحتياطية بقدر ما يُحمى مفتاح RSA الخاص بالخادم.
المصطلحات
| المصطلح | المعنى |
|---|---|
| MTProto | بروتوكول التشفير بين التطبيق والخادم الذي أنشأته Telegram. ويستخدم Pabal الإصدار 2.0. |
| الطبقة (layer) | إصدار صيغ الطلبات والاستجابات التي تُتبادل فوق MTProto. وطبقة Pabal هي 216. |
| مفتاح المصادقة (auth key) | سرّ بطول 2048 بت ينشئه التطبيق مع الخادم عند أول اتصال. ويرتبط تسجيل الدخول بهذا المفتاح. |
| DC | رقم مركز البيانات في Telegram. في Pabal يتولى خادم واحد مراكز البيانات من 1 إلى 5 كلها. |
| التحديثات، pts | تغييرات مثل الرسائل الجديدة والتعديل والحذف. وpts هو الرقم التسلسلي للتغييرات لكل مستخدم، ويتيح للجهاز الذي انقطع اتصاله أن يعرف ما فاته. |
| النظير (peer) | الطرف الآخر في المحادثة — شخص أو بوت أو مجموعة. |
| الرمز المميّز للبوت (token) | سلسلة بالشكل <bot ID>:<secret>، أي معرّف البوت ثم سرّه. تُوضع في عنوان Bot API لإثبات هوية البوت. |
| Webhook | طريقة يرسل فيها الخادم التحديثات الجديدة إلى عنوان HTTPS الخاص بالبوت، بدلاً من أن يأتي البوت لجلبها. |