furina-baileys
v1.0.5-furina
Published
Baileys versi Furina untuk membuat bot WhatsApp dengan lebih banyak fitur dan lainnya
Maintainers
Readme
![]()
💍 FURINA-BAILEYS
WhatsApp Web API library dengan stabilitas koneksi, kelengkapan button interaktif, CRM automation, broadcast anti-ban, dan message detection 96+ tipe. Built on top of WhiskeySockets/Baileys.
v1.0.5-furina · TypeScript · Dual CJS/ESM
[!CAUTION] Baileys 7.0.0 introduced breaking changes. Check the migration guide before upgrading.
✨ What Makes This Different
Most WhatsApp libraries give you raw socket access and leave the rest to you. Furina-Baileys adds production features that take weeks to build:
- 🛰️ Stability layer — auto-reconnect tangguh, exponential backoff, stealth mode untuk reconnects
- 🔘 Button set terlengkap — 17 tipe native + 4 modifier message-level, verified on-device (bukan klaim)
- 🗂️ CRM system — track customers, conversations, activity, analytics
- 📨 Broadcast automation — personal/group/channel dengan anti-ban delays (Gaussian, rate cap)
- 🔍 Message detection — recognize 96+ message types termasuk view-once dan reactions
- 🛡️ Anti-BAN protection — health monitor, auto-pause, stealth composing
- 🆔 Custom pairing code —
requestPairingCode(phone, customCode)tanpa error conflict ID - 🌐 Custom browser identity —
Browsers.ubuntu/macOS/baileys/windows/android/appropriate
You still get full Baileys API access. This just handles the boring stuff so you can focus on your bot logic.
📦 Instalasi
npm install furina-baileys🚀 Quick Start
Basic Connection
CommonJS:
const { makeWASocket, useMultiFileAuthState } = require('furina-baileys')
async function start() {
const { state, saveCreds } = await useMultiFileAuthState('auth_info')
const sock = makeWASocket({ auth: state })
sock.ev.on('creds.update', saveCreds)
sock.ev.on('connection.update', ({ connection }) => {
if (connection === 'open') console.log('Connected to WhatsApp')
})
}
start()ESM:
import makeWASocket, { useMultiFileAuthState } from 'furina-baileys'
// struktur sama persisCustom Pairing Code
Tidak mau scan QR? Pakai pairing code, bisa dengan kustomisasi kode:
const sock = makeWASocket({ auth: state })
sock.ev.on('connection.update', async ({ connection }) => {
if (connection === 'open') return
const code = await sock.requestPairingCode('6281234567890', 'FURINA')
console.log('Masukkan kode ini di HP:', code)
})Custom Browser Identity
Ubah identitas yang muncul di "Perangkat tertaut":
const { Browsers } = require('furina-baileys')
const sock = makeWASocket({
auth: state,
browser: Browsers.macOS('Chrome'), // ubuntu / macOS / baileys / windows / android / appropriate
})🗂️ CRM & Broadcast Automation
const { CRMBroadcastManager, InMemoryStorage } = require('furina-baileys')
const storage = new InMemoryStorage()
await storage.init()
const bc = new CRMBroadcastManager(sock, storage)
// Personal broadcast ke segment VIP, spintax + personalization
await bc.send({ tags: ['vip'] }, '{Halo|Hai} {nama}! Ada promo baru nih 📡')
// Group broadcast dengan delay anti-ban
await bc.sendToGroups(['[email protected]'], '{Halo|Hai} semua!')
// Channel broadcast dengan role check
await bc.sendToChannels(['https://whatsapp.com/channel/XXX'], 'Update bot terbaru!')🔍 Message Detection
Recognize 96+ message types termasuk view-once dan reactions — pakai detectMessageType dari CRM utils, semua ter-export di entrypoint utama.
🛰️ Stability Layer
Auto-reconnect dengan exponential backoff dan stealth mode aktif by default: penanganan reconnect otomatis yang tangguh, penyesuaian keep-alive ping, dan auto-recovery saat session terputus.
🛡️ Anti-BAN Protection
Gaussian delay (pola natural), rate cap per menit, dan health monitor dengan auto-pause. Warm up nomor baru bertahap 7 hari dan hormati trigger auto-pause.
🆔 Furina Resolver
Complete WhatsApp identity resolver (LID mapping + USync queries + legacy helpers):
const { getFurinaResolver, isGroup, isLID, isNewsletter } = require('furina-baileys')
const resolver = getFurinaResolver(sock)
const lid = await resolver.resolveLID('[email protected]')
const pn = await resolver.resolvePN('54435237613621@lid')
const jid = await resolver.resolveTarget('@username') // smart auto-detect
console.log(isGroup('[email protected]')) // true
console.log(isLID('54435237613621@lid')) // true
console.log(isNewsletter('xxx@newsletter')) // true🔘 Button Interaktif — Matriks Tested-On-Device
Personal (jalan di WA ORI biasa)
| Tipe | Native name | Callback ke bot |
|---|---|---|
| reply | quick_reply | ✅ |
| list | single_select | ✅ |
| url (+webview) | cta_url | ❌ (buka link) |
| call | cta_call | ❌ (telepon) |
| copy | cta_copy | ❌ (clipboard) |
| reminder | cta_reminder | ❌ |
| cancel-reminder | cta_cancel_reminder | ❌ |
| location | send_location | ✅ |
| address | address_message | ✅ |
Business (butuh akun WhatsApp Business — gratis, convert nomor via app)
| Tipe | Native name | Callback |
|---|---|---|
| catalog | cta_catalog | ❌ (buka katalog) |
| call-permission | call_permission_request | ✅ |
Modifier message-level
| Fitur | Efek |
|---|---|
| bottomSheet | Button >N di-collapse jadi sheet "Lihat X opsi" |
| limitedTimeOffer | Banner countdown flash sale + kode promo |
| has_multiple_buttons | Otomatis di-inject kalau tipe button di-mix |
| header (gambar/video) | Banner media di atas button |
| sendCarousel | 1–10 kartu geser dengan media |
Contoh pakai
const { sendButton, parseButtonResponse } = require('furina-baileys')
await sendButton(sock, jid, {
text: 'Mau order? Pilih jalur 👇',
footer: 'toko lo',
limitedTimeOffer: { text: 'Promo berakhir dalam', copyCode: 'FLASH50', expiresAtMs: Date.now() + 3600000 },
bottomSheet: { buttonsLimit: 2, listTitle: 'Semua opsi', buttonTitle: 'Lihat semua' },
buttons: [
{ type: 'reply', id: '#order', text: '📝 Order Manual' },
{ type: 'copy', text: '💳 Copy QRIS', code: 'NOMOR-REKENING' },
{ type: 'url', text: '🌐 Katalog Web', url: 'https://link.lo', webview: true },
],
})
// nangkep tap user
sock.ev.on('messages.upsert', ({ messages }) => {
for (const m of messages) {
const btn = parseButtonResponse(m)
if (btn) console.log('tap:', btn.kind, btn.id, btn.displayText)
}
})Aturan validasi jumlah (button, row, kartu) ada di FURINA_BUTTON_RULES & FURINA_CAROUSEL_RULES — melanggar = throw eksplisit biar salahnya ketahuan sebelum dikirim, bukan silent-drop di HP penerima.
⚠️ Button Region & Asset-Gated — BACA DULU
Empat tipe button di bawah sudah ada di library ini dan payload-nya sudah benar, tetapi WhatsApp tidak akan merendernya kecuali syarat platform terpenuhi. Validasi terjadi server-side di Meta — bukan bug library, dan tidak bisa diakali lewat payload/node:
| Tipe | Syarat platform | Realita di Indonesia |
|---|---|---|
| pix (payment_info) | Rekening/CPF Brasil, divalidasi bank sentral BR | ❌ tidak akan pernah render |
| order (review_and_pay) | Payments live penuh hanya India & Brasil + onboarding payment provider | ❌ limited testing |
| flow | flow_id wajib published via WABA/Cloud API (nomor Cloud API tidak bisa bareng sesi Web) | ❌ tidak bisa dimiliki dari Baileys |
| product-list | productId wajib asli dari katalog yang commerce-ready (produk draft/review tidak terbaca API) | ⚠️ bisa kalau produk sudah approved |
Workaround yang disediakan library ini (pola seller Indo):
// Pembayaran manual ala QRIS (pengganti PIX/review_and_pay)
await sendButton(sock, jid, {
text: '💳 Pembayaran INV-2026-001',
limitedTimeOffer: { text: 'Bayar dalam', copyCode: 'INV-2026-001', expiresAtMs: Date.now() + 3600000 },
buttons: [
{ type: 'copy', text: '💠 Copy Kode QRIS', code: 'QRIS-LO' },
{ type: 'url', text: '🔗 Payment Link', url: 'https://payment.link/lo', webview: true },
{ type: 'reply', id: '#paid', text: '✅ Udah Bayar' },
],
})
// Form via webview in-app (pengganti flow — UX mirip, server milik lo)
await sendButton(sock, jid, {
text: '📝 Form order (buka in-app):',
buttons: [{ type: 'url', text: '📝 Isi Form', url: 'https://form.lo/order', webview: true }],
})Untuk product-list, helper productCreate + getCatalog tersedia; pastikan status produk Aktif/approved di app WA Business dulu.
🏪 Catatan Akun Business
Status business menempel ke nomor, bukan app: convert nomor lewat app WA Business (gratis), link device via pairing code dari library ini, app-nya boleh di-uninstall setelahnya. Di akun personal, button business (catalog, call-permission, commerce) akan di-silent-ignore oleh WhatsApp.
📖 Dokumentasi
Semua fitur Furina terdokumentasi lengkap di README ini (satu pintu, nggak pecah ke file lain). Untuk referensi API upstream Baileys (messages, groups, chats, media, dll): https://baileys.wiki
📄 Responsible Usage
This library is for legitimate automation. Misuse (spam, scams, bulk messaging without consent) is the user's responsibility, not the developer's.
Guidelines:
- Send only to opt-in lists (people who gave permission)
- Respect opt-out requests (STOP, BERHENTI, unsubscribe)
- Warm up new numbers gradually over 7 days
- Monitor health score and respect auto-pause triggers
- Avoid blasting to cold/unknown contact lists
The upstream Baileys maintainers don't condone usage that violates WhatsApp ToS. Use responsibly — your number is your responsibility.
🎭 Credits
- Furina (Genshin Impact character) — inspiration for project name and visual identity
- Art & demo content — created by Avandy
- Upstream foundation — WhiskeySockets/Baileys
📜 License & Attribution
English
Licensed under Apache License 2.0 with attribution requirements.
Copyright:
- WhiskeySockets/Baileys (2025) — original project
- Avandy (2026) — modifications and additional features
Attribution Requirement:
If you use, modify, or distribute this library, you must credit:
- Original creators: WhiskeySockets
- Modifications: Avandy
- Repository: https://github.com/reivalavandy06-oss/furina-baileys
How to credit:
Built with [Furina-Baileys](https://github.com/reivalavandy06-oss/furina-baileys)
Based on [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)
Modifications by AvandyForking policy: Forks must maintain proper attribution. Removing credits without permission may result in DMCA takedown notices.
Bahasa Indonesia
Dilisensikan di bawah Apache License 2.0 dengan syarat atribusi.
Hak Cipta:
- WhiskeySockets/Baileys (2025) — proyek asli
- Avandy (2026) — modifikasi dan fitur tambahan
Syarat Atribusi:
Jika Anda menggunakan, memodifikasi, atau mendistribusikan library ini, Anda wajib memberikan kredit kepada:
- Pembuat asli: WhiskeySockets
- Modifikasi: Avandy
- Repository: https://github.com/reivalavandy06-oss/furina-baileys
Cara memberikan kredit:
Dibuat dengan [Furina-Baileys](https://github.com/reivalavandy06-oss/furina-baileys)
Berdasarkan [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)
Modifikasi oleh AvandyKebijakan forking: Fork wajib mempertahankan atribusi yang tepat. Menghapus kredit tanpa izin dapat dikenakan DMCA takedown notice.
Disclaimer: Library ini untuk automation yang legitim. Penyalahgunaan (spam, scam, blast tanpa izin) adalah tanggung jawab user, bukan developer.
