Leichte Bibliothek zur Verwaltung mehrerer WhatsApp-Sessions – mit einer universellen sendMessage
-Funktion und direkter relayMessage
-Unterstützung für alle fortgeschrittenen Szenarien.
npm install @deathnaitsa/wa-api@latest
// CommonJS
const wa = require('@deathnaitsa/wa-api');
// ES Module
import * as wa from '@deathnaitsa/wa-api';
await wa.startSession('session1');
await wa.startSessionWithPairingCode('session2', { phoneNumber: '491234567890' });
const all = wa.getAllSession();
const one = wa.getSession('session1');
const loaded = await wa.loadSessionsFromStorage();
Eine zentrale Funktion für alle Nachrichtentypen:
await wa.sendMessage(
sessionId, // Session-ID
jidOrPhone, // JID oder Telefonnummer
content, // AnyMessageContent
options // MiscMessageGenerationOptions
);
Typ | Kurzbeschreibung | content | options |
---|---|---|---|
Text | Normale Textnachricht | { text: 'Hallo Welt!' } |
{ quoted, mentions } |
Bild | Sende Bild | { image:{url:'./img.png'},caption:'Bild',viewOnce:true } |
{ quoted } |
Video | Sende Video | { video:{url:'./vid.mp4'},caption:'Video' } |
{ } |
GIF | Sende GIF (MP4 + Playback) | { video:{url:'./gif.mp4'},gifPlayback:true } |
{ } |
Audio | Voice Note (OGG/Opus) | { audio: fs.createReadStream('test.ogg'),mimetype:'audio/ogg',ptt:true } |
{ quoted } |
Dokument | Datei | { document:{url:'./doc.pdf',filename:'Doc.pdf'} } |
{ } |
Poll | Umfrage | { pollCreationMessage:{name:'Umfrage',options:[{name:'A'},{name:'B'}],selectableCount:1} } |
{ quoted } |
React | Emoji-Reaktion | { react:{text:'👍',key:msg.key} } |
{ quoted } |
Delete | Löschen (Revoke) | { delete: msg.key } |
{ } |
Pin | Pin/Unpin | { pin:{type:1,time:3600,key:msg.key} } |
{ } |
Contacts | Kontaktkarte | { contacts:{displayName:'Max',contacts:[{vcard}] } } |
{ } |
Location | Standort | { location:{degreesLatitude:52.52,degreesLongitude:13.405} } |
{ } |
Forward | Weiterleiten | { forward: origMsg } |
{ quoted } |
Status (Story) | Status-Update | { video:{url:'story.mp4'},caption:'Status' } |
{ statusJidList:[...JIDs] } |
Direktes Senden von WAMessage-Stanzas für Spezialfälle.
const deleteNode = {
protocolMessage: {
key: { remoteJid: chatJid, fromMe: true, id: targetId },
type: 7 // MESSAGE_REVOKE
}
};
await wa.relayMessage(
sessionId,
chatJid,
deleteNode,
{ messageId: targetId }
);
// 24h Ephemeral ein
await wa.relayMessage(
sessionId,
groupJid,
{ disappearingMessagesInChat: Defaults.WA_DEFAULT_EPHEMERAL },
{}
);
// Ephemeral aus
await wa.relayMessage(
sessionId,
groupJid,
{ disappearingMessagesInChat: 0 },
{}
);
const storyNode = {
videoMessage: { url: './story.mp4' },
caption: 'Meine Story'
};
await wa.relayMessage(
sessionId,
'status@broadcast',
storyNode,
{ statusJidList: ['491234567890@s.whatsapp.net'] }
);
const origMsg = getMessageFromStore();
const forwardNode = { forward: origMsg };
await wa.relayMessage(
sessionId,
chatJid,
forwardNode,
{ messageId: origMsg.key.id }
);
const updateNode = {
profilePictureChange: {
displayPicture: fs.readFileSync('./newprofile.jpg')
}
};
await wa.relayMessage(
sessionId,
userJid,
updateNode,
{ messageId: 'nishiProfileUpdate' }
);
const readNode = {
protocolMessage: {
key: { remoteJid: chatJid },
type: 3 // READ
}
};
await wa.relayMessage(
sessionId,
chatJid,
readNode,
{ messageId: 'nishiMarkRead' }
);
await wa.relayMessage(
msg.sessionId, // deine Session-ID
msg.key.remoteJid,
{
conversation: 'Dies ist eine Relay-Textnachricht'
},
{ messageId: `nishi`+ Date.now(); }
);
wa.onConnected(id => console.log('Online:', id));
wa.onQRUpdated(info => console.log('QR:', info));
wa.onMessageReceived(msg => console.log('Nachricht:', msg));
try {
await wa.sendMessage(...);
} catch(e) {
console.error(e);
}
© 2025 @deathnaitsa/wa-api
• Support: sebloidl13@gmail.com