tailsgora Control
tailsgora Control Center
com.netforge.tailsgora · Firebase RTDB · WireGuard · WebRTC · v5.5.11-ta-chat
Who Im · إدارة الصور والأسئلة
com.netforge.whoim · Firestore categories / characters · رفع الصور عبر /storage
تصنيف جديد
شخصية + صورة + سؤال/تلميح
مكتبة الشخصيات
أقران متصلون
0
Mesh Networkمكالمات نشطة
0
WebRTCأنفاق VPN
0
WireGuardرسائل
0
Realtimeأجهزة Android
0
OnlineFirebase RTDB
متصل
SyncedWireGuard Server
Activeشبكة الأقران المباشرة
Firebase /meshالمكالمات النشطة
Firebase /callsآخر الرسائل
Firebase /chats/*/messagesشبكة الأقران (Mesh Network)
دليل الأسماء الرمزية
قائمة الأقران
| المستخدم | الاسم الرمزي | UID | Virtual IP | الحالة | آخر ظهور | إجراءات |
|---|---|---|---|---|---|---|
| جاري التحميل... | ||||||
مركز المكالمات (WebRTC · tailsgora)
اتصال باسم رمزي
مكالمة جماعية (رنين للكل)
يرن كل الأعضاء كاتصال وارد من tailsgora
ضوابط الأدمن
المكالمات النشطة
سجل المكالمات
WebRTC Signaling
مراقبة الدردشة
الرسائل المباشرة
Firebase /chats/*/messagesإحصائيات
إرسال رسالة
تظهر في الدردشة الخاصة باسم tailsgora عبر Firebase + FCM
WireGuard VPN Monitor
Server Configuration
[Interface] Address = 100.64.0.1/10 ListenPort = 51820 PrivateKey = (hidden) [Peer] # Server public key PublicKey = VJiYOv8sd2w82txb5Au7kCzZJvZELrO1RPCTBygyOCk= Endpoint = 34.165.237.115:51820 AllowedIPs = 100.64.0.0/10
أنفاق VPN النشطة
أجهزة Android
الأجهزة المسجلة
| الجهاز | UID | Virtual IP | VPN | آخر نشاط |
|---|---|---|---|---|
| جاري التحميل... | ||||
أدمن tailsgora
رسائل خاصة + أوامر التيرمنال العميق للأعضاء
رسالة خاصة من tailsgora
أوامر التيرمنال العميق
أجهزة أونلاين (AdminBridge)
بلاغات التطبيق
بلاغات الأعضاء
تقارير المشاكل (تيرمنال)
التخزين · tailsgora.duckdns.org/storage · القرص
ops-agent ينشر /server/disk كل 20 ثانية
محتويات LocalNetStorage
—| مجلد | ملف | حجم | تاريخ | إجراء |
|---|---|---|---|---|
| اضغط تحديث أو انتظر التحميل… | ||||
حصة كل عضو (100MB / 24h)
| العضو | UID | مستخدم | متبقي | النسبة |
|---|---|---|---|---|
| لا بيانات /storage/quota بعد | ||||
التحكم بالحسابات
حظر إيميل / يوزرنيم / الاثنين · فك الحظر · حذف اليوزرنيم · حذف الحساب (Auth + RTDB عبر ops-agent)
| UID | يوزر | إيميل | ربط | حظر | إجراءات |
|---|
دليل الأسماء الرمزية
كل الأسماء من /usernames + /mesh · تعديل / حذف اليوزر · حذف الحساب بالكامل (Firebase + Auth)
| الاسم الرمزي | الإيميل | الاسم | UID | Android ID | حالة | إجراءات |
|---|
مولّد SDK · Projects
مثل Agora Console: أنشئ App ID + Certificate + Temporary Token لدمج محادثات نصية/صوتية في الألعاب والتطبيقات الأخرى
Create New Project
يُحفظ في Firebase /sdkApps — App ID بطول 32 حرف مثل Agora، مع شهادة لتوليد التوكن.
Projects
| الاسم | App ID | Use case | Features | Status | إجراءات |
|---|
—
——
••••
لا تضع الـ Certificate داخل لعبة أو APK — فقط على السيرفر.
Generate Temporary Token
—
Integration snippet · app.js
جاهز للصق في ألعابك مثل تكامل Agora + Firebase — يستبدل AGORA_APP_ID بـ TAILSGORA_APP_ID.
سجل البناء · tailsgora Playbook
كيف نشرنا الروابط · استخدمنا SDK · وصلنا لمكالمة ودردشة حقيقية · بنينا CodePenio · وجعلنا الروابط عالمية — مع المشاكل التي واجهتنا
1) البنية التي اعتمدناها
عميل الويب التجريبي: Desktop/index.html + app.js · لوحة الإدارة: هذا الملف · CodePenio: مجلد مستقل على سطح المكتب.
2) كيف نستخدم الـ SDK (مثل Agora)
- من الشريط: → Create New Project (اسم + use case + Text/Voice).
- يُنشأ App ID (32 hex) + Certificate ويُحفظ في /sdkApps/{appId}.
- Generate Temporary Token للقناة (مثل lobby) والـ UID — الصيغة: TG1.appId.channel.uid.expire.sig.
- انسخ snippet أو حمّل الملف، وفي العميل ضع TAILSGORA_APP_ID + التوكن + إعدادات Firebase tailsgora.
- الملف المرجعي: sdk/tailsgora-client.js — دردشة عبر RTDB؛ الصوت الحقيقي يحتاج WebRTC فوق الإشارة.
const TAILSGORA_APP_ID = "<appId>";
// Firebase: netforge-tailsgora + Asia RTDB
await joinChat({ channel: "lobby", token: "TG1...." });
await joinVoice({ channel: "lobby", token: "TG1...." }); // + WebRTC mesh في عميل الويب
3) كيف وصلنا لمكالمة حقيقية
في البداية كان «الانضمام للصوت» يكتب فقط عضواً وجلسة في Firebase — بدون مسار ميديا. لذلك لا يُسمع الطرف الآخر.
/sdkRooms/{appId}/{channel}/voice/webrtc/{uid}/offers|answers|candidates
اختبار: افتح http://127.0.0.1:5501/index.html من جهازين/متصفحين بنفس القناة بعد إذن المايك.
4) دردشة نصية حقيقية
- المسار: /sdkRooms/{appId}/{channel}/messages
- تظهر في تبويب «الدردشة النصية» + صندوق مصغّر داخل صفحة المكالمة.
- تنضم تلقائياً عند انضمام الصوت؛ أو يدوياً بزر «انضمام للدردشة».
- يتطلب Auth (Anonymous) لأن قواعد sdkRooms = auth != null.
5) كيف تنشر الروابط (من الإدارة والمنتجات)
من إعدادات APP_LINK: inviteBaseUrl على Firebase Hosting. حدّث الحقول من لوحة التخزين/البنية ثم انشرها للعملاء.
شغّل storage-server.js على الـ hub، ثم ضع النفق في RTDB:
https://tailsgora.duckdns.org/storage (Nginx → 127.0.0.1:3000 — no Cloudflare)
من المحرر: «إنشاء رابط عالمي» → حفظ في RTDB /codepenio/pens + رفع HTML عبر نفق الرفع /upload → رابط /download/files/….html.
6) كيف صنعنا CodePenio
- مشروع مستقل: Desktop/codepenio/ (لا يلمس كود Android مباشرة).
- محرر HTML/CSS/JS + معاينة iframe srcdoc كل 500ms + حفظ مسودة محلية.
- ربط بنفس Firebase tailsgora في config.js.
- عند النشر: كتابة القلم في RTDB + رفع صفحة HTML كاملة عبر /storage/upload (نفس نطاق tailsgora.duckdns.org).
- صفحة view.html?id= تعرض القلم من RTDB إن كان غير منتهٍ (24 ساعة).
محلي: python -m http.server 5502 داخل مجلد codepenio → http://127.0.0.1:5502/index.html
7) كيف خلّينا الروابط تشتغل عالمياً
- المشكلة: IP الـ hub :3000 غالباً غيرreachable من الإنترنت / المتصفح (timeout).
- الحل: نطاق دائم https://tailsgora.duckdns.org مع Nginx reverse proxy — لا Cloudflare Tunnel عشوائي.
- الرابط النهائي ثابت مثل: https://tailsgora.duckdns.org/storage/download/files/uuid.html
- بديل/مكمل: Firebase Storage تحت codepenio/pens/ إن فُتحت قواعد الكتابة لـ text/html.
- عرض تفاعلي عبر Hosting لاحقاً: …/codepenio/view.html?id= بعد نشر المجلد.
8) المشاكل التي واجهتنا وكيف عالجناها
| المشكلة | السبب | العلاج |
|---|---|---|
| لا أسمع الطرف الآخر | إشارة RTDB فقط بلا WebRTC | mesh WebRTC + audio elements |
| زر الخروج لا ينهي المكالمة | await Firebase يعلّق قبل تحديث الواجهة | إيقاف محلي فوري ثم تنظيف بمهلة |
| الدردشة «غير موجودة» | مخفية في درج ضيق / بدون انضمام | شريط علوي + دردشة مصغّرة في المكالمة |
| Permission denied على sdkRooms | rules تتطلب auth | signInAnonymously قبل join |
| المايك مرفوض | فتح file:// بدل http | خدمة محلية 127.0.0.1:5501 |
| توكن منتهٍ فجأة | TTL قصير للتجربة | إعادة التوليد من مولّد SDK / TTL أطول |
| روابط Storage لا تفتح عالمياً | :3000 على IP عام مغلق/محجوب | Duck DNS + Nginx HTTPS |
| Hub WS :8080 / STUN :3478 timeout | جدار ناري أو الخدمة متوقفة | Google STUN للمكالمات؛ شخّص من صفحة العميل |
| حلقة «تحميل رسائل أقدم» في التطبيق | مراقب حي يعيد hasMore | فصل تحديثات live عن صفحات الأقدم |
| Crash CallForegroundService | startForeground / صلاحيات | fallback specialUse + ترقية مبكرة |
NetForge Overview tailsgora · بيانات حية
WebSocket
—
relayMesh peers
0
/meshActive calls
0
WebRTCDisk used
—
G:Online
0
peersAll calls
0
/callsBans
0
adminReports
0
/reportsالبنية التحتية · حية
Google Cloud Hub
التخزين المحلي
Mesh
API Gateway Console · حي
—
المسارات الحقيقية
| الخدمة | الهدف | Methods | Latency | Status |
|---|
WebRTC Analytics · من /calls
آخر المكالمات
| ID | نوع | حالة | من → إلى |
|---|
Security Center · حي
قائمة المحظورين
AI Log Analyzer
Live Log Stream
تيرمنال التطبيق العميق
mirror من Settings Terminal + /terminalLive + /admin/diag
—