messenger-web-reverse - Real Facebook Messenger Client for Node.js
A comprehensive Node.js library that provides real Facebook Messenger functionality similar to Baileys for WhatsApp. This library connects directly to Facebook's servers using reverse-engineered protocols, enabling authentic messaging without browser automation.
๐ Features
- Real Facebook Connection: Direct WebSocket connection to Facebook's servers
- No Browser Automation: Pure HTTP/WebSocket implementation, no Puppeteer required
- Email/Password Authentication: Login with your Facebook credentials
- Session Management: Persistent sessions with automatic restoration
- Real-time Messaging: Send and receive messages instantly
- Event-driven Architecture: Clean, reactive programming model
- Auto-reconnection: Automatic reconnection with configurable retry logic
- Typing Indicators: Send and receive typing status
- Message History: Retrieve conversation history
- Cross-platform: Works on Windows, Linux, macOS, Android (Termux)
๐ฆ Installation
Install the library using npm:
npm install messenger-web-reverse
Or using yarn:
yarn add messenger-web-reverse
Or using pnpm:
pnpm add messenger-web-reverse
๐ NPM Package
Package Name: messenger-web-reverse
Current Version: 2.2.0
NPM Link: https://www.npmjs.com/package/messenger-web-reverse
npm install messenger-web-reverse@latest
๐ฏ Quick Start
const FacebookMessenger = require('messenger-web-reverse');
async function main() {
const messenger = new FacebookMessenger({
debug: true
});
messenger.on('message', (message) => {
console.log(`๐ฉ New message from ${message.from}: ${message.body}`);
});
messenger.on('connected', () => {
console.log('๐ Connected to Facebook Messenger!');
});
const loginResult = await messenger.login('your-email@example.com', 'your-password');
if (loginResult.success) {
await messenger.connect();
await messenger.sendMessage('recipient-user-id', 'Hello from FacebookMessenger!');
}
}
main().catch(console.error);
๐ Authentication - METODฤ CORECTฤ
โ ๏ธ IMPORTANT: Metoda corectฤ de autentificare este messenger.login()
, NU client.login()
sau messenger.authenticate()
!
Biblioteca suportฤ autentificare realฤ Facebook cu persistenศa sesiunii:
const messenger = new FacebookMessenger();
const loginResult = await messenger.login('email@example.com', 'password');
if (loginResult.success) {
console.log('โ
Login successful');
console.log('๐ค User:', loginResult.user.userInfo.name);
console.log('๐ User ID:', loginResult.user.userId);
await messenger.connect();
} else if (loginResult.requires2FA) {
console.log('๐ Two-factor authentication required');
} else {
console.log('โ Login failed:', loginResult.error);
}
if (await messenger.restoreSession()) {
console.log('๐ Session restored successfully');
await messenger.connect();
} else {
await messenger.login('email@example.com', 'password');
}
๐ฑ Real-time Events
The library emits real-time events from Facebook's servers:
messenger.on('message', (message) => {
console.log(`๐ฉ Message from ${message.from}: ${message.body}`);
console.log(`๐ Timestamp: ${new Date(message.timestamp)}`);
console.log(`๐ฌ Thread ID: ${message.threadId}`);
});
messenger.on('message_sent', (data) => {
console.log(`๐ค Message sent successfully: ${data.messageId}`);
});
messenger.on('delivery_receipt', (receipt) => {
console.log(`โ
Message delivered: ${receipt.messageId}`);
});
messenger.on('read_receipt', (receipt) => {
console.log(`๐๏ธ Message read: ${receipt.messageId}`);
});
messenger.on('typing', (typing) => {
console.log(`โจ๏ธ ${typing.from} is ${typing.isTyping ? 'typing' : 'stopped typing'}...`);
});
messenger.on('presence', (presence) => {
console.log(`๐ค ${presence.userId} is ${presence.status}`);
});
messenger.on('connected', () => console.log('๐ Connected to Facebook'));
messenger.on('disconnected', (data) => console.log('๐ด Disconnected:', data));
messenger.on('error', (error) => console.error('โ Error:', error.message));
๐ฌ Sending Messages
Text Messages
await messenger.sendMessage('user-id', 'Hello, World!');
await messenger.sendMessage('user-id', 'Hello!', {
source: 'chat:web'
});
Typing Indicators
await messenger.sendTypingIndicator('user-id', true);
await messenger.sendTypingIndicator('user-id', true);
setTimeout(async () => {
await messenger.sendTypingIndicator('user-id', false);
await messenger.sendMessage('user-id', 'Hello after typing!');
}, 2000);
๐ Message History
const messages = await messenger.getMessages('user-id', 20);
console.log(`๐ Retrieved ${messages.length} messages:`);
messages.forEach((msg, index) => {
console.log(`${index + 1}. ${msg.body} (from: ${msg.from})`);
});
โ๏ธ Configuration Options
const messenger = new FacebookMessenger({
debug: true,
sessionPath: './facebook_session.json',
autoReconnect: true,
maxReconnectAttempts: 5,
reconnectDelay: 5000,
userAgent: 'Custom User Agent'
});
๐ Session Management
Sessions are automatically managed and persisted:
await messenger.login('email', 'password');
const status = messenger.getStatus();
console.log('๐ Status:', {
isConnected: status.isConnected,
isLoggedIn: status.isLoggedIn,
userId: status.userId
});
await messenger.logout();
๐ ๏ธ Error Handling
try {
const loginResult = await messenger.login('email', 'password');
if (!loginResult.success) {
if (loginResult.requires2FA) {
console.log('๐ Two-factor authentication required');
} else {
console.log('โ Login failed:', loginResult.error);
}
return;
}
await messenger.connect();
} catch (error) {
console.error('๐ฅ Connection error:', error.message);
if (error.message.includes('timeout')) {
console.log('๐ Connection timeout - check internet connection');
} else if (error.message.includes('credentials')) {
console.log('๐ Invalid credentials - check email/password');
}
}
๐ค Bot Example
const FacebookMessenger = require('messenger-web-reverse');
class MessengerBot extends FacebookMessenger {
constructor() {
super({ debug: true });
this.setupHandlers();
}
setupHandlers() {
this.on('message', this.handleMessage.bind(this));
this.on('connected', () => {
console.log('๐ค Bot connected and ready!');
});
}
async handleMessage(message) {
const { from, body } = message;
if (body.startsWith('/help')) {
await this.sendMessage(from, '๐ค Available commands:\n/help - Show this help\n/time - Get current time\n/echo <text> - Echo your message');
} else if (body.startsWith('/time')) {
await this.sendMessage(from, `๐ Current time: ${new Date().toISOString()}`);
} else if (body.startsWith('/echo ')) {
const text = body.substring(6);
await this.sendMessage(from, `๐ Echo: ${text}`);
} else {
await this.sendMessage(from, '๐ Hello! Type /help for available commands.');
}
}
}
const bot = new MessengerBot();
await bot.login('bot-email@example.com', 'bot-password');
await bot.connect();
๐ฎ Running Examples
Set your Facebook credentials as environment variables:
export FACEBOOK_EMAIL="your-email@example.com"
export FACEBOOK_PASSWORD="your-password"
export TARGET_USER_ID="friend-user-id"
node examples/real-facebook-messenger.js
With auto-reply enabled:
export AUTO_REPLY="true"
node examples/real-facebook-messenger.js
๐ Project Structure
โโโ lib/
โ โโโ FacebookMessenger.js # Main client class (NEW)
โ โโโ MessengerClient.js # Legacy modular client
โ โโโ auth/ # Authentication components
โ โโโ messaging/ # Message handling
โ โโโ websocket/ # WebSocket management
โ โโโ protocol/ # Protocol parsing
โโโ examples/
โ โโโ real-facebook-messenger.js # Real Facebook example (NEW)
โ โโโ basic-usage.js # Simple example
โ โโโ advanced-usage.js # Advanced bot example
โโโ README.md
๐ Key Advantages
โ
Compared to Browser Automation (Puppeteer):
- Much faster - No browser overhead
- Lower resource usage - Minimal memory and CPU
- More reliable - No browser crashes or timeouts
- Cross-platform - Works on servers, Android (Termux), etc.
- Real-time - True WebSocket connection to Facebook
โ
Compared to Unofficial APIs:
- Direct connection - Uses Facebook's real protocols
- Always up-to-date - Adapts to Facebook's changes
- Full feature support - All Messenger features available
- Real authentication - Uses your actual Facebook account
๐ Requirements
- Node.js 14+
- Facebook account with valid credentials
- Internet connection
- No browser required - Pure Node.js implementation
๐ง Troubleshooting & Metode Corecte
โ ๏ธ FOARTE IMPORTANT - Metodele Corecte:
โ
CORECT:
const FacebookMessenger = require('messenger-web-reverse');
const messenger = new FacebookMessenger();
await messenger.login('email@example.com', 'password');
await messenger.connect();
โ GREศIT:
await client.login('email', 'password');
await messenger.authenticate('email', 'password');
Common Issues:
โ Login Failed:
- Verify email/password are correct
- Check if account requires 2FA
- Ensure account is not locked/restricted
โ Connection Timeout:
- Check internet connection
- Verify firewall settings
- Try different network
โ Session Expired:
- Delete session file:
rm facebook_session.json
- Login again with fresh credentials
โ 2FA Required:
- Currently requires manual handling
- Future versions will support 2FA automation
Debug Mode:
Enable detailed logging:
const messenger = new FacebookMessenger({ debug: true });
๐ค Contributing
Contributions welcome! This library uses reverse-engineered Facebook protocols and benefits from community improvements.
โ๏ธ Legal & Disclaimer
- Educational/Personal Use: This library is for educational and personal use
- Terms of Service: Use responsibly and comply with Facebook's Terms of Service
- Rate Limits: Respect Facebook's rate limiting and usage policies
- Account Safety: Use with your own accounts and at your own risk
๐ License
MIT License - see LICENSE file for details.
๐ฏ Made for developers who need real Facebook Messenger integration without browser automation!
๐ฅ Exemplu Simplu ศi Rapid
Pentru รฎncepฤtori, vezi examples/simple-example.js
:
export FACEBOOK_EMAIL="your-email@gmail.com"
export FACEBOOK_PASSWORD="your-password"
node examples/simple-example.js
โ ๏ธ ATENศIE: Foloseศte MEREU messenger.login()
nu client.login()
!