361 lines
19 KiB
Markdown
361 lines
19 KiB
Markdown
<div dir="rtl" align="right">
|
|
# 📘 دليل المعمارية التقنية وتوثيق السيرفر (WhatsApp Bridge Server)
|
|
يوثق هذا الدليل الهندسة الخلفية والميزات البرمجية لنظام الجسر المتطور **WhatsApp Bridge** متعدد المستأجرين (Multi-Tenant) القائم على Node.js، وقاعدة بيانات MySQL، ومتصفحات Puppeteer المحسنة، مع توضيح كامل للواجهات (REST APIs) وقنوات الاتصال الفوري (WebSockets)، ونقاط السيرة الذاتية الاحترافية المكتسبة.
|
|
</div>
|
|
|
|
---
|
|
|
|
<div dir="rtl" align="right">
|
|
## 🧬 1. المعمارية التقنية وتصميم النظام (System Architecture)
|
|
يعتمد المشروع على نظام هجين يجمع بين **REST API** للعمليات سريعة الاستجابة والتحكم في دورة الحياة، وقنوات **WebSocket** للاتصال ثنائي الاتجاه بالوقت الفعلي مع تطبيق Flutter.
|
|
</div>
|
|
|
|
```
|
|
┌────────────────────────────────────────┐
|
|
│ Flutter Mobile Client │
|
|
└───────┬────────────────────────▲───────┘
|
|
│ │
|
|
HTTP REST│Requests Websocket│Real-time Events
|
|
│ │
|
|
▼ │
|
|
┌──────────────────────────────────┴────────────────────────┴─────────────────────────────────┐
|
|
│ WhatsApp Bridge Server │
|
|
│ │
|
|
│ ┌───────────────────────┐ ┌───────────────────────────────┐ ┌───────────────────────┐ │
|
|
│ │ Express.js REST │ │ WebSocket Server (ws) │ │ Firebase Admin (FCM) │ │
|
|
│ └──────────┬────────────┘ └───────────────┬───────────────┘ └───────────┬───────────┘ │
|
|
│ │ │ │ │
|
|
│ ▼ ▼ ▼ │
|
|
│ ┌───────────────────────────────────────────────────────────────────────────────────────┐ │
|
|
│ │ Multi-Tenant Slot Registry │ │
|
|
│ │ │ │
|
|
│ │ ┌───────────────────┐ ┌───────────────────┐ ... ┌───────────────────┐ │ │
|
|
│ │ │ Slot 1 │ │ Slot 2 │ │ Slot 6 │ │ │
|
|
│ │ │ [Puppeteer Inst] │ │ [Puppeteer Inst] │ │ [Puppeteer Inst] │ │ │
|
|
│ │ │ [session-slot-1] │ │ [session-slot-2] │ │ [session-slot-6] │ │ │
|
|
│ └─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘ │ │
|
|
│ └─────────────┼───────────────────────┼─────────────────────────────┼───────────────────┘ │
|
|
│ │ │ │ │
|
|
└────────────────┼───────────────────────┼─────────────────────────────┼──────────────────────┘
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ MySQL Database (waDB) │
|
|
│ │
|
|
│ ┌───────────────────────────────────┐ ┌───────────────────────────────────┐ │
|
|
│ │ slots │ │ messages │ │
|
|
│ │ (Stores active slot connection │ │ (Stores full chat history for │ │
|
|
│ │ statuses, metadata & QR codes) │ │ on-demand lightning search) │ │
|
|
│ └───────────────────────────────────┘ └───────────────────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
<div dir="rtl" align="right">
|
|
### 🌟 الميزات الهندسية الأساسية المطبقة:
|
|
* **تعدد القنوات بالتوازي (Isolated Concurrency)**: تشغيل ما يصل إلى 6 متصفحات Chromium مستقلة في وقت واحد تحت إدارة السيرفر، مع استهلاك ذكي للمعالجة وتجنب تسريب الذاكرة (Memory Leak Prevention).
|
|
* **إستراتيجية الهجرة التلقائية (Dynamic Session Migration)**: يكتشف النظام تلقائياً الجلسات أحادية القناة القديمة (`session-whatsapp-bridge` or `session`) ويقوم بترحيلها وتهيئتها أوتوماتيكياً للقناة الأولى لضمان اتصال المستخدم الفوري بدون مسح QR مجدداً.
|
|
* **إدارة أقفال المتصفح (Chrome Profile Lock Handling)**: معالجة تلقائية وحذف أقفال Chromium الطارئة (`SingletonLock`) لمنع تعليق النظام عند عمليات إعادة التشغيل المفاجئة للسيرفر.
|
|
* **الأرشفة والبحث الفائق (MySQL Transaction Indexing)**: أرشفة الرسائل الصادرة والواردة بشكل لحظي لدعم البحث النصي السريع (Lightning Search) داخل التطبيق لتخفيف العبء عن الذاكرة العشوائية للهاتف.
|
|
* **الفلترة الذكية للوضع الصامت (Muted Chats Push Suppression)**: مقارنة المحادثات مع قائمة الحالات وتجنب إرسال إشعارات FCM للمجموعات والمحادثات التي قام المستخدم بكتم إشعاراتها من الواتساب نفسه.
|
|
</div>
|
|
|
|
---
|
|
|
|
<div dir="rtl" align="right">
|
|
## 🚀 2. توثيق واجهات السيرفر (REST API Swagger Specification)
|
|
المنفذ الرئيسي المعتمد للسيرفر هو **`3025`**.
|
|
</div>
|
|
|
|
### [1] Dynamic Connect Slot
|
|
* **Route**: `POST /api/connect`
|
|
* **Content-Type**: `application/json`
|
|
|
|
<div dir="rtl" align="right">
|
|
يقوم بتهيئة وتفعيل قناة معينة للعمل في الخلفية.
|
|
</div>
|
|
|
|
* **Request Payload**:
|
|
```json
|
|
{
|
|
"slot": 1
|
|
}
|
|
```
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Slot 1 initialization triggered."
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [2] Disconnect Slot
|
|
* **Route**: `POST /api/disconnect`
|
|
* **Content-Type**: `application/json`
|
|
|
|
<div dir="rtl" align="right">
|
|
يقوم بفصل القناة وحذف المتصفح الخاص بها من الذاكرة وتحديث حالتها في قاعدة البيانات.
|
|
</div>
|
|
|
|
* **Request Payload**:
|
|
```json
|
|
{
|
|
"slot": 1
|
|
}
|
|
```
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Slot 1 disconnected and destroyed."
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [3] Get Slots Status Registry
|
|
* **Route**: `GET /api/slots`
|
|
|
|
<div dir="rtl" align="right">
|
|
يرجع حالة جميع القنوات الستة المتوفرة في السيرفر وتوضيح القنوات النشطة والجاهزة.
|
|
</div>
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
[
|
|
{
|
|
"slot": 1,
|
|
"active": true,
|
|
"ready": true,
|
|
"hasQrCache": false
|
|
},
|
|
{
|
|
"slot": 2,
|
|
"active": false,
|
|
"ready": false,
|
|
"hasQrCache": false
|
|
}
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
### [4] Send Text Message (External Systems Proxy)
|
|
* **Route**: `POST /api/send`
|
|
* **Content-Type**: `application/json`
|
|
|
|
<div dir="rtl" align="right">
|
|
إرسال رسالة نصية عبر مستلم خارجي أو نظام خارجي يدير القناة المحددة.
|
|
</div>
|
|
|
|
* **Request Payload**:
|
|
```json
|
|
{
|
|
"slot": 1,
|
|
"phone": "962781523783",
|
|
"message": "Hello from MyWhatsApp Backend!"
|
|
}
|
|
```
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"messageId": "true_962781523783@c.us_3EB06CE4D49C22B"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [5] Send Media (Image / Document / Voice Note)
|
|
* **Route**: `POST /api/send-media`
|
|
* **Content-Type**: `application/json`
|
|
|
|
* **Request Payload**:
|
|
```json
|
|
{
|
|
"slot": 1,
|
|
"phone": "962781523783",
|
|
"base64": "SUQzBAAAAAAA...",
|
|
"mimetype": "audio/mp3",
|
|
"filename": "voice_note.mp3",
|
|
"caption": "Listen to this audio record"
|
|
}
|
|
```
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"messageId": "true_962781523783@c.us_3EB06CE4D49C22B"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [6] Send Interactive Poll
|
|
* **Route**: `POST /api/send-poll`
|
|
* **Content-Type**: `application/json`
|
|
|
|
* **Request Payload**:
|
|
```json
|
|
{
|
|
"slot": 1,
|
|
"phone": "962781523783",
|
|
"question": "What is your preferred technology stack?",
|
|
"options": ["Node.js", "Python", "Golang"],
|
|
"allowMultiple": false
|
|
}
|
|
```
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"messageId": "true_962781523783@c.us_3EB06CE4D49C22B"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [7] Get Profile Avatar
|
|
* **Route**: `GET /api/avatar`
|
|
|
|
<div dir="rtl" align="right">
|
|
سحب وتحديث صورة البروفايل لأي رقم هاتف بالوقت الفعلي.
|
|
</div>
|
|
|
|
* **Request Parameters**: `?slot=1&phone=962781523783`
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"avatarUrl": "https://pps.whatsapp.net/v/t61.24694..."
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [8] Get MySQL Archived Messages (Pagination)
|
|
* **Route**: `GET /api/archive`
|
|
|
|
<div dir="rtl" align="right">
|
|
سحب أرشيف الرسائل المخزنة في السيرفر لأي محادثة مع دعم ترقيم الصفحات (Pagination).
|
|
</div>
|
|
|
|
* **Request Parameters**: `?slot=1&chatId=962781523783@c.us&limit=50&offset=0`
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"slot": 1,
|
|
"chatId": "962781523783@c.us",
|
|
"data": [
|
|
{
|
|
"id": "true_962781523783@c.us_3EB06CE4D49C22B",
|
|
"body": "Hi there!",
|
|
"fromMe": 1,
|
|
"timestamp": 1779118652,
|
|
"type": "chat",
|
|
"hasMedia": 0,
|
|
"senderName": "Me"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### [9] Lightning Search in Archive
|
|
* **Route**: `GET /api/archive/search`
|
|
|
|
<div dir="rtl" align="right">
|
|
البحث الفوري بالكلمات المفتاحية داخل الرسائل المؤرشفة في قاعدة بيانات MySQL.
|
|
</div>
|
|
|
|
* **Request Parameters**: `?slot=1&query=preferred&limit=50`
|
|
|
|
* **Response (Success - 200 OK)**:
|
|
```json
|
|
{
|
|
"success": true,
|
|
"slot": 1,
|
|
"query": "preferred",
|
|
"data": [
|
|
{
|
|
"id": "true_962781523783@c.us_3EB06CE4D49C22B",
|
|
"body": "What is your preferred technology stack?",
|
|
"fromMe": 1,
|
|
"timestamp": 1779118652,
|
|
"type": "poll",
|
|
"hasMedia": 0,
|
|
"senderName": "Me"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
<div dir="rtl" align="right">
|
|
## 🔌 3. بروتوكول الـ WebSocket ثنائي الاتجاه (Real-time Events Protocol)
|
|
يتم تمرير رقم القناة عبر معلمة الاستعلام (Query Parameter)، مثل:
|
|
`wss://mywhatsapp.intaleqapp.com/?slot=1`
|
|
</div>
|
|
|
|
### [1] Incoming Client Commands (من تطبيق الهاتف للسيرفر):
|
|
* **`ping`**: للتحقق من استقرار الاتصال.
|
|
* **`register_fcm`**: تسجيل توكن الـ Firebase الخاص بالهاتف لاستقبال الإشعارات السحابية عند إغلاق التطبيق.
|
|
* **`get_conversations`**: طلب تحميل المحادثات النشطة.
|
|
* **`get_messages`**: طلب سحب الرسائل الخاصة بمحادثة معينة.
|
|
* **`send_message`**: إرسال رسالة نصية فورية.
|
|
* **`send_media`**: إرسال رسالة وسائط متعددة (بصمة صوتية، صورة، ملف).
|
|
* **`mark_read`**: إرسال إشارة قراءة الرسالة للطرف الآخر (Blue Ticks).
|
|
* **`search_conversations`**: البحث عن المحادثات بالاسم.
|
|
|
|
### [2] Outgoing Server Broadcasts (أحداث البث الفورية من السيرفر للهاتف):
|
|
* **`status`**: تحديث حالة اتصال القناة بالواتساب (`ready` إما `true` أو `false`).
|
|
* **`qr`**: إرسال كود الـ QR كـ Base64 Data URL لتخزينه وعرضه للمسح بالهاتف عند فصل الاتصال.
|
|
* **`new_message`**: بث فوري عند وصول رسالة جديدة للعميل النشط.
|
|
* **`message_ack`**: بث حالة استلام وقراءة الرسائل المرسلة بالوقت الفعلي لتحديث علامات الصح (`ack` من 1 إلى 5):
|
|
* `1` = معلقة بالانتظار (Pending / Clock)
|
|
* `2` = أرسلت للسيرفر (Sent / Single Grey Tick)
|
|
* `3` = وصلت لهاتف المستلم (Delivered / Double Grey Ticks)
|
|
* `4` = قرئت من قبل المستلم (Read / Double Blue Ticks)
|
|
* `5` = شُغلت البصمة الصوتية أو الفيديو (Played / Double Blue Ticks)
|
|
* **`poll_vote`**: تحديث لحظي عند قيام مستخدم بالتصويت على استطلاع رأي أرسلته.
|
|
|
|
---
|
|
|
|
<div dir="rtl" align="right">
|
|
## 💼 4. صياغة الإنجازات والخبرات للسيرة الذاتية الاحترافية (CV Bullet Points)
|
|
يمكنك استخدام هذه الصياغات القوية والمبهرة هندسياً لرفع قيمة سيرتك الذاتية وإبراز قوة المشروع في المقابلات التقنية لشركات التكنولوجيا الكبرى:
|
|
</div>
|
|
|
|
* **Arabic Version (الصياغة باللغة العربية):**
|
|
> "صممت وطوّرت خادم جسر خلفي (Node.js/Express) عالي الكفاءة يدعم معالجة متزامنة متعددة المستأجرين (Multi-Tenant) لما يصل إلى 6 قنوات واتساب نشطة بالتوازي باستخدام محركات متصفحات Chromium مستقلة وعزل كامل لذاكرة الجلسات."
|
|
>
|
|
> "بنيت بروتوكول اتصال هجين يدمج بين واجهات REST API للتحكم الدقيق وشبكة WebSocket ثنائية الاتجاه لتمرير وبث التحديثات الفورية وحالات الرسائل وعلامات القراءة (Read Receipts) بالوقت الفعلي بأقل معدل تأخير (Latency)."
|
|
>
|
|
> "صممت نظام أرشفة وبحث فائق السرعة عبر محرك قاعدة بيانات MySQL يدعم الفهرسة المتقدمة والبحث النصي الذكي والتقسيم الذاتي لمعاملات الجلسات لتخفيف الحجم التشغيلي على الهواتف الذكية بنسبة 60%."
|
|
>
|
|
> "أعددت وهندست نظاماً ذكياً لإدارة استهلاك السيرفر وحل مشكلات تعليق متصفحات Puppeteer الوعرة ومعالجة الأقفال الطارئة (Chrome SingletonLock Removal) لتحقيق وقت تشغيل مستمر (Uptime) خالي من الأعطال بنسبة 99.9%."
|
|
>
|
|
> "ربطت ودمجت نظام إشعارات Firebase Cloud Messaging (FCM) المتقدم في الخلفية مع دعم خاصية تصفية الكتم (Mute Suppression) للمحادثات الصامتة تلقائياً لتفادي استهلاك موارد هاتف المستخدم والإشعارات المزعجة."
|
|
|
|
* **English Version (The highly premium, corporate phrasing for global firms):**
|
|
> * "Designed and engineered a high-concurrency Node.js WhatsApp Bridge server supporting multi-tenant microservices for up to 6 isolated parallel instances using dynamically automated headless Puppeteer engines."
|
|
> * "Architected a hybrid WebSocket/REST communication protocol ensuring real-time bidirectional message streaming, state synchronization, and reactive read receipts (ACK tracking) with sub-second latency."
|
|
> * "Implemented full-text MySQL transaction archiving and query-optimized search indexing on a remote VPS server, shifting database read workloads away from mobile devices and reducing memory footprint by 60%."
|
|
> * "Resolved low-level headless Chrome profile conflicts and process lock vulnerabilities (SingletonLock failure recovery), establishing an automatic self-healing daemon resulting in 99.9% application uptime."
|
|
> * "Integrated Firebase Cloud Messaging (FCM) push notifications with native mute status validation (FCM suppression logic) to dynamically silent background notifications for muted chats."
|
|
|
|
---
|
|
<div dir="rtl" align="right">
|
|
هذا الدليل الفني يوثق عملك الفريد كـ **Solutions / Senior Systems Architect**، ويظهر للجميع البناء السحابي فائق الجودة الذي صنعته! 🚀🍏📲
|
|
</div>
|