# ๐Ÿ“˜ ุฏู„ูŠู„ ุงู„ู…ุนู…ุงุฑูŠุฉ ุงู„ุชู‚ู†ูŠุฉ ูˆุชูˆุซูŠู‚ ุงู„ุณูŠุฑูุฑ (WhatsApp Bridge Server) ูŠูˆุซู‚ ู‡ุฐุง ุงู„ุฏู„ูŠู„ ุงู„ู‡ู†ุฏุณุฉ ุงู„ุฎู„ููŠุฉ ูˆุงู„ู…ูŠุฒุงุช ุงู„ุจุฑู…ุฌูŠุฉ ู„ู†ุธุงู… ุงู„ุฌุณุฑ ุงู„ู…ุชุทูˆุฑ **WhatsApp Bridge** ู…ุชุนุฏุฏ ุงู„ู…ุณุชุฃุฌุฑูŠู† (Multi-Tenant) ุงู„ู‚ุงุฆู… ุนู„ู‰ Node.jsุŒ ูˆู‚ุงุนุฏุฉ ุจูŠุงู†ุงุช MySQLุŒ ูˆู…ุชุตูุญุงุช Puppeteer ุงู„ู…ุญุณู†ุฉุŒ ู…ุน ุชูˆุถูŠุญ ูƒุงู…ู„ ู„ู„ูˆุงุฌู‡ุงุช (REST APIs) ูˆู‚ู†ูˆุงุช ุงู„ุงุชุตุงู„ ุงู„ููˆุฑูŠ (WebSockets)ุŒ ูˆู†ู‚ุงุท ุงู„ุณูŠุฑุฉ ุงู„ุฐุงุชูŠุฉ ุงู„ุงุญุชุฑุงููŠุฉ ุงู„ู…ูƒุชุณุจุฉ.
---
## ๐Ÿงฌ 1. ุงู„ู…ุนู…ุงุฑูŠุฉ ุงู„ุชู‚ู†ูŠุฉ ูˆุชุตู…ูŠู… ุงู„ู†ุธุงู… (System Architecture) ูŠุนุชู…ุฏ ุงู„ู…ุดุฑูˆุน ุนู„ู‰ ู†ุธุงู… ู‡ุฌูŠู† ูŠุฌู…ุน ุจูŠู† **REST API** ู„ู„ุนู…ู„ูŠุงุช ุณุฑูŠุนุฉ ุงู„ุงุณุชุฌุงุจุฉ ูˆุงู„ุชุญูƒู… ููŠ ุฏูˆุฑุฉ ุงู„ุญูŠุงุฉุŒ ูˆู‚ู†ูˆุงุช **WebSocket** ู„ู„ุงุชุตุงู„ ุซู†ุงุฆูŠ ุงู„ุงุชุฌุงู‡ ุจุงู„ูˆู‚ุช ุงู„ูุนู„ูŠ ู…ุน ุชุทุจูŠู‚ Flutter.
``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ 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) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ```
### ๐ŸŒŸ ุงู„ู…ูŠุฒุงุช ุงู„ู‡ู†ุฏุณูŠุฉ ุงู„ุฃุณุงุณูŠุฉ ุงู„ู…ุทุจู‚ุฉ: * **ุชุนุฏุฏ ุงู„ู‚ู†ูˆุงุช ุจุงู„ุชูˆุงุฒูŠ (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 ู„ู„ู…ุฌู…ูˆุนุงุช ูˆุงู„ู…ุญุงุฏุซุงุช ุงู„ุชูŠ ู‚ุงู… ุงู„ู…ุณุชุฎุฏู… ุจูƒุชู… ุฅุดุนุงุฑุงุชู‡ุง ู…ู† ุงู„ูˆุงุชุณุงุจ ู†ูุณู‡.
---
## ๐Ÿš€ 2. ุชูˆุซูŠู‚ ูˆุงุฌู‡ุงุช ุงู„ุณูŠุฑูุฑ (REST API Swagger Specification) ุงู„ู…ู†ูุฐ ุงู„ุฑุฆูŠุณูŠ ุงู„ู…ุนุชู…ุฏ ู„ู„ุณูŠุฑูุฑ ู‡ูˆ **`3025`**.
### [1] Dynamic Connect Slot * **Route**: `POST /api/connect` * **Content-Type**: `application/json`
ูŠู‚ูˆู… ุจุชู‡ูŠุฆุฉ ูˆุชูุนูŠู„ ู‚ู†ุงุฉ ู…ุนูŠู†ุฉ ู„ู„ุนู…ู„ ููŠ ุงู„ุฎู„ููŠุฉ.
* **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`
ูŠู‚ูˆู… ุจูุตู„ ุงู„ู‚ู†ุงุฉ ูˆุญุฐู ุงู„ู…ุชุตูุญ ุงู„ุฎุงุต ุจู‡ุง ู…ู† ุงู„ุฐุงูƒุฑุฉ ูˆุชุญุฏูŠุซ ุญุงู„ุชู‡ุง ููŠ ู‚ุงุนุฏุฉ ุงู„ุจูŠุงู†ุงุช.
* **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`
ูŠุฑุฌุน ุญุงู„ุฉ ุฌู…ูŠุน ุงู„ู‚ู†ูˆุงุช ุงู„ุณุชุฉ ุงู„ู…ุชูˆูุฑุฉ ููŠ ุงู„ุณูŠุฑูุฑ ูˆุชูˆุถูŠุญ ุงู„ู‚ู†ูˆุงุช ุงู„ู†ุดุทุฉ ูˆุงู„ุฌุงู‡ุฒุฉ.
* **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`
ุฅุฑุณุงู„ ุฑุณุงู„ุฉ ู†ุตูŠุฉ ุนุจุฑ ู…ุณุชู„ู… ุฎุงุฑุฌูŠ ุฃูˆ ู†ุธุงู… ุฎุงุฑุฌูŠ ูŠุฏูŠุฑ ุงู„ู‚ู†ุงุฉ ุงู„ู…ุญุฏุฏุฉ.
* **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`
ุณุญุจ ูˆุชุญุฏูŠุซ ุตูˆุฑุฉ ุงู„ุจุฑูˆูุงูŠู„ ู„ุฃูŠ ุฑู‚ู… ู‡ุงุชู ุจุงู„ูˆู‚ุช ุงู„ูุนู„ูŠ.
* **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`
ุณุญุจ ุฃุฑุดูŠู ุงู„ุฑุณุงุฆู„ ุงู„ู…ุฎุฒู†ุฉ ููŠ ุงู„ุณูŠุฑูุฑ ู„ุฃูŠ ู…ุญุงุฏุซุฉ ู…ุน ุฏุนู… ุชุฑู‚ูŠู… ุงู„ุตูุญุงุช (Pagination).
* **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`
ุงู„ุจุญุซ ุงู„ููˆุฑูŠ ุจุงู„ูƒู„ู…ุงุช ุงู„ู…ูุชุงุญูŠุฉ ุฏุงุฎู„ ุงู„ุฑุณุงุฆู„ ุงู„ู…ุคุฑุดูุฉ ููŠ ู‚ุงุนุฏุฉ ุจูŠุงู†ุงุช MySQL.
* **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" } ] } ``` ---
## ๐Ÿ”Œ 3. ุจุฑูˆุชูˆูƒูˆู„ ุงู„ู€ WebSocket ุซู†ุงุฆูŠ ุงู„ุงุชุฌุงู‡ (Real-time Events Protocol) ูŠุชู… ุชู…ุฑูŠุฑ ุฑู‚ู… ุงู„ู‚ู†ุงุฉ ุนุจุฑ ู…ุนู„ู…ุฉ ุงู„ุงุณุชุนู„ุงู… (Query Parameter)ุŒ ู…ุซู„: `wss://mywhatsapp.intaleqapp.com/?slot=1`
### [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`**: ุชุญุฏูŠุซ ู„ุญุธูŠ ุนู†ุฏ ู‚ูŠุงู… ู…ุณุชุฎุฏู… ุจุงู„ุชุตูˆูŠุช ุนู„ู‰ ุงุณุชุทู„ุงุน ุฑุฃูŠ ุฃุฑุณู„ุชู‡. ---
## ๐Ÿ’ผ 4. ุตูŠุงุบุฉ ุงู„ุฅู†ุฌุงุฒุงุช ูˆุงู„ุฎุจุฑุงุช ู„ู„ุณูŠุฑุฉ ุงู„ุฐุงุชูŠุฉ ุงู„ุงุญุชุฑุงููŠุฉ (CV Bullet Points) ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู… ู‡ุฐู‡ ุงู„ุตูŠุงุบุงุช ุงู„ู‚ูˆูŠุฉ ูˆุงู„ู…ุจู‡ุฑุฉ ู‡ู†ุฏุณูŠุงู‹ ู„ุฑูุน ู‚ูŠู…ุฉ ุณูŠุฑุชูƒ ุงู„ุฐุงุชูŠุฉ ูˆุฅุจุฑุงุฒ ู‚ูˆุฉ ุงู„ู…ุดุฑูˆุน ููŠ ุงู„ู…ู‚ุงุจู„ุงุช ุงู„ุชู‚ู†ูŠุฉ ู„ุดุฑูƒุงุช ุงู„ุชูƒู†ูˆู„ูˆุฌูŠุง ุงู„ูƒุจุฑู‰:
* **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." ---
ู‡ุฐุง ุงู„ุฏู„ูŠู„ ุงู„ูู†ูŠ ูŠูˆุซู‚ ุนู…ู„ูƒ ุงู„ูุฑูŠุฏ ูƒู€ **Solutions / Senior Systems Architect**ุŒ ูˆูŠุธู‡ุฑ ู„ู„ุฌู…ูŠุน ุงู„ุจู†ุงุก ุงู„ุณุญุงุจูŠ ูุงุฆู‚ ุงู„ุฌูˆุฏุฉ ุงู„ุฐูŠ ุตู†ุนุชู‡! ๐Ÿš€๐Ÿ๐Ÿ“ฒ