API Reference

Methods, events, and configuration

Imports

javascript
const {
    makeWASocket,
    useMultiFileAuthState,
    useSingleFileAuthState,
    DisconnectReason,
    MessageRetryMap,
    fetchLatestBaileysVersion,
    DEFAULT_CONNECTION_CONFIG,
    Browsers
} = require('socketon');

Connection

javascript
const { makeWASocket, useMultiFileAuthState, DisconnectReason } = require('socketon');
const pino = require('pino');

async function startBot() {
    const { state, saveCreds } = await useMultiFileAuthState('./auth');
    
    const sock = makeWASocket({
        logger: pino({ level: 'silent' }),
        auth: state,
        printQRInTerminal: true,
        browser: Browsers('Chrome'),
        connectTimeoutMs: 60000,
    });

    sock.ev.on('connection.update', (update) => {
        const { connection, lastDisconnect, qr } = update;
        if (qr) console.log('QR:', qr);
        if (connection === 'close') {
            const reason = lastDisconnect?.error?.output?.statusCode;
            if (reason !== DisconnectReason.loggedOut) startBot();
        }
    });

    sock.ev.on('creds.update', saveCreds);
}

Send Message

javascript
// Text
await sock.sendMessage('628xxxx@s.whatsapp.net', { text: 'Hello!' });

// Image
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    image: { url: 'https://example.com/image.jpg' },
    caption: 'Caption'
});

// Video
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    video: { url: 'https://example.com/video.mp4' },
    caption: 'Caption'
});

// Audio
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    audio: { url: 'https://example.com/audio.mp3' }
});

// Document
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    document: { url: 'https://example.com/file.pdf' },
    fileName: 'file.pdf'
});

// Sticker
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    sticker: { url: 'https://example.com/sticker.webp' }
});

// Location
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    location: { degreesLatitude: -6.2, degreesLongitude: 106.8 }
});

// Contact
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    contacts: {
        contacts: [{
            displayName: 'John',
            contacts: [{ waid: '628xxxx', phone: '628xxxx' }]
        }]
    }
});

Reply

javascript
sock.ev.on('messages.upsert', async ({ messages }) => {
    const msg = messages[0];
    if (!msg.key.fromMe && msg.message) {
        // Reply text
        await sock.sendMessage(msg.key.remoteJid, {
            text: 'Reply message'
        }, { quoted: msg });
        
        // Reply with media
        await sock.sendMessage(msg.key.remoteJid, {
            image: { url: 'https://example.com/image.jpg' }
        }, { quoted: msg });
    }
});

React & Forward

javascript
// React
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    react: { key: msg.key, text: '👍' }
});

// Forward
await sock.sendMessage('target@s.whatsapp.net', {
    forward: msg
});

// Delete
await sock.sendMessage('628xxxx@s.whatsapp.net', {
    delete: msg.key
});

Groups

javascript
// Create
const group = await sock.groupCreate('Group Name', ['628xxxx@s.whatsapp.net']);

// Add
await sock.groupParticipantsUpdate('group@s.whatsapp.net', ['628xxxx@s.whatsapp.net'], 'add');

// Remove
await sock.groupParticipantsUpdate('group@s.whatsapp.net', ['628xxxx@s.whatsapp.net'], 'remove');

// Promote
await sock.groupParticipantsUpdate('group@s.whatsapp.net', ['628xxxx@s.whatsapp.net'], 'promote');

// Demote
await sock.groupParticipantsUpdate('group@s.whatsapp.net', ['628xxxx@s.whatsapp.net'], 'demote');

// Subject
await sock.groupUpdateSubject('group@s.whatsapp.net', 'New Name');

// Description
await sock.groupUpdateDescription('group@s.whatsapp.net', 'Description');

// Invite code
const code = await sock.groupInviteCode('group@s.whatsapp.net');
await sock.groupAcceptInvite(code);

// Leave
await sock.groupLeave('group@s.whatsapp.net');

// Metadata
const meta = await sock.groupMetadata('group@s.whatsapp.net');

Newsletter

javascript
// ID from URL
const id = await sock.newsletterId('https://newsletter.com/channel');

// Follow
await sock.newsletterFollow(id);

// Unfollow
await sock.newsletterUnfollow(id);

// Mute/Unmute
await sock.newsletterMute(id);
await sock.newsletterUnmute(id);

// Metadata
const meta = await sock.newsletterMetadata('id', id);

// Messages
const msgs = await sock.newsletterFetchMessages('id', id, 10);

// Send
await sock.sendMessage(id, { text: 'Hello!' });

// React
await sock.newsletterReactMessage(id, serverId, '👍');

// Create
const newNL = await sock.newsletterCreate({ name: 'Channel', description: 'Desc' });

Profile

javascript
// Name
await sock.updateProfileName('My Name');

// Picture
await sock.updateProfilePicture('628xxxx@s.whatsapp.net', { url: 'photo.jpg' });

// Status
await sock.updateProfileStatus('My status');

// Picture URL
const url = await sock.profilePictureUrl('628xxxx@s.whatsapp.net');

// Block/Unblock
await sock.updateBlockStatus('628xxxx@s.whatsapp.net', 'block');
await sock.updateBlockStatus('628xxxx@s.whatsapp.net', 'unblock');

// Blocklist
const list = await sock.fetchBlocklist();

Privacy

javascript
// Get settings
const privacy = await sock.fetchPrivacySettings();

// Update (values: 'all', 'contacts', 'none')
await sock.updateLastSeenPrivacy('all');
await sock.updateOnlinePrivacy('all');
await sock.updateProfilePicturePrivacy('all');
await sock.updateStatusPrivacy('all');
await sock.updateReadReceiptsPrivacy('all');
await sock.updateGroupsAddPrivacy('all');

Business

javascript
// Profile
const biz = await sock.getBusinessProfile('628xxxx@s.whatsapp.net');

// Catalog
const catalog = await sock.getCatalog({ jid: '628xxxx@s.whatsapp.net' });

// Collections
const collections = await sock.getCollections('628xxxx@s.whatsapp.net');

// Order
const order = await sock.getOrderDetails(orderId);

Presence

javascript
// Subscribe
sock.presenceSubscribe('628xxxx@s.whatsapp.net');

// Update
await sock.sendPresenceUpdate('available');
await sock.sendPresenceUpdate('composing', '628xxxx@s.whatsapp.net');
await sock.sendPresenceUpdate('recording', '628xxxx@s.whatsapp.net');
await sock.sendPresenceUpdate('paused', '628xxxx@s.whatsapp.net');

// Listen
sock.ev.on('presence.update', ({ id, presences }) => {
    console.log(id, presences);
});

Chat

javascript
// Archive
await sock.chatModify({ archive: true }, '628xxxx@s.whatsapp.net');

// Pin
await sock.chatModify({ pin: true }, '628xxxx@s.whatsapp.net');

// Mute (seconds)
await sock.chatModify({ mute: 3600 }, '628xxxx@s.whatsapp.net');

// Delete
await sock.chatModify({ delete: true }, '628xxxx@s.whatsapp.net');

// Star
await sock.star('628xxxx@s.whatsapp.net', [msgId], true);

// Labels
await sock.addChatLabel('628xxxx@s.whatsapp.net', labelId);
await sock.removeChatLabel('628xxxx@s.whatsapp.net', labelId);

Events

Event Description
connection.update Connection state: { connection, qr, lastDisconnect }
messages.upsert New messages: { messages, type }
messages.update Message updates: [{ key, update }]
presence.update Presence changes: { id, presences }
chats.upsert New chats
chats.update Chat updates
contacts.upsert New contacts
groups.update Group updates
call Calls: [{ id, from, isVideo, isGroup }]
creds.update Credentials updated
newsletter.reaction Newsletter reactions
blocklist.update Blocklist: { blocklist, type }

Disconnect Reasons

Name Code
connectionClosed428
connectionLost408
connectionReplaced440
timedOut408
loggedOut401
badSession500
restartRequired515
multideviceMismatch411