@neelegirl/wa-api 1.6.0 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Messaging/index.d.ts +19 -35
- package/dist/Messaging/index.js +42 -102
- package/dist/Socket/index.d.ts +33 -10
- package/dist/Socket/index.js +277 -352
- package/dist/whatsapp/index.js +2 -8
- package/package.json +22 -33
- package/readme.md +55 -643
package/readme.md
CHANGED
|
@@ -1,676 +1,88 @@
|
|
|
1
|
-
|
|
1
|
+
# @neelegirl/wa-api
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+

|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
**aufbauend auf dem gepflegten `@neelegirl/baileys`-Fork.**
|
|
5
|
+
High-level multi-session API wrapper for WhatsApp automation, built on `@neelegirl/baileys`.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
[](https://www.npmjs.com/package/@neelegirl/baileys)
|
|
10
|
-
[](https://nodejs.org)
|
|
7
|
+
## Status
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
- Package version: `1.6.0`
|
|
10
|
+
- Runtime: Node.js `>=20`
|
|
11
|
+
- Core dependency: `@neelegirl/baileys` `^2.1.0`
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
## Features
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
- Multi-session start/stop with filesystem credentials
|
|
16
|
+
- QR flow via callback
|
|
17
|
+
- Pairing-code flow via callback
|
|
18
|
+
- Auto reconnect retries (up to 10 attempts)
|
|
19
|
+
- Message upsert/update callbacks with helper media savers
|
|
20
|
+
- `sendMessage`, `sendStatusMentions`, and low-level `relayMessage`
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## Update-Stand
|
|
23
|
-
|
|
24
|
-
- abgestimmt auf `@neelegirl/baileys@2.1.x`
|
|
25
|
-
- Dokumentation auf den realen Dist-Exports bereinigt
|
|
26
|
-
- Bild/Branding modernisiert
|
|
27
|
-
- Hinweise ergänzt, was lokal funktioniert und was bewusst nicht behauptet wird
|
|
28
|
-
|
|
29
|
-
**Wichtig:** `wa-api` baut auf dem aktualisierten Neelegirl-Baileys-Fork auf. Es ist keine eigenständige Neuimplementierung von WhiskeySockets/Baileys, sondern eine Wrapper-Schicht darüber.
|
|
30
|
-
|
|
31
|
-
## Installation
|
|
22
|
+
## Install
|
|
32
23
|
|
|
33
24
|
```bash
|
|
34
|
-
npm install @neelegirl/wa-api
|
|
25
|
+
npm install @neelegirl/wa-api
|
|
35
26
|
```
|
|
36
27
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
yarn add @neelegirl/wa-api @neelegirl/baileys
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Voraussetzungen
|
|
44
|
-
|
|
45
|
-
- Node.js `20+`
|
|
46
|
-
- WhatsApp Multi-Device-Konto
|
|
47
|
-
- persistenter Speicherort für Sessiondaten
|
|
48
|
-
|
|
49
|
-
## Schnellstart
|
|
28
|
+
## Quick Start
|
|
50
29
|
|
|
51
30
|
```js
|
|
52
31
|
const wa = require('@neelegirl/wa-api')
|
|
53
32
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
console.log('Session gestartet')
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
wa.onConnected((sessionId) => {
|
|
63
|
-
console.log(`[${sessionId}] verbunden`)
|
|
33
|
+
wa.onQRUpdated(({ sessionId, qr }) => {
|
|
34
|
+
console.log('QR for session:', sessionId)
|
|
35
|
+
console.log(qr)
|
|
64
36
|
})
|
|
65
37
|
|
|
66
|
-
wa.
|
|
67
|
-
console.log(
|
|
38
|
+
wa.onConnected((sessionId) => {
|
|
39
|
+
console.log('connected:', sessionId)
|
|
68
40
|
})
|
|
69
41
|
|
|
70
|
-
wa.onMessageReceived(async (
|
|
71
|
-
const
|
|
72
|
-
const
|
|
42
|
+
wa.onMessageReceived(async (msg) => {
|
|
43
|
+
const sessionId = msg.sessionId
|
|
44
|
+
const jid = msg.key?.remoteJid
|
|
45
|
+
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text || ''
|
|
73
46
|
|
|
74
|
-
if (text.toLowerCase() === 'ping') {
|
|
47
|
+
if (jid && text.toLowerCase() === 'ping') {
|
|
75
48
|
await wa.sendMessage(sessionId, jid, { text: 'pong' })
|
|
76
49
|
}
|
|
77
50
|
})
|
|
78
51
|
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Session-API
|
|
83
|
-
|
|
84
|
-
### Starten
|
|
85
|
-
|
|
86
|
-
```js
|
|
87
|
-
await wa.startSession('session-a', { printQR: true })
|
|
88
|
-
|
|
89
|
-
await wa.startSessionWithPairingCode('session-b', {
|
|
90
|
-
phoneNumber: '491234567890'
|
|
91
|
-
})
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Verwalten
|
|
95
|
-
|
|
96
|
-
```js
|
|
97
|
-
const all = wa.getAllSession()
|
|
98
|
-
const one = wa.getSession('session-a')
|
|
99
|
-
|
|
100
|
-
await wa.deleteSession('session-a')
|
|
101
|
-
await wa.loadSessionsFromStorage()
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Messaging
|
|
105
|
-
|
|
106
|
-
Die Dist-API bietet einen universellen `sendMessage`-Wrapper über die aktive Session:
|
|
107
|
-
|
|
108
|
-
```js
|
|
109
|
-
await wa.sendMessage('session-a', '491234567890@s.whatsapp.net', {
|
|
110
|
-
text: 'Hallo aus wa-api'
|
|
111
|
-
})
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Zusätzlich gibt es `relayMessage`, wenn du gezielt weiterleiten bzw. rohe Baileys-Pfade der Session nutzen willst.
|
|
115
|
-
|
|
116
|
-
## Event-Hooks
|
|
117
|
-
|
|
118
|
-
Vorhandene Event-Helper im Dist-Build:
|
|
119
|
-
|
|
120
|
-
- `onMessageReceived(listener)`
|
|
121
|
-
- `onQRUpdated(listener)`
|
|
122
|
-
- `onConnected(listener)`
|
|
123
|
-
- `onDisconnected(listener)`
|
|
124
|
-
- `onConnecting(listener)`
|
|
125
|
-
- `onMessageUpdate(listener)`
|
|
126
|
-
- `onPairingCode(listener)`
|
|
127
|
-
|
|
128
|
-
## Konsole beim Start
|
|
129
|
-
|
|
130
|
-
Diese Zustände sind beim echten Start normal:
|
|
131
|
-
|
|
132
|
-
- QR wird im Terminal angezeigt, wenn noch keine Session gespeichert ist
|
|
133
|
-
- Pairing-Code wird ausgegeben, wenn du die Pairing-Variante nutzt
|
|
134
|
-
- `connected`/`disconnected` wechseln bei Reconnects sauber
|
|
135
|
-
- nach `creds.update` bleibt die Session für Folgestarts erhalten
|
|
136
|
-
|
|
137
|
-
## Was wirklich funktioniert
|
|
138
|
-
|
|
139
|
-
- mehrere parallele Sessions
|
|
140
|
-
- Sessionstart per QR
|
|
141
|
-
- Sessionstart per Pairing-Code
|
|
142
|
-
- Nachrichtenversand über aktive Sessions
|
|
143
|
-
- Sessionzugriff über `getSession()` für tiefergehende eigene Arbeit
|
|
144
|
-
- Event-Listener für eingehende Nachrichten und Verbindungsstatus
|
|
145
|
-
|
|
146
|
-
## Was bewusst **nicht** behauptet wird
|
|
147
|
-
|
|
148
|
-
- kein separater, vollständig dokumentierter Source-Build im Paket selbst
|
|
149
|
-
- kein vollständiger Ersatz für das volle Baileys-API-Surface
|
|
150
|
-
- kein Anspruch auf vollständigen Upstream-Gleichstand in jeder internen Implementierungsdetailschicht
|
|
151
|
-
|
|
152
|
-
## Empfehlung für produktive Nutzung
|
|
153
|
-
|
|
154
|
-
- `@neelegirl/baileys` und `@neelegirl/wa-api` immer gemeinsam aktualisieren
|
|
155
|
-
- Sessionordner außerhalb flüchtiger Deploy-Ordner speichern
|
|
156
|
-
- bei Multi-Session-Projekten eigene Health-/Reconnect-Logs ergänzen
|
|
157
|
-
|
|
158
|
-
## Lizenz
|
|
159
|
-
|
|
160
|
-
`wa-api` bleibt die einfache Bedienebene. Die technische WhatsApp-Web-Basis stammt aus `@neelegirl/baileys`, das selektiv auf aktuellem WhiskeySockets/Baileys-Wissen aufsetzt.
|
|
161
|
-
image: { url: './bild.jpg' },
|
|
162
|
-
caption: 'Schönes Bild! ✨'
|
|
163
|
-
});
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
#### 3. **Video**
|
|
167
|
-
|
|
168
|
-
```javascript
|
|
169
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
170
|
-
video: { url: './video.mp4' },
|
|
171
|
-
caption: 'Mein Video! 🎬'
|
|
172
|
-
});
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
#### 4. **GIF (als Video)**
|
|
176
|
-
|
|
177
|
-
```javascript
|
|
178
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
179
|
-
video: { url: './animation.mp4' },
|
|
180
|
-
gifPlayback: true, // Wichtig für GIFs!
|
|
181
|
-
caption: 'Kawaii GIF! ✨'
|
|
182
|
-
});
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### 5. **Audio/Sprachnachricht**
|
|
186
|
-
|
|
187
|
-
```javascript
|
|
188
|
-
const fs = require('fs');
|
|
189
|
-
|
|
190
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
191
|
-
audio: fs.createReadStream('./audio.ogg'),
|
|
192
|
-
mimetype: 'audio/ogg',
|
|
193
|
-
ptt: true // Push-to-Talk (Sprachnachricht)
|
|
194
|
-
});
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
#### 6. **Dokument**
|
|
198
|
-
|
|
199
|
-
```javascript
|
|
200
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
201
|
-
document: {
|
|
202
|
-
url: './dokument.pdf',
|
|
203
|
-
filename: 'Wichtiges Dokument.pdf'
|
|
204
|
-
},
|
|
205
|
-
mimetype: 'application/pdf'
|
|
206
|
-
});
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
#### 7. **Umfrage (Poll)**
|
|
210
|
-
|
|
211
|
-
```javascript
|
|
212
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
213
|
-
poll: {
|
|
214
|
-
name: 'Was ist deine Lieblingsfarbe?',
|
|
215
|
-
values: ['Rot', 'Blau', 'Grün', 'Gelb'],
|
|
216
|
-
selectableCount: 1 // Anzahl der auswählbaren Optionen
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
#### 8. **Reaktion**
|
|
222
|
-
|
|
223
|
-
```javascript
|
|
224
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
225
|
-
react: {
|
|
226
|
-
text: '❤️', // Emoji
|
|
227
|
-
key: message.key // Key der Nachricht
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
// Reaktion entfernen
|
|
232
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
233
|
-
react: {
|
|
234
|
-
text: '', // Leerer String entfernt Reaktion
|
|
235
|
-
key: message.key
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
#### 9. **Nachricht löschen**
|
|
241
|
-
|
|
242
|
-
```javascript
|
|
243
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
244
|
-
delete: message.key // Für alle löschen
|
|
245
|
-
});
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
#### 10. **Nachricht anpinnen**
|
|
249
|
-
|
|
250
|
-
```javascript
|
|
251
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
252
|
-
pin: {
|
|
253
|
-
type: 1, // 0 = entfernen, 1 = anpinnen
|
|
254
|
-
time: 86400, // Sekunden (24h = 86400)
|
|
255
|
-
key: message.key
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
#### 11. **Kontakt teilen**
|
|
261
|
-
|
|
262
|
-
```javascript
|
|
263
|
-
const vcard = `BEGIN:VCARD
|
|
264
|
-
VERSION:3.0
|
|
265
|
-
FN:Max Mustermann
|
|
266
|
-
TEL;type=CELL;type=VOICE;waid=491234567890:+49 123 4567890
|
|
267
|
-
END:VCARD`;
|
|
268
|
-
|
|
269
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
270
|
-
contacts: {
|
|
271
|
-
displayName: 'Max Mustermann',
|
|
272
|
-
contacts: [{ vcard }]
|
|
273
|
-
}
|
|
274
|
-
});
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
#### 12. **Standort**
|
|
278
|
-
|
|
279
|
-
```javascript
|
|
280
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
281
|
-
location: {
|
|
282
|
-
degreesLatitude: 52.520008,
|
|
283
|
-
degreesLongitude: 13.404954
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
#### 13. **Nachricht weiterleiten**
|
|
289
|
-
|
|
290
|
-
```javascript
|
|
291
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
292
|
-
forward: originalMessage // Originale Nachricht
|
|
293
|
-
});
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
#### 14. **Mit Quote (Antwort)**
|
|
297
|
-
|
|
298
|
-
```javascript
|
|
299
|
-
await onimai.sendMessage(
|
|
300
|
-
'session1',
|
|
301
|
-
'491234567890@s.whatsapp.net',
|
|
302
|
-
{
|
|
303
|
-
text: 'Das ist eine Antwort!'
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
quoted: originalMessage // Originale Nachricht
|
|
307
|
-
}
|
|
308
|
-
);
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
#### 15. **Mit Erwähnung**
|
|
312
|
-
|
|
313
|
-
```javascript
|
|
314
|
-
await onimai.sendMessage('session1', '491234567890@s.whatsapp.net', {
|
|
315
|
-
text: '@491111111111 Hallo!',
|
|
316
|
-
mentions: ['491111111111@s.whatsapp.net']
|
|
317
|
-
});
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## 🎧 Event Listener
|
|
323
|
-
|
|
324
|
-
### 📥 **Nachrichten empfangen**
|
|
325
|
-
|
|
326
|
-
```javascript
|
|
327
|
-
onimai.onMessageReceived(async (msg) => {
|
|
328
|
-
const {
|
|
329
|
-
sessionId, // Session-ID
|
|
330
|
-
key, // Message-Key (id, remoteJid, fromMe)
|
|
331
|
-
message, // Nachrichteninhalt
|
|
332
|
-
messageTimestamp // Zeitstempel
|
|
333
|
-
} = msg;
|
|
334
|
-
|
|
335
|
-
const from = key.remoteJid;
|
|
336
|
-
const text = message?.conversation || message?.extendedTextMessage?.text || '';
|
|
337
|
-
|
|
338
|
-
console.log(`📥 Neue Nachricht von ${from}: ${text}`);
|
|
339
|
-
|
|
340
|
-
// Medien speichern (wenn vorhanden)
|
|
341
|
-
if (message?.imageMessage) {
|
|
342
|
-
await msg.saveImage('./downloads/');
|
|
343
|
-
}
|
|
344
|
-
if (message?.videoMessage) {
|
|
345
|
-
await msg.saveVideo('./downloads/');
|
|
346
|
-
}
|
|
347
|
-
if (message?.documentMessage) {
|
|
348
|
-
await msg.saveDocument('./downloads/');
|
|
349
|
-
}
|
|
350
|
-
});
|
|
52
|
+
wa.startSession('main', { printQR: true }).catch(console.error)
|
|
351
53
|
```
|
|
352
54
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
```javascript
|
|
356
|
-
onimai.onMessageUpdate((sessionId, data) => {
|
|
357
|
-
const {
|
|
358
|
-
update, // Update-Objekt
|
|
359
|
-
messageStatus // Lesbarer Status
|
|
360
|
-
} = data;
|
|
361
|
-
|
|
362
|
-
console.log(`📊 Status Update: ${messageStatus}`);
|
|
363
|
-
// Mögliche Status: 'sent', 'delivered', 'read', 'failed'
|
|
364
|
-
});
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
### 🔌 **Verbindungs-Events**
|
|
368
|
-
|
|
369
|
-
```javascript
|
|
370
|
-
// Verbunden
|
|
371
|
-
onimai.onConnected((sessionId) => {
|
|
372
|
-
console.log(`✅ Session ${sessionId} ist jetzt verbunden!`);
|
|
373
|
-
});
|
|
374
|
-
|
|
375
|
-
// Verbindung wird hergestellt
|
|
376
|
-
onimai.onConnecting((sessionId) => {
|
|
377
|
-
console.log(`🔄 Session ${sessionId} verbindet...`);
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
// Getrennt
|
|
381
|
-
onimai.onDisconnected((sessionId) => {
|
|
382
|
-
console.log(`❌ Session ${sessionId} wurde getrennt`);
|
|
383
|
-
});
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
### 📱 **QR-Code Updates**
|
|
387
|
-
|
|
388
|
-
```javascript
|
|
389
|
-
onimai.onQRUpdated((info) => {
|
|
390
|
-
const { sessionId, qr } = info;
|
|
391
|
-
console.log(`📱 Neuer QR-Code für Session ${sessionId}:`);
|
|
392
|
-
console.log(qr);
|
|
393
|
-
|
|
394
|
-
// Du kannst den QR-Code auch in eine Datei speichern oder auf einer Webseite anzeigen
|
|
395
|
-
});
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### 🔑 **Pairing-Code**
|
|
399
|
-
|
|
400
|
-
```javascript
|
|
401
|
-
onimai.onPairingCode((sessionId, code) => {
|
|
402
|
-
console.log(`🔑 Pairing-Code für Session ${sessionId}: ${code}`);
|
|
403
|
-
});
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
---
|
|
407
|
-
|
|
408
|
-
## 🔧 Erweiterte Funktionen
|
|
409
|
-
|
|
410
|
-
### 💾 **Medien speichern**
|
|
411
|
-
|
|
412
|
-
```javascript
|
|
413
|
-
onimai.onMessageReceived(async (msg) => {
|
|
414
|
-
// Bild speichern
|
|
415
|
-
if (msg.message?.imageMessage) {
|
|
416
|
-
const path = await msg.saveImage('./downloads/');
|
|
417
|
-
console.log('✅ Bild gespeichert:', path);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// Video speichern
|
|
421
|
-
if (msg.message?.videoMessage) {
|
|
422
|
-
const path = await msg.saveVideo('./downloads/');
|
|
423
|
-
console.log('✅ Video gespeichert:', path);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
// Dokument speichern
|
|
427
|
-
if (msg.message?.documentMessage) {
|
|
428
|
-
const path = await msg.saveDocument('./downloads/');
|
|
429
|
-
console.log('✅ Dokument gespeichert:', path);
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
### 🔄 **Multi-Session Beispiel**
|
|
435
|
-
|
|
436
|
-
```javascript
|
|
437
|
-
// Mehrere Sessions gleichzeitig starten
|
|
438
|
-
const sessions = ['session1', 'session2', 'session3'];
|
|
439
|
-
|
|
440
|
-
for (const sessionId of sessions) {
|
|
441
|
-
await onimai.startSession(sessionId, { printQR: true });
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
// Nachricht an alle Sessions senden
|
|
445
|
-
const message = { text: 'Broadcast-Nachricht! 📢' };
|
|
446
|
-
const recipients = ['491234567890@s.whatsapp.net'];
|
|
447
|
-
|
|
448
|
-
for (const sessionId of sessions) {
|
|
449
|
-
for (const recipient of recipients) {
|
|
450
|
-
await onimai.sendMessage(sessionId, recipient, message);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### 🚀 **Smart Queue Integration**
|
|
456
|
-
|
|
457
|
-
```javascript
|
|
458
|
-
// Nutze die Smart Message Queue von Baileys für zuverlässiges Bulk-Messaging
|
|
459
|
-
const baileys = require('@neelegirl/baileys');
|
|
460
|
-
const session = onimai.getSession('session1');
|
|
461
|
-
|
|
462
|
-
if (session) {
|
|
463
|
-
const queue = baileys.createSmartMessageQueue(session, {
|
|
464
|
-
maxRetries: 5,
|
|
465
|
-
retryDelay: 2000,
|
|
466
|
-
maxConcurrent: 3
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
// Viele Nachrichten zur Queue hinzufügen
|
|
470
|
-
const recipients = ['491234567890@s.whatsapp.net', '499876543210@s.whatsapp.net'];
|
|
471
|
-
|
|
472
|
-
for (const jid of recipients) {
|
|
473
|
-
await queue.add({
|
|
474
|
-
jid,
|
|
475
|
-
message: { text: 'Wichtige Ankündigung! 📢' },
|
|
476
|
-
priority: 'high'
|
|
477
|
-
});
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
---
|
|
483
|
-
|
|
484
|
-
## 📚 Vollständige API-Referenz
|
|
485
|
-
|
|
486
|
-
### 🔌 **Session-Funktionen**
|
|
487
|
-
|
|
488
|
-
| Funktion | Beschreibung | Beispiel |
|
|
489
|
-
|----------|-------------|----------|
|
|
490
|
-
| `startSession(id, options)` | Startet eine Session mit QR-Code | `await onimai.startSession('session1')` |
|
|
491
|
-
| `startSessionWithPairingCode(id, options)` | Startet mit Pairing-Code | `await onimai.startSessionWithPairingCode('session2', { phoneNumber: '491234567890' })` |
|
|
492
|
-
| `getAllSession()` | Gibt alle aktiven Sessions zurück | `const sessions = onimai.getAllSession()` |
|
|
493
|
-
| `getSession(id)` | Gibt eine spezifische Session zurück | `const session = onimai.getSession('session1')` |
|
|
494
|
-
| `deleteSession(id)` | Löscht eine Session | `await onimai.deleteSession('session1')` |
|
|
495
|
-
| `loadSessionsFromStorage()` | Lädt alle Sessions aus Storage | `const loaded = await onimai.loadSessionsFromStorage()` |
|
|
496
|
-
|
|
497
|
-
### 💬 **Nachrichten-Funktionen**
|
|
498
|
-
|
|
499
|
-
| Funktion | Beschreibung |
|
|
500
|
-
|----------|-------------|
|
|
501
|
-
| `sendMessage(sessionId, jid, content, options)` | Sendet eine Nachricht |
|
|
502
|
-
|
|
503
|
-
**Content-Typen:**
|
|
504
|
-
- `{ text: string }` - Text
|
|
505
|
-
- `{ image: { url: string }, caption?: string }` - Bild
|
|
506
|
-
- `{ video: { url: string }, caption?: string, gifPlayback?: boolean }` - Video/GIF
|
|
507
|
-
- `{ audio: Stream, mimetype: string, ptt?: boolean }` - Audio
|
|
508
|
-
- `{ document: { url: string, filename?: string }, mimetype: string }` - Dokument
|
|
509
|
-
- `{ poll: { name: string, values: string[], selectableCount: number } }` - Umfrage
|
|
510
|
-
- `{ react: { text: string, key: MessageKey } }` - Reaktion
|
|
511
|
-
- `{ delete: MessageKey }` - Löschen
|
|
512
|
-
- `{ pin: { type: number, time: number, key: MessageKey } }` - Anpinnen
|
|
513
|
-
- `{ contacts: { displayName: string, contacts: Array } }` - Kontakt
|
|
514
|
-
- `{ location: { degreesLatitude: number, degreesLongitude: number } }` - Standort
|
|
515
|
-
- `{ forward: Message }` - Weiterleiten
|
|
516
|
-
|
|
517
|
-
### 🎧 **Event-Listener**
|
|
518
|
-
|
|
519
|
-
| Event | Beschreibung | Callback-Parameter |
|
|
520
|
-
|-------|-------------|-------------------|
|
|
521
|
-
| `onMessageReceived` | Neue Nachricht empfangen | `(msg: Message)` |
|
|
522
|
-
| `onMessageUpdate` | Nachrichten-Update | `(sessionId: string, data: UpdateData)` |
|
|
523
|
-
| `onConnected` | Session verbunden | `(sessionId: string)` |
|
|
524
|
-
| `onConnecting` | Session verbindet | `(sessionId: string)` |
|
|
525
|
-
| `onDisconnected` | Session getrennt | `(sessionId: string)` |
|
|
526
|
-
| `onQRUpdated` | QR-Code aktualisiert | `(info: { sessionId: string, qr: string })` |
|
|
527
|
-
| `onPairingCode` | Pairing-Code erhalten | `(sessionId: string, code: string)` |
|
|
528
|
-
|
|
529
|
-
---
|
|
530
|
-
|
|
531
|
-
## ⚠️ Wichtige Hinweise
|
|
532
|
-
|
|
533
|
-
### 🚨 **Disclaimer**
|
|
534
|
-
|
|
535
|
-
> ⚠️ **WICHTIG**: Diese Library funktioniert **ausschließlich** mit **@neelegirl/baileys**!
|
|
536
|
-
>
|
|
537
|
-
> - ✖️ **Kein Spam** oder Massennachrichten
|
|
538
|
-
> - ✖️ **Kein Missbrauch** für unethische Zwecke
|
|
539
|
-
> - ✖️ **Keine Stalkerware** oder automatisierte Überwachung
|
|
540
|
-
> - ✔️ **Verantwortungsvoller Gebrauch** wird erwartet
|
|
541
|
-
|
|
542
|
-
### 🔒 **Sicherheit**
|
|
543
|
-
|
|
544
|
-
- **Nie** deine Session-Daten öffentlich teilen
|
|
545
|
-
- **Immer** `.gitignore` für Credentials-Ordner verwenden
|
|
546
|
-
- **Regelmäßig** Backups erstellen
|
|
547
|
-
- **Sichere** Passwörter für deine Server verwenden
|
|
548
|
-
|
|
549
|
-
### 💡 **Best Practices**
|
|
550
|
-
|
|
551
|
-
1. **Error-Handling**: Immer try-catch für wichtige Operationen
|
|
552
|
-
2. **Rate-Limiting**: Nutze Smart Message Queue für Bulk-Messaging
|
|
553
|
-
3. **Session-Management**: Sessions ordentlich verwalten und löschen wenn nicht mehr benötigt
|
|
554
|
-
4. **Updates**: Regelmäßig auf Updates prüfen (automatisch aktiviert, nur einmal angezeigt)
|
|
555
|
-
|
|
556
|
-
---
|
|
557
|
-
|
|
558
|
-
## 🆕 Was ist neu in Version 1.5.1?
|
|
559
|
-
|
|
560
|
-
### ✨ **Neue Features & Glow-Up**
|
|
561
|
-
|
|
562
|
-
- 📖 **README Glow-Up** – Version 1.5.1, Badges & Changelog
|
|
563
|
-
- ✅ **Kompatibilität** mit **@neelegirl/baileys 2.0.4** & **Baileys API 1.7.2**
|
|
564
|
-
- 🔔 **Update-Check** – Liest Version von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
|
|
565
|
-
- 📦 **Abhängigkeit** auf `@neelegirl/baileys@^2.0.4` (empfohlen 2.0.4)
|
|
566
|
-
- 🚀 **Smart Queue Ready** · QR · Pairing · Auto-Reconnect
|
|
567
|
-
- 💎 **Multi-Device** & Session-Management optimiert
|
|
568
|
-
|
|
569
|
-
### 🔄 **Verbesserungen**
|
|
570
|
-
|
|
571
|
-
- Semver-Vergleich für „Update verfügbar“ nur bei wirklich neuerer Version
|
|
572
|
-
- Verbesserte Fehlerbehandlung & Stabilität
|
|
573
|
-
- Schnellerer Verbindungsaufbau · Bessere LID-Unterstützung
|
|
574
|
-
|
|
575
|
-
---
|
|
576
|
-
|
|
577
|
-
## 💬 Support & Community
|
|
578
|
-
|
|
579
|
-
<div align="center">
|
|
580
|
-
|
|
581
|
-
### 🌸 **Made with Love by @neelegirl** 🌸
|
|
582
|
-
|
|
583
|
-
[](https://github.com/neelegirl)
|
|
584
|
-
[](mailto:neelehoven@gmail.com)
|
|
585
|
-
[](https://wa-api.org)
|
|
586
|
-
|
|
587
|
-
**⭐ Wenn dir dieses Projekt gefällt, gib ihm ein Star auf GitHub! ⭐**
|
|
588
|
-
|
|
589
|
-
</div>
|
|
590
|
-
|
|
591
|
-
---
|
|
592
|
-
|
|
593
|
-
## 📝 Changelog
|
|
594
|
-
|
|
595
|
-
### Version 1.5.1 (Aktuell) 🎉
|
|
596
|
-
|
|
597
|
-
- 📖 **README Glow-Up** – Version 1.5.1, Baileys 2.0.5 Badges
|
|
598
|
-
- 🔔 Update-Check von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
|
|
599
|
-
- ✨ Kompatibilität mit **@neelegirl/baileys 2.0.4** & **Baileys API 1.7.2**
|
|
600
|
-
- 📦 Abhängigkeit `@neelegirl/baileys@^2.0.4`
|
|
601
|
-
|
|
602
|
-
### Version 1.3.2
|
|
603
|
-
|
|
604
|
-
- 📖 **README Glow-Up** – Version 1.3.2, Baileys 2.0.2 Badges
|
|
605
|
-
- 🔔 Update-Check von **npm-Registry** (registry.npmjs.org), nur 1× pro Prozess
|
|
606
|
-
- ✨ Kompatibilität mit **@neelegirl/baileys 2.0.2** & **Baileys API 1.7.2**
|
|
607
|
-
- 📦 Abhängigkeit `@neelegirl/baileys@^2.0.0`
|
|
608
|
-
- 🚀 Smart Queue Ready · Semver-Vergleich für Update-Hinweis
|
|
609
|
-
- 💎 Multi-Device & Session-Management optimiert
|
|
610
|
-
- 🚀 Smart Queue Ready · Semver-Vergleich für Update-Hinweis
|
|
611
|
-
- 💎 Multi-Device & Session-Management optimiert
|
|
612
|
-
|
|
613
|
-
### Version 1.3.1
|
|
614
|
-
|
|
615
|
-
- 📖 README Glow-Up · Changelog · Baileys 2.0.2
|
|
616
|
-
|
|
617
|
-
### Version 1.2.5
|
|
618
|
-
|
|
619
|
-
- 📖 README Glow-Up · Changelog
|
|
620
|
-
|
|
621
|
-
### Version 1.2.4
|
|
622
|
-
|
|
623
|
-
- 📖 README Glow-Up · Changelog
|
|
624
|
-
|
|
625
|
-
### Version 1.2.3
|
|
626
|
-
|
|
627
|
-
- 📖 README Glow-Up · Changelog
|
|
628
|
-
|
|
629
|
-
### Version 1.2.2
|
|
630
|
-
|
|
631
|
-
- 📖 README Glow-Up · Changelog ergänzt
|
|
632
|
-
|
|
633
|
-
### Version 1.2.1
|
|
634
|
-
|
|
635
|
-
- 📖 README Glow-Up · Update-Check von npm-Registry · Baileys 2.0.2 Badges
|
|
636
|
-
|
|
637
|
-
### Version 1.2.0
|
|
638
|
-
|
|
639
|
-
- 📖 README Glow-Up · Baileys 2.0.0 Badges
|
|
640
|
-
- ✨ Kompatibilität mit @neelegirl/baileys 2.0.0 & Baileys API 1.7.2
|
|
641
|
-
- 🚀 Smart Queue Ready · Auto-Update-Check (1x pro Prozess)
|
|
642
|
-
|
|
643
|
-
### Version 1.1.1
|
|
644
|
-
|
|
645
|
-
- 📖 README Glow-Up · Kompatibilität mit @neelegirl/baileys 1.7.1
|
|
646
|
-
- 🚀 Smart Queue Ready, Auto-Update-Check
|
|
647
|
-
|
|
648
|
-
### Version 1.1.0
|
|
649
|
-
|
|
650
|
-
- ✨ Kompatibilität mit @neelegirl/baileys 1.7.0
|
|
651
|
-
- 🚀 Smart Queue Ready, Auto-Update-Check
|
|
652
|
-
|
|
653
|
-
### Version 1.0.10
|
|
654
|
-
|
|
655
|
-
- ✨ Automatische Update-Prüfung hinzugefügt
|
|
656
|
-
- 🎨 Verbesserte QR-Code-Anzeige
|
|
657
|
-
- 🔄 Kompatibilität mit @neelegirl/baileys 1.6.6
|
|
658
|
-
- 🚀 Verbesserte Stabilität
|
|
659
|
-
- 🐛 Bugfixes für Session-Management
|
|
660
|
-
|
|
661
|
-
### Version 1.0.9
|
|
55
|
+
## API Surface
|
|
662
56
|
|
|
663
|
-
-
|
|
664
|
-
-
|
|
57
|
+
- Session lifecycle
|
|
58
|
+
- `startSession(sessionId, options)`
|
|
59
|
+
- `startSessionWithPairingCode(sessionId, { phoneNumber }, pairingCode?)`
|
|
60
|
+
- `deleteSession(sessionId)`
|
|
61
|
+
- `getSession(sessionId)`
|
|
62
|
+
- `getAllSession()`
|
|
63
|
+
- `loadSessionsFromStorage()`
|
|
665
64
|
|
|
666
|
-
|
|
65
|
+
- Messaging
|
|
66
|
+
- `sendMessage(sessionId, jidOrPhone, content, options?)`
|
|
67
|
+
- `sendStatusMentions(sessionId, content, options?)`
|
|
68
|
+
- `relayMessage(sessionId, jidOrPhone, content, options?)`
|
|
667
69
|
|
|
668
|
-
|
|
70
|
+
- Events
|
|
71
|
+
- `onMessageReceived(listener)`
|
|
72
|
+
- `onMessageUpdate(listener)`
|
|
73
|
+
- `onQRUpdated(listener)`
|
|
74
|
+
- `onConnected(listener)`
|
|
75
|
+
- `onConnecting(listener)`
|
|
76
|
+
- `onDisconnected(listener)`
|
|
77
|
+
- `onPairingCode(listener)`
|
|
669
78
|
|
|
670
|
-
|
|
79
|
+
## Operational Notes
|
|
671
80
|
|
|
672
|
-
|
|
81
|
+
- Credentials are stored under `wa_credentials/<session>_credentials`.
|
|
82
|
+
- The package performs a lightweight npm update check once per process start.
|
|
83
|
+
- No dedicated Word2Web module is shipped in this package.
|
|
673
84
|
|
|
674
|
-
|
|
85
|
+
## Legal
|
|
675
86
|
|
|
676
|
-
|
|
87
|
+
This project is not affiliated with WhatsApp.
|
|
88
|
+
Use responsibly and comply with applicable laws and platform terms.
|