| جسر ثنائي الاتجاه في الوقت الفعلي بين دردشة Discourse و Telegram، مع دعم من الدرجة الأولى لمواضيع منتديات Telegram | |
| GitHub - babylai/discourse-telegram-chat-bridge: Real-time two-way bridge between Discourse Chat and Telegram (design phase / POC) · GitHub | |
| كيفية تثبيت الإضافات في Discourse |
الميزات
يتم ربط كل قناة دردشة في Discourse بدردشة Telegram — إما مجموعة عادية، أو موضوع محدد في مجموعة فائقة مع تفعيل ميزة المواضيع. تظهر الرسالة المنشورة من جانب ما على الجانب الآخر خلال ثانية أو ثانيتين.
| Discourse → Telegram | Telegram → Discourse | |
|---|---|---|
| نص (مع تنسيق) | ||
| إيموجي | ||
| ردود | ||
| تعديلات | ||
| عمليات حذف | ||
| صور | ||
| ملفات أخرى | ||
| ملصقات | — |
- نسبة الرسالة للكاتب: لا يمكن للبوتات انتحال هوية المستخدمين على أي من المنصتين، لذا تحمل الرسائل اسم الكاتب كبادئة عريضة —
**ماريا:** مرحباًفي Discourse، maria: في Telegram. - آمن من الحلقات: الرسائل المنشورة بواسطة الجسر نفسه لا تُعاد إرسالها أبداً.
- مهام متكررة: إعادة المحاولة وإعادة توصيل نقاط النهاية لا تنتج رسائل مكررة.
- مراعاة حدود المعدل: عند حدوث خطأ HTTP 429، تُعاد المهمة إلى قائمة الانتظار بعد وقت الانتظار الذي تطلبه Telegram بالضبط.
- تدهور سلس: الملفات التي تتجاوز حدود واجهة برمجة تطبيقات البوت (20 ميجابايت للتنزيل / 50 ميجابايت للرفع) تتحول إلى ملاحظة
[ملف محذوف: الاسم (الحجم)]؛ التنسيق غير المدعوم يتحول إلى نص عادي. - أمر الإعداد
/id: اكتب/idفي أي مجموعة أو موضوع يمكن للبوت رؤيته، وسيرد بأرقام التعريف بالإضافة إلى سطر ربط جاهز للنسخ.
القيود المعروفة
- عمليات الحذف في Telegram لا تُزامن مع Discourse — لا يوجد حدث حذف في واجهة برمجة تطبيقات بوت Telegram. هذه قيود المنصة، وليس مشكلة في التكوين.
- يسمح Telegram للبوتات بتعديل رسائلها الخاصة لمدة 48 ساعة فقط؛ تعديلات Discourse للرسائل القديمة لا تنعكس في جانب Telegram.
- لا يتم جسر التفاعلات.
- لا يتم ربط خيط دردشة Discourse بمواضيع Telegram؛ يتم جسر ردود الخيط بشكل مسطح.
التكوين
1. إنشاء بوت Telegram
- أنشئ بوتاً عبر @BotFather وانسخ الرمز.
- عطّل وضع الخصوصية (
/setprivacy→ تعطيل)، وإلا لن يرى البوت سوى/الأوامر.
إذا كان البوت موجوداً بالفعل في مجموعة، أزل وأعد إضافته — التغيير لا ينطبق على العضويات الموجودة مسبقاً. - أضف البوت إلى مجموعتك كـ مشرف (يحتاج حذف الرسائل لمزامنة الحذف).
- لجسر إلى مواضيع محددة، فعّل المواضيع في إعدادات المجموعة.
2. تكوين إعدادات الموقع (المسؤول → الإضافات → جسر Telegram): فعّل الإضافة، الصق رمز البوت، واعدد رمز سري عشوائي لنقطة النهاية (مثل openssl rand -hex 24).
3. تسجيل نقطة النهاية — أسهل طريقة من خلال عميل الإضافة نفسه، الذي يضبط allowed_updates الصحيحة لك:
cd /var/discourse
./launcher enter app
rails runner "puts DiscourseTelegramChatBridge::TelegramClient.new.set_webhook(
url: 'https://YOUR-SITE/telegram-bridge/webhook',
secret_token: SiteSetting.telegram_bridge_webhook_secret)"
allowed_updates موجود في تسجيل نقطة النهاية المخزن في Telegram، وليس في كود الإضافة. إذا قمت بالتسجيل يدوياً وأهملت edited_message، فلن تقوم Telegram بتسليم التعديلات بصمت.
4. ربط القنوات — اكتب /id في كل مجموعة/موضوع، ثم أضف سطر واحد لكل قناة مجسرة إلى telegram_bridge_mappings:
chat_channel_id:telegram_chat_id:telegram_thread_id
رقم تعريف قناة Discourse هو الرقم في نهاية عنوان القناة (/chat/c/<slug>/<id>)؛ اترك رقم تعريف الخيط فارغاً لموضوع عام أو مجموعة عادية. في كل تشغيل وتغيير في الربط، تسجل الإضافة سطر ملخص واحد active mappings يمكنك البحث فيه للتأكد مما يتم جسره.
5. التحقق — أرسل رسالة في كل اتجاه. إذا لم يحدث شيء، تحقق بالترتيب: سطر سجل active mappings، معلومات نقطة النهاية (get_webhook_info)، ووضع الخصوصية.
الإعدادات
| الاسم | الوصف |
|---|---|
telegram_bridge_enabled |
مفتاح التشغيل/الإيقاف الرئيسي للجسر. |
telegram_bridge_bot_token |
رمز واجهة برمجة تطبيقات بوت Telegram، صادر من @BotFather (سري). |
telegram_bridge_webhook_secret |
رمز سري يتم التحقق منه ضد رأس X-Telegram-Bot-Api-Secret-Token في طلبات نقطة النهاية الواردة (سري). |
telegram_bridge_mappings |
ربط القنوات، سطر واحد لكل قناة: chat_channel_id:telegram_chat_id:telegram_thread_id (رقم تعريف الخيط اختياري). |
ملاحظة الخصوصية: محتوى القنوات المجسرة يغادر مثيل Discourse الخاص بك ويُخزن مع Telegram (والعكس صحيح). فقط القنوات المدرجة صراحةً في الربط يتم جسرها — لكن أخبر أعضاء تلك القنوات.
