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 |
|---|---|
connectionClosed | 428 |
connectionLost | 408 |
connectionReplaced | 440 |
timedOut | 408 |
loggedOut | 401 |
badSession | 500 |
restartRequired | 515 |
multideviceMismatch | 411 |