fca-priyansh
Version:
Facebook-chat-api made by Priyanshu Rajput
638 lines (476 loc) • 14.8 kB
Markdown
# 📚 FCA-Priyansh Complete Documentation
**Comprehensive guides for Facebook Chat API (FCA) development**
**Maintained by:** [Priyanshu Rajput](https://priyanshuapi.xyz) | **GitHub:** [@priyanshfsdev](https://github.com/priyanshfsdev) | **GitLab:** [@priyanshufsdev](https://gitlab.com/priyanshufsdev) | **Instagram:** [@pri_yanshu12](https://instagram.com/pri_yanshu12) | **Telegram:** [@Priyanshrajput](https://t.me/Priyanshrajput)
## 📖 Table of Contents
1. [Getting Started Guide](#getting-started)
2. [Authentication & Login](#authentication)
3. [API Reference](#api-reference)
4. [Message Types & Features](#message-features)
5. [Event Handling](#event-handling)
6. [Advanced Topics](#advanced-topics)
7. [Troubleshooting](#troubleshooting)
8. [Best Practices](#best-practices)
## 🚀 Getting Started with FCA
### What is FCA-Priyansh?
**FCA (Facebook Chat API)** is a powerful Node.js library that allows you to:
- 🤖 Create automated Facebook Messenger bots
- 💬 Send and receive messages programmatically
- 📱 Build real-time chat applications
- 🔔 Implement notification systems
- 👥 Manage group conversations
- 📊 Monitor and log messages
FCA-Priyansh is the community-maintained fork with:
- ⚡ Faster feature updates
- 🐛 Active bug fixes
- 📈 Enhanced functionality
- 👥 Community support
### Installation
```bash
# From NPM (Recommended for production)
npm install fca-priyansh
# From GitLab (Latest development features)
npm install https://gitlab.com/priyanshufsdev/fca-priyansh.git
# From GitHub Mirror
npm install https://github.com/priyanshfsdev/fca-priyansh.git
```
### Minimum Requirements
- **Node.js:** 12.0 or higher (LTS recommended)
- **Operating System:** Windows, macOS, Linux
- **Internet:** Stable connection
- **Facebook Account:** For authentication
- **Basic JavaScript Knowledge:** For implementation
## 🔐 Authentication & Login Guide
### Method 1: Email & Password Login
**⚠️ Warning:** Storing passwords in code is NOT SAFE. Use AppState caching instead.
```javascript
const login = require("fca-priyansh");
login({
email: "your@email.com",
password: "your_password"
}, (err, api) => {
if(err) return console.error(err);
console.log("✅ Logged in successfully!");
// Your bot code here
});
```
### Method 2: AppState Session Caching (RECOMMENDED)
#### Step 1: Generate and Save AppState
```javascript
const fs = require("fs");
const login = require("fca-priyansh");
var credentials = {
email: "your@email.com",
password: "your_password"
};
login(credentials, (err, api) => {
if(err) return console.error(err);
// Save the session
var appState = api.getAppState();
fs.writeFileSync('appstate.json', JSON.stringify(appState));
console.log("✅ AppState saved! You can now use it for future logins.");
});
```
#### Step 2: Use Saved AppState (No Password Needed)
```javascript
const fs = require("fs");
const login = require("fca-priyansh");
var appState = JSON.parse(fs.readFileSync('appstate.json', 'utf8'));
login({appState: appState}, (err, api) => {
if(err) return console.error(err);
console.log("✅ Logged in using saved session!");
// Your bot code here
});
```
### Login Options
```javascript
login(credentials, {
pageID: "123456789", // Login as a Facebook page
selfListen: true, // Receive your own messages
listenEvents: true, // Receive group events
updatePresence: true, // Show online status
forceLogin: false, // Force new login if session invalid
}, callback);
```
### Handling 2FA (Two-Factor Authentication)
```javascript
login({
email: "your@email.com",
password: "your_password",
twoFactorNumber: "123456" // Your 2FA code from authenticator app
}, (err, api) => {
if(err) return console.error(err);
// Logged in successfully
});
```
## 🎯 Core API Reference
### Message Operations
#### **api.sendMessage(message, threadID, [callback], [messageID])**
Send messages to individuals or groups.
**Parameters:**
- `message` (Object|String) - Message content object or text string
- `threadID` (String) - Target user or group ID
- `callback` (Function) - Optional callback for response
- `messageID` (String) - Optional message ID for replies
**Message Object Structure:**
```javascript
{
body: "Text message", // Text content
attachment: fs.createReadStream('image.jpg'), // Single or array of files
sticker: "STICKER_ID", // Sticker ID
url: "https://example.com", // Link to share
emoji: "😀", // Emoji to react
emojiSize: "large", // Emoji size: small/medium/large
mentions: [{tag: "@name", id: "USER_ID"}] // Mention users
}
```
**Example: Send Text Message**
```javascript
api.sendMessage("Hello! This is an automated message.", "USER_ID", (err) => {
if(err) console.error("Failed to send message:", err);
else console.log("✅ Message sent!");
});
```
**Example: Send Image**
```javascript
api.sendMessage({
body: "Check out this image!",
attachment: fs.createReadStream('photo.jpg')
}, "USER_ID");
```
**Example: Send Multiple Attachments**
```javascript
api.sendMessage({
body: "Here are some files:",
attachment: [
fs.createReadStream('file1.pdf'),
fs.createReadStream('file2.doc')
]
}, "USER_ID");
```
#### **api.sendTypingIndicator(threadID, [callback])**
Show "typing..." indicator in chat.
```javascript
api.sendTypingIndicator("USER_ID", (err) => {
if(err) console.error(err);
else console.log("Typing indicator sent");
});
```
#### **api.setMessageReaction(emoji, messageID, [callback])**
React to a message with emoji.
```javascript
api.setMessageReaction("😂", "MESSAGE_ID", (err) => {
if(err) console.error(err);
else console.log("✅ Reaction added!");
});
```
#### **api.deleteMessage(messageID, [callback])**
Delete a sent message (must be your own message).
```javascript
api.deleteMessage("MESSAGE_ID", (err) => {
if(err) console.error(err);
else console.log("✅ Message deleted!");
});
```
#### **api.unsendMessage(messageID, [callback])**
Unsend a message (removes for all participants).
```javascript
api.unsendMessage("MESSAGE_ID", (err) => {
if(err) console.error(err);
else console.log("✅ Message unsent!");
});
```
### Thread/Chat Operations
#### **api.getThreadList(limit, [timestamp], [callback])**
Get list of conversations.
```javascript
api.getThreadList(20, null, (err, threads) => {
if(err) return console.error(err);
threads.forEach(thread => {
console.log(thread.name + " (" + thread.threadID + ")");
});
});
```
#### **api.getThreadInfo(threadID, [callback])**
Get detailed information about a thread.
```javascript
api.getThreadInfo("THREAD_ID", (err, info) => {
if(err) return console.error(err);
console.log("Thread name:", info.threadName);
console.log("Participants:", info.participantIDs);
console.log("Unread count:", info.unreadCount);
});
```
#### **api.getThreadHistory(threadID, amount, [timestamp], [callback])**
Retrieve message history from a conversation.
```javascript
api.getThreadHistory("THREAD_ID", 10, null, (err, messages) => {
if(err) return console.error(err);
messages.forEach(msg => {
console.log(msg.senderName + ": " + msg.body);
});
});
```
#### **api.setTitle(newTitle, threadID, [callback])**
Change group chat title/name.
```javascript
api.setTitle("New Group Name 🎉", "GROUP_ID", (err) => {
if(err) console.error(err);
else console.log("✅ Title changed!");
});
```
#### **api.createNewGroup([names], [callback])**
Create a new group chat.
```javascript
var userIds = ["USER_ID_1", "USER_ID_2", "USER_ID_3"];
api.createNewGroup(userIds, (err, groupID) => {
if(err) console.error(err);
else console.log("✅ Group created: " + groupID);
});
```
---
### Message Markings
#### **api.markAsRead(threadID, [callback])**
Mark messages as read in a thread.
```javascript
api.markAsRead("THREAD_ID", (err) => {
if(err) console.error(err);
else console.log("✅ Marked as read!");
});
```
#### **api.markAsSeen(threadID, [callback])**
Mark thread as seen (removes notification badge).
```javascript
api.markAsSeen("THREAD_ID", (err) => {
if(err) console.error(err);
});
```
### User Information
#### **api.getUserInfo(userIDs, [callback])**
Get information about users.
```javascript
api.getUserInfo(["USER_ID_1", "USER_ID_2"], (err, users) => {
if(err) return console.error(err);
Object.keys(users).forEach(id => {
console.log(users[id].name);
console.log(users[id].profilePicture);
});
});
```
#### **api.getCurrentUserID()**
Get the ID of the logged-in account.
```javascript
var myID = api.getCurrentUserID();
console.log("My ID:", myID);
```
## 📞 Event Handling Guide
### Listening to Messages & Events
```javascript
api.setOptions({
listenEvents: true, // Receive group events
selfListen: true // Receive your own messages
});
api.listenMqtt((err, event) => {
if(err) return console.error(err);
switch(event.type) {
case "message":
console.log("Message from", event.senderName);
console.log("Content:", event.body);
break;
case "event":
console.log("Group event:", event.logMessageData);
break;
}
});
```
### Event Properties
**Message Event:**
```javascript
{
type: "message",
senderID: "USER_ID",
senderName: "John Doe",
threadID: "THREAD_ID",
body: "Message text",
isGroup: true,
messageID: "MSG_ID",
attachments: [],
timestamp: 1609459200000
}
```
**Event (Group Change):**
```javascript
{
type: "event",
threadID: "GROUP_ID",
logMessageType: "log:thread-name", // Type of event
logMessageData: {
name: "New Group Name" // Event details
}
}
```
## 🔧 Advanced Topics
### Custom Error Handling
```javascript
login(credentials, (err, api) => {
if(err) {
switch(err.code) {
case 1: // Wrong email/password
console.log("❌ Invalid credentials");
break;
case 2: // 2FA needed
console.log("⚠️ Two-factor authentication required");
break;
default:
console.log("❌ Login failed:", err.message);
}
return;
}
// Successfully logged in
});
```
### Rate Limiting & Delays
```javascript
function sendMessageWithDelay(api, message, threadID, delayMs = 1000) {
setTimeout(() => {
api.sendMessage(message, threadID);
}, delayMs);
}
// Send multiple messages with delays to avoid spam detection
var messages = ["Hello", "How are you?", "I'm a bot!"];
messages.forEach((msg, index) => {
sendMessageWithDelay(api, msg, "THREAD_ID", index * 2000);
});
```
### Session Persistence
```javascript
const fs = require("fs");
const path = require("path");
const saveAppState = (appState, filePath = 'appstate.json') => {
fs.writeFileSync(path.join(__dirname, filePath),
JSON.stringify(appState, null, 2));
};
const loadAppState = (filePath = 'appstate.json') => {
return JSON.parse(fs.readFileSync(path.join(__dirname, filePath), 'utf8'));
};
// Usage
saveAppState(api.getAppState());
// Later...
login({appState: loadAppState()}, callback);
```
## 🐛 Troubleshooting Common Issues
### Issue: "repository not found"
**Solution:** Check your GitLab/GitHub URL and credentials.
### Issue: Messages not sending
**Solution:**
1. Verify threadID is correct
2. Check account is not temporarily blocked
3. Ensure you have permission to message the user
4. Look for rate limiting (too many messages)
### Issue: Login fails with valid credentials
**Solution:**
1. Try manual login on Facebook.com
2. Check for 2FA or security alerts
3. Try disabling browser extensions
4. Wait 15 minutes if account is temporarily locked
### Issue: listenMqtt stops working
**Solution:**
1. Restart the bot
2. Check internet connection
3. Verify AppState is still valid
4. Re-login if session expired
## ✅ Best Practices
### 1. Secure Credential Management
```javascript
// ❌ DON'T: Store credentials in code
const credentials = {
email: "user@gmail.com",
password: "password123"
};
// ✅ DO: Use environment variables
const credentials = {
email: process.env.FB_EMAIL,
password: process.env.FB_PASSWORD
};
// ✅ BEST: Use saved AppState
const credentials = {
appState: JSON.parse(fs.readFileSync('.appstate.json'))
};
```
### 2. Error Handling
```javascript
api.sendMessage(message, threadID, (err) => {
if(err) {
console.error("❌ Send failed:", err.message);
// Retry logic or logging
}
});
```
### 3. Rate Limiting
```javascript
// Add delays between messages
setTimeout(() => {
api.sendMessage("Message 1", threadID);
}, 1000);
setTimeout(() => {
api.sendMessage("Message 2", threadID);
}, 3000);
```
### 4. Logging & Monitoring
```javascript
api.setOptions({
logLevel: "warning" // Only show warnings and errors
});
// Log all events
api.listenMqtt((err, event) => {
console.log(`[${new Date().toISOString()}] Event:`, event.type);
});
```
### 5. Graceful Shutdown
```javascript
const stopListening = api.listenMqtt((err, event) => {
// Handle events
});
// Clean shutdown
process.on("SIGINT", () => {
console.log("Shutting down...");
stopListening();
process.exit(0);
});
```
## 📞 Support & Community
### Get Help
- 📖 **Read Docs:** Check [README.md](README.md)
- 🐛 **Report Bugs:** [GitLab Issues](https://gitlab.com/priyanshufsdev/fca-priyansh/-/issues)
- 💬 **Ask Questions:** [Telegram Community](https://t.me/Priyanshrajput)
- 📧 **Email:** Contact via [priyanshuapi.xyz](https://priyanshuapi.xyz)
### Related Resources
- [Facebook Messenger Platform](https://developers.facebook.com/docs/messenger-platform)
- [Node.js Documentation](https://nodejs.org/docs/)
- [NPM Package](https://www.npmjs.com/package/fca-priyansh)
## 📝 License
This documentation and code are licensed under the MIT License. See [LICENSE](LICENSE) for details.
**Last Updated:** March 2026 | **Version:** FCA-Priyansh Latest | **Maintainer:** [Priyanshu Rajput](https://priyanshuapi.xyz)
**Happy Bot Building! 🤖** Built with ❤️ by the FCA Community