@deathnaitsa/wa-api 2.0.3 → 2.0.5
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/README.md +630 -62
- package/dist/WhatsAppClient.cjs +1 -0
- package/dist/WhatsAppClient.js +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.js +1 -1
- package/package.json +12 -3
- package/publish.bat +105 -0
- package/publish.sh +103 -0
- package/setup-git-token.sh +19 -0
- package/socket.js +550 -1
package/README.md
CHANGED
|
@@ -2,33 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
Eine minimalistische, stabile WhatsApp Multi-Device API basierend auf Baileys mit erweiterten Session-Management und Statistik-Features.
|
|
4
4
|
|
|
5
|
+
## 📑 Inhaltsverzeichnis
|
|
6
|
+
|
|
7
|
+
- [Status](#-status)
|
|
8
|
+
- [Features](#-features)
|
|
9
|
+
- [Installation](#-installation)
|
|
10
|
+
- [Quick Start](#-quick-start)
|
|
11
|
+
- [ES Modules](#es-modules-empfohlen)
|
|
12
|
+
- [CommonJS](#commonjs)
|
|
13
|
+
- [API Dokumentation](#-api-dokumentation)
|
|
14
|
+
- [Session Management](#-session-management-implementiert)
|
|
15
|
+
- [Nachrichten](#-nachrichten-implementiert)
|
|
16
|
+
- [Media & Stickers](#-media--stickers-implementiert)
|
|
17
|
+
- [Group Management](#-group-management-implementiert)
|
|
18
|
+
- [Advanced Messaging](#-advanced-messaging-implementiert)
|
|
19
|
+
- [Contact Management](#-contact-management-implementiert)
|
|
20
|
+
- [Presence & Typing](#-presence--typing-implementiert)
|
|
21
|
+
- [Poll Messages](#-poll-messages-implementiert)
|
|
22
|
+
- [Status/Stories](#-statusstories-implementiert)
|
|
23
|
+
- [Broadcast Lists](#-broadcast-lists-implementiert)
|
|
24
|
+
- [Message Queue & Rate Limiting](#-message-queue--rate-limiting-implementiert)
|
|
25
|
+
- [Webhook Support](#-webhook-support-implementiert)
|
|
26
|
+
- [Auto-Reconnect](#-auto-reconnect-implementiert)
|
|
27
|
+
- [Events](#-events-implementiert)
|
|
28
|
+
- [Statistiken](#-statistiken-implementiert)
|
|
29
|
+
- [Bot-Beispiel](#-bot-beispiel)
|
|
30
|
+
- [Statistik-System](#-statistik-system)
|
|
31
|
+
- [Architektur](#-architektur)
|
|
32
|
+
- [Technologie](#-technologie)
|
|
33
|
+
- [Performance](#-performance)
|
|
34
|
+
- [Bekannte Einschränkungen](#-bekannte-einschränkungen--design-entscheidungen)
|
|
35
|
+
- [Sicherheit](#-sicherheit)
|
|
36
|
+
- [Lizenz](#-lizenz)
|
|
37
|
+
|
|
5
38
|
## ⚠️ Status
|
|
6
39
|
|
|
7
|
-
|
|
40
|
+
**🎉 Feature-Complete v2.0** - Die API ist stabil, vollständig und production-ready!
|
|
8
41
|
|
|
9
42
|
### ✅ Implementiert
|
|
10
|
-
- Multi-Session Support
|
|
11
|
-
- Session Control (Start, Stop, Restart, Pause, Resume)
|
|
12
|
-
- Event System (Messages, Connected, Disconnected)
|
|
13
|
-
- Statistik-System mit JSON-Persistenz
|
|
14
|
-
- Message Parsing mit Mentions & Quoted Messages
|
|
15
|
-
- Uptime & Performance Tracking
|
|
16
|
-
- **Media Support** (Bilder, Videos, GIF-Playback)
|
|
17
|
-
- **Sticker Support** (Bilder, GIFs, Videos → Sticker mit wa-sticker-formatter)
|
|
18
|
-
- Media Download
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- Status/
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- Auto-Reconnect
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
43
|
+
- ✅ Multi-Session Support
|
|
44
|
+
- ✅ Session Control (Start, Stop, Restart, Pause, Resume)
|
|
45
|
+
- ✅ Event System (Messages, Connected, Disconnected)
|
|
46
|
+
- ✅ Statistik-System mit JSON-Persistenz
|
|
47
|
+
- ✅ Message Parsing mit Mentions & Quoted Messages
|
|
48
|
+
- ✅ Uptime & Performance Tracking
|
|
49
|
+
- ✅ **Media Support** (Bilder, Videos, GIF-Playback)
|
|
50
|
+
- ✅ **Sticker Support** (Bilder, GIFs, Videos → Sticker mit wa-sticker-formatter)
|
|
51
|
+
- ✅ Media Download
|
|
52
|
+
- ✅ **Group Management** (Erstellen, Bearbeiten, Teilnehmer verwalten)
|
|
53
|
+
- ✅ **Advanced Messaging** (Audio, Document, Location, Contact, Reactions)
|
|
54
|
+
- ✅ **Contact Management** (Kontakte abrufen, Profilbilder, Status)
|
|
55
|
+
- ✅ **Presence & Typing** (Tipp-Indikatoren, Aufnahme-Status)
|
|
56
|
+
- ✅ **Poll Messages** (Umfragen erstellen)
|
|
57
|
+
- ✅ **Status/Stories** (Status hochladen)
|
|
58
|
+
- ✅ **Broadcast Lists** (Massenversand)
|
|
59
|
+
- ✅ **Message Queue & Rate Limiting** (Queue-System mit Prioritäten)
|
|
60
|
+
- ✅ **Webhook Support** (Externe Integrationen)
|
|
61
|
+
- ✅ **Auto-Reconnect** (Exponential Backoff, Max Retries)
|
|
62
|
+
|
|
63
|
+
### 📋 Geplante Erweiterungen
|
|
64
|
+
- Message Editing (wenn Baileys unterstützt)
|
|
65
|
+
- Business API Features
|
|
66
|
+
- Multi-Device Sync Improvements
|
|
32
67
|
|
|
33
68
|
## ✨ Features
|
|
34
69
|
|
|
@@ -47,8 +82,13 @@ Eine minimalistische, stabile WhatsApp Multi-Device API basierend auf Baileys mi
|
|
|
47
82
|
npm install
|
|
48
83
|
```
|
|
49
84
|
|
|
85
|
+
**Unterstützt beide Formate:**
|
|
86
|
+
- ✅ **ES Modules** (import)
|
|
87
|
+
- ✅ **CommonJS** (require)
|
|
88
|
+
|
|
50
89
|
## 🚀 Quick Start
|
|
51
90
|
|
|
91
|
+
### ES Modules (empfohlen)
|
|
52
92
|
```javascript
|
|
53
93
|
import { startSession, onMessage, sendText } from '@deathnaitsa/wa-api';
|
|
54
94
|
|
|
@@ -63,6 +103,23 @@ onMessage(async (msg) => {
|
|
|
63
103
|
});
|
|
64
104
|
```
|
|
65
105
|
|
|
106
|
+
### CommonJS
|
|
107
|
+
```javascript
|
|
108
|
+
const { startSession, onMessage, sendText } = require('@deathnaitsa/wa-api');
|
|
109
|
+
|
|
110
|
+
(async () => {
|
|
111
|
+
await startSession('bot');
|
|
112
|
+
|
|
113
|
+
onMessage(async (msg) => {
|
|
114
|
+
console.log(`📨 ${msg.from}: ${msg.message}`);
|
|
115
|
+
|
|
116
|
+
if (msg.message === '!ping') {
|
|
117
|
+
await sendText(msg.sessionId, msg.from, 'Pong! 🏓');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
})();
|
|
121
|
+
```
|
|
122
|
+
|
|
66
123
|
## 📖 API Dokumentation
|
|
67
124
|
|
|
68
125
|
### Verfügbare Funktionen
|
|
@@ -101,6 +158,85 @@ onMessage((msg) => {
|
|
|
101
158
|
});
|
|
102
159
|
```
|
|
103
160
|
|
|
161
|
+
**Message Object Struktur:**
|
|
162
|
+
|
|
163
|
+
Das `msg` Object in `onMessage()` enthält folgende Felder:
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
{
|
|
167
|
+
// Basis-Informationen
|
|
168
|
+
sessionId: 'bot1', // Session ID
|
|
169
|
+
id: '3EB0XXXXX', // Nachrichten-ID
|
|
170
|
+
from: '4915123456789@s.whatsapp.net', // Chat JID
|
|
171
|
+
fromMe: false, // Vom Bot gesendet?
|
|
172
|
+
name: 'Max Mustermann', // Absender-Name
|
|
173
|
+
message: 'Hallo, wie geht es?', // Nachrichtentext
|
|
174
|
+
timestamp: 1703001234, // Unix Timestamp
|
|
175
|
+
|
|
176
|
+
// Gruppen-Informationen
|
|
177
|
+
isGroup: false, // Ist Gruppenchat?
|
|
178
|
+
participant: '4915123456789@s.whatsapp.net', // Absender in Gruppe
|
|
179
|
+
|
|
180
|
+
// Erweiterte Features
|
|
181
|
+
type: 'conversation', // Nachrichtentyp
|
|
182
|
+
mentions: ['4915987654321@s.whatsapp.net'], // Erwähnte Kontakte (@mentions)
|
|
183
|
+
quoted: { /* quotedMessage Object */ }, // Zitierte Nachricht
|
|
184
|
+
|
|
185
|
+
// Raw Baileys Message (für erweiterte Nutzung)
|
|
186
|
+
raw: { /* vollständiges Baileys message object */ }
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Nachrichtentypen (`msg.type`):**
|
|
191
|
+
- `conversation` - Einfache Textnachricht
|
|
192
|
+
- `extendedTextMessage` - Text mit Links/Mentions
|
|
193
|
+
- `imageMessage` - Bild
|
|
194
|
+
- `videoMessage` - Video
|
|
195
|
+
- `audioMessage` - Audio/Voice
|
|
196
|
+
- `documentMessage` - Dokument
|
|
197
|
+
- `stickerMessage` - Sticker
|
|
198
|
+
- `locationMessage` - Standort
|
|
199
|
+
- `contactMessage` - Kontakt
|
|
200
|
+
- `pollCreationMessage` - Umfrage
|
|
201
|
+
|
|
202
|
+
**Beispiele:**
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
onMessage(async (msg) => {
|
|
206
|
+
// Text-Nachricht
|
|
207
|
+
if (msg.type === 'conversation' || msg.type === 'extendedTextMessage') {
|
|
208
|
+
console.log(`Text: ${msg.message}`);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Gruppennachricht
|
|
212
|
+
if (msg.isGroup) {
|
|
213
|
+
console.log(`Gruppe: ${msg.from}`);
|
|
214
|
+
console.log(`Von: ${msg.participant}`);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Erwähnungen (@mentions)
|
|
218
|
+
if (msg.mentions && msg.mentions.length > 0) {
|
|
219
|
+
console.log(`Erwähnt: ${msg.mentions.join(', ')}`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Antwort auf Nachricht (quoted)
|
|
223
|
+
if (msg.quoted) {
|
|
224
|
+
console.log(`Antwortet auf: ${msg.quoted}`);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Media herunterladen
|
|
228
|
+
if (msg.type === 'imageMessage' || msg.type === 'videoMessage') {
|
|
229
|
+
const buffer = await downloadMedia(msg);
|
|
230
|
+
console.log(`Media heruntergeladen: ${buffer.length} bytes`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Auf Nachricht antworten
|
|
234
|
+
if (msg.message === '!ping') {
|
|
235
|
+
await client.replyMessage(msg.sessionId, msg, 'Pong! 🏓');
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
104
240
|
#### ✅ Media & Stickers (Implementiert)
|
|
105
241
|
```javascript
|
|
106
242
|
import {
|
|
@@ -239,34 +375,457 @@ console.log({
|
|
|
239
375
|
countReceivedMessage('bot1');
|
|
240
376
|
```
|
|
241
377
|
|
|
378
|
+
### ✅ Poll Messages (Implementiert)
|
|
379
|
+
```javascript
|
|
380
|
+
import { sendPoll } from '@deathnaitsa/wa-api';
|
|
381
|
+
|
|
382
|
+
// Umfrage mit Einzelauswahl
|
|
383
|
+
await sendPoll('bot1', 'nummer@s.whatsapp.net',
|
|
384
|
+
'Was ist deine Lieblingsfarbe?',
|
|
385
|
+
['Rot', 'Blau', 'Grün', 'Gelb'],
|
|
386
|
+
1 // Nur 1 Option wählbar
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
// Umfrage mit Mehrfachauswahl
|
|
390
|
+
await sendPoll('bot1', 'groupId@g.us',
|
|
391
|
+
'Welche Programmiersprachen nutzt du?',
|
|
392
|
+
['JavaScript', 'Python', 'Java', 'C++', 'Go', 'Rust'],
|
|
393
|
+
3 // Bis zu 3 Optionen wählbar
|
|
394
|
+
);
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### ✅ Status/Stories (Implementiert)
|
|
398
|
+
```javascript
|
|
399
|
+
import { uploadStatus, getStatuses } from '@deathnaitsa/wa-api';
|
|
400
|
+
|
|
401
|
+
// Text-Status hochladen
|
|
402
|
+
await uploadStatus('bot1', { text: 'Hallo Welt! 👋' });
|
|
403
|
+
|
|
404
|
+
// Bild-Status hochladen
|
|
405
|
+
await uploadStatus('bot1', {
|
|
406
|
+
image: './status-image.jpg',
|
|
407
|
+
caption: 'Schöner Tag! ☀️'
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// Video-Status hochladen
|
|
411
|
+
await uploadStatus('bot1', {
|
|
412
|
+
video: './status-video.mp4',
|
|
413
|
+
caption: 'Check this out! 🎥'
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
// Status-Liste abrufen (wenn verfügbar)
|
|
417
|
+
const statuses = await getStatuses('bot1');
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### ✅ Broadcast Lists (Implementiert)
|
|
421
|
+
```javascript
|
|
422
|
+
import { sendBroadcast } from '@deathnaitsa/wa-api';
|
|
423
|
+
|
|
424
|
+
// Broadcast an mehrere Empfänger
|
|
425
|
+
const recipients = [
|
|
426
|
+
'4915123456789@s.whatsapp.net',
|
|
427
|
+
'4915987654321@s.whatsapp.net',
|
|
428
|
+
'4916612345678@s.whatsapp.net'
|
|
429
|
+
];
|
|
430
|
+
|
|
431
|
+
const results = await sendBroadcast('bot1', recipients, {
|
|
432
|
+
text: '🎉 Wichtige Ankündigung für alle!'
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
// Ergebnisse prüfen
|
|
436
|
+
results.forEach(result => {
|
|
437
|
+
console.log(`${result.recipient}: ${result.success ? '✅' : '❌'}`);
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
// Broadcast mit Medien
|
|
441
|
+
await sendBroadcast('bot1', recipients, {
|
|
442
|
+
image: './announcement.jpg',
|
|
443
|
+
caption: 'Neues Update verfügbar!'
|
|
444
|
+
});
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### ✅ Message Queue & Rate Limiting (Implementiert)
|
|
448
|
+
```javascript
|
|
449
|
+
import {
|
|
450
|
+
queueMessage,
|
|
451
|
+
setRateLimit,
|
|
452
|
+
getQueueStatus,
|
|
453
|
+
clearQueue,
|
|
454
|
+
pauseQueue,
|
|
455
|
+
resumeQueue
|
|
456
|
+
} from '@deathnaitsa/wa-api';
|
|
457
|
+
|
|
458
|
+
// Rate Limit setzen (30 Nachrichten pro Minute)
|
|
459
|
+
setRateLimit('bot1', 30);
|
|
460
|
+
|
|
461
|
+
// Nachricht mit Priorität zur Queue hinzufügen
|
|
462
|
+
queueMessage('bot1', 'nummer@s.whatsapp.net',
|
|
463
|
+
{ text: 'Normale Nachricht' },
|
|
464
|
+
0 // Priorität: 0 = normal
|
|
465
|
+
);
|
|
466
|
+
|
|
467
|
+
queueMessage('bot1', 'nummer@s.whatsapp.net',
|
|
468
|
+
{ text: 'Wichtige Nachricht!' },
|
|
469
|
+
10 // Priorität: 10 = hoch (wird zuerst gesendet)
|
|
470
|
+
);
|
|
471
|
+
|
|
472
|
+
// Queue Status abrufen
|
|
473
|
+
const status = getQueueStatus('bot1');
|
|
474
|
+
console.log(`Queue: ${status.queueLength} Nachrichten`);
|
|
475
|
+
console.log(`Rate Limit: ${status.rateLimit.count}/${status.rateLimit.limit}`);
|
|
476
|
+
|
|
477
|
+
// Queue verwalten
|
|
478
|
+
clearQueue('bot1'); // Queue leeren
|
|
479
|
+
pauseQueue('bot1'); // Queue pausieren
|
|
480
|
+
resumeQueue('bot1'); // Queue fortsetzen
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**Vorteile:**
|
|
484
|
+
- 🚫 Verhindert Spam-Erkennung
|
|
485
|
+
- 📊 Automatisches Rate Limiting
|
|
486
|
+
- 🎯 Prioritäts-basierte Zustellung
|
|
487
|
+
- ⏸️ Pausieren/Fortsetzen möglich
|
|
488
|
+
|
|
489
|
+
### ✅ Webhook Support (Implementiert)
|
|
490
|
+
```javascript
|
|
491
|
+
import {
|
|
492
|
+
registerWebhook,
|
|
493
|
+
unregisterWebhook,
|
|
494
|
+
getWebhooks
|
|
495
|
+
} from '@deathnaitsa/wa-api';
|
|
496
|
+
|
|
497
|
+
// Webhook registrieren
|
|
498
|
+
const webhookId = registerWebhook(
|
|
499
|
+
'https://your-server.com/webhook',
|
|
500
|
+
['message', 'connected', 'disconnected'], // Events
|
|
501
|
+
'your-secret-key' // Optional: für Signature Verification
|
|
502
|
+
);
|
|
503
|
+
|
|
504
|
+
console.log(`Webhook registriert: ${webhookId}`);
|
|
505
|
+
|
|
506
|
+
// Webhook entfernen
|
|
507
|
+
unregisterWebhook(webhookId);
|
|
508
|
+
|
|
509
|
+
// Alle Webhooks anzeigen
|
|
510
|
+
const webhooks = getWebhooks();
|
|
511
|
+
console.log(webhooks);
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
**Webhook Payload:**
|
|
515
|
+
```json
|
|
516
|
+
{
|
|
517
|
+
"event": "message",
|
|
518
|
+
"data": {
|
|
519
|
+
"sessionId": "bot1",
|
|
520
|
+
"from": "4915123456789@s.whatsapp.net",
|
|
521
|
+
"message": "Hallo!",
|
|
522
|
+
"timestamp": 1703001234567
|
|
523
|
+
},
|
|
524
|
+
"timestamp": 1703001234567
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
**Signature Verification:**
|
|
529
|
+
```javascript
|
|
530
|
+
const crypto = require('crypto');
|
|
531
|
+
|
|
532
|
+
function verifyWebhook(payload, signature, secret) {
|
|
533
|
+
const hash = crypto.createHmac('sha256', secret)
|
|
534
|
+
.update(payload)
|
|
535
|
+
.digest('hex');
|
|
536
|
+
return hash === signature;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// Im Webhook-Handler:
|
|
540
|
+
const signature = req.headers['x-webhook-signature'];
|
|
541
|
+
const isValid = verifyWebhook(req.body, signature, 'your-secret-key');
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### ✅ Auto-Reconnect (Implementiert)
|
|
545
|
+
```javascript
|
|
546
|
+
import { setAutoReconnect, getConnectionHealth } from '@deathnaitsa/wa-api';
|
|
547
|
+
|
|
548
|
+
// Auto-Reconnect aktivieren
|
|
549
|
+
setAutoReconnect(
|
|
550
|
+
'bot1',
|
|
551
|
+
true, // enabled
|
|
552
|
+
5, // maxRetries
|
|
553
|
+
2 // backoff multiplier
|
|
554
|
+
);
|
|
555
|
+
|
|
556
|
+
// Verhalten:
|
|
557
|
+
// - 1. Versuch: nach 5 Sekunden
|
|
558
|
+
// - 2. Versuch: nach 10 Sekunden (5 * 2^1)
|
|
559
|
+
// - 3. Versuch: nach 20 Sekunden (5 * 2^2)
|
|
560
|
+
// - 4. Versuch: nach 40 Sekunden (5 * 2^3)
|
|
561
|
+
// - 5. Versuch: nach 80 Sekunden (5 * 2^4)
|
|
562
|
+
|
|
563
|
+
// Connection Health prüfen
|
|
564
|
+
const health = getConnectionHealth('bot1');
|
|
565
|
+
console.log({
|
|
566
|
+
connected: health.connected,
|
|
567
|
+
status: health.status,
|
|
568
|
+
uptime: health.uptime,
|
|
569
|
+
autoReconnect: health.autoReconnect,
|
|
570
|
+
retryCount: health.retryCount,
|
|
571
|
+
maxRetries: health.maxRetries
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
// Events abhören
|
|
575
|
+
client.on('reconnect:failed', ({ sessionId }) => {
|
|
576
|
+
console.log(`${sessionId} konnte nicht wiederverbunden werden`);
|
|
577
|
+
});
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
**Vorteile:**
|
|
581
|
+
- 📈 Exponential Backoff verhindert Server-Überlastung
|
|
582
|
+
- 🔢 Konfigurierbare Max Retries
|
|
583
|
+
- 🎯 Automatische Wiederverbindung bei Netzwerkfehlern
|
|
584
|
+
- 📊 Connection Health Monitoring
|
|
585
|
+
|
|
242
586
|
#### ❌ Noch nicht implementiert
|
|
243
587
|
```javascript
|
|
244
|
-
//
|
|
245
|
-
// await client.
|
|
246
|
-
|
|
247
|
-
//
|
|
248
|
-
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
588
|
+
// Message Editing (wartet auf Baileys Support)
|
|
589
|
+
// await client.editMessage(sessionId, messageKey, newText);
|
|
590
|
+
|
|
591
|
+
// Business API Features
|
|
592
|
+
// await client.getBusinessCategories();
|
|
593
|
+
// await client.updateBusinessHours();
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
## 🚀 Neue Features in v2.0
|
|
597
|
+
|
|
598
|
+
### ✅ Group Management (Implementiert)
|
|
599
|
+
```javascript
|
|
600
|
+
import {
|
|
601
|
+
createGroup,
|
|
602
|
+
getGroupMetadata,
|
|
603
|
+
updateGroupSubject,
|
|
604
|
+
updateGroupDescription,
|
|
605
|
+
addParticipants,
|
|
606
|
+
removeParticipants,
|
|
607
|
+
promoteParticipants,
|
|
608
|
+
demoteParticipants,
|
|
609
|
+
leaveGroup,
|
|
610
|
+
getGroupInviteCode,
|
|
611
|
+
acceptGroupInvite,
|
|
612
|
+
updateGroupSettings
|
|
613
|
+
} from '@deathnaitsa/wa-api';
|
|
614
|
+
|
|
615
|
+
// Gruppe erstellen
|
|
616
|
+
const group = await createGroup('bot1', 'Meine Gruppe', [
|
|
617
|
+
'4915123456789@s.whatsapp.net',
|
|
618
|
+
'4915987654321@s.whatsapp.net'
|
|
619
|
+
]);
|
|
620
|
+
|
|
621
|
+
// Gruppen-Metadaten abrufen
|
|
622
|
+
const metadata = await getGroupMetadata('bot1', 'groupId@g.us');
|
|
623
|
+
console.log(metadata.subject, metadata.participants.length);
|
|
624
|
+
|
|
625
|
+
// Gruppennamen ändern
|
|
626
|
+
await updateGroupSubject('bot1', 'groupId@g.us', 'Neuer Name');
|
|
627
|
+
|
|
628
|
+
// Beschreibung ändern
|
|
629
|
+
await updateGroupDescription('bot1', 'groupId@g.us', 'Neue Beschreibung');
|
|
630
|
+
|
|
631
|
+
// Teilnehmer hinzufügen
|
|
632
|
+
await addParticipants('bot1', 'groupId@g.us', ['4915123456789@s.whatsapp.net']);
|
|
633
|
+
|
|
634
|
+
// Teilnehmer entfernen
|
|
635
|
+
await removeParticipants('bot1', 'groupId@g.us', ['4915123456789@s.whatsapp.net']);
|
|
636
|
+
|
|
637
|
+
// Zum Admin machen
|
|
638
|
+
await promoteParticipants('bot1', 'groupId@g.us', ['4915123456789@s.whatsapp.net']);
|
|
639
|
+
|
|
640
|
+
// Admin-Rechte entfernen
|
|
641
|
+
await demoteParticipants('bot1', 'groupId@g.us', ['4915123456789@s.whatsapp.net']);
|
|
642
|
+
|
|
643
|
+
// Gruppe verlassen
|
|
644
|
+
await leaveGroup('bot1', 'groupId@g.us');
|
|
645
|
+
|
|
646
|
+
// Einladungslink erhalten
|
|
647
|
+
const code = await getGroupInviteCode('bot1', 'groupId@g.us');
|
|
648
|
+
console.log(`https://chat.whatsapp.com/${code}`);
|
|
649
|
+
|
|
650
|
+
// Gruppe über Link beitreten
|
|
651
|
+
await acceptGroupInvite('bot1', 'inviteCode');
|
|
652
|
+
|
|
653
|
+
// Gruppen-Einstellungen (nur Admins können schreiben)
|
|
654
|
+
await updateGroupSettings('bot1', 'groupId@g.us', 'announcement');
|
|
655
|
+
// Alle können schreiben
|
|
656
|
+
await updateGroupSettings('bot1', 'groupId@g.us', 'not_announcement');
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
### ✅ Advanced Messaging (Implementiert)
|
|
660
|
+
```javascript
|
|
661
|
+
import {
|
|
662
|
+
sendAudio,
|
|
663
|
+
sendDocument,
|
|
664
|
+
sendLocation,
|
|
665
|
+
sendContact,
|
|
666
|
+
sendReaction,
|
|
667
|
+
deleteMessage
|
|
668
|
+
} from '@deathnaitsa/wa-api';
|
|
669
|
+
|
|
670
|
+
// Audio senden (Voice Message)
|
|
671
|
+
await sendAudio('bot1', 'nummer@s.whatsapp.net', './audio.mp3', true);
|
|
672
|
+
|
|
673
|
+
// Audio senden (normaler Audio-File)
|
|
674
|
+
await sendAudio('bot1', 'nummer@s.whatsapp.net', './song.mp3', false);
|
|
675
|
+
|
|
676
|
+
// Dokument senden
|
|
677
|
+
await sendDocument('bot1', 'nummer@s.whatsapp.net',
|
|
678
|
+
'./file.pdf',
|
|
679
|
+
'Dokument.pdf',
|
|
680
|
+
'application/pdf',
|
|
681
|
+
'Hier ist das Dokument'
|
|
682
|
+
);
|
|
683
|
+
|
|
684
|
+
// Standort senden
|
|
685
|
+
await sendLocation('bot1', 'nummer@s.whatsapp.net', 52.520008, 13.404954, 'Berlin');
|
|
686
|
+
|
|
687
|
+
// Kontakt senden
|
|
688
|
+
await sendContact('bot1', 'nummer@s.whatsapp.net', [
|
|
689
|
+
{
|
|
690
|
+
displayName: 'Max Mustermann',
|
|
691
|
+
vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:Max Mustermann\nTEL:+4915123456789\nEND:VCARD'
|
|
692
|
+
}
|
|
693
|
+
]);
|
|
694
|
+
|
|
695
|
+
// Reaktion senden
|
|
696
|
+
await sendReaction('bot1', 'chatId@s.whatsapp.net', 'messageId', '👍');
|
|
697
|
+
|
|
698
|
+
// Reaktion entfernen
|
|
699
|
+
await sendReaction('bot1', 'chatId@s.whatsapp.net', 'messageId', '');
|
|
700
|
+
|
|
701
|
+
// Nachricht löschen
|
|
702
|
+
await deleteMessage('bot1', messageKey);
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
### ✅ Contact Management (Implementiert)
|
|
706
|
+
```javascript
|
|
707
|
+
import {
|
|
708
|
+
getProfilePicture,
|
|
709
|
+
getContact,
|
|
710
|
+
checkNumbersOnWhatsApp,
|
|
711
|
+
blockContact,
|
|
712
|
+
unblockContact,
|
|
713
|
+
getBusinessProfile,
|
|
714
|
+
getStatus
|
|
715
|
+
} from '@deathnaitsa/wa-api';
|
|
716
|
+
|
|
717
|
+
// Profilbild URL abrufen
|
|
718
|
+
const url = await getProfilePicture('bot1', '4915123456789@s.whatsapp.net');
|
|
719
|
+
|
|
720
|
+
// Kontaktinfo
|
|
721
|
+
const contact = await getContact('bot1', '4915123456789@s.whatsapp.net');
|
|
722
|
+
|
|
723
|
+
// Nummern auf WhatsApp prüfen
|
|
724
|
+
const results = await checkNumbersOnWhatsApp('bot1', ['4915123456789', '4915987654321']);
|
|
725
|
+
|
|
726
|
+
// Kontakt blockieren
|
|
727
|
+
await blockContact('bot1', '4915123456789@s.whatsapp.net');
|
|
728
|
+
|
|
729
|
+
// Kontakt entblocken
|
|
730
|
+
await unblockContact('bot1', '4915123456789@s.whatsapp.net');
|
|
731
|
+
|
|
732
|
+
// Business-Profil abrufen
|
|
733
|
+
const business = await getBusinessProfile('bot1', 'businessNumber@s.whatsapp.net');
|
|
734
|
+
|
|
735
|
+
// Status/About abrufen
|
|
736
|
+
const status = await getStatus('bot1', '4915123456789@s.whatsapp.net');
|
|
737
|
+
console.log(status?.status);
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
### ✅ Presence & Typing (Implementiert)
|
|
741
|
+
```javascript
|
|
742
|
+
import {
|
|
743
|
+
sendTyping,
|
|
744
|
+
sendRecording,
|
|
745
|
+
updateProfileStatus,
|
|
746
|
+
updateProfileName,
|
|
747
|
+
setProfilePicture,
|
|
748
|
+
markChatRead
|
|
749
|
+
} from '@deathnaitsa/wa-api';
|
|
750
|
+
|
|
751
|
+
// Tipp-Indikator anzeigen
|
|
752
|
+
await sendTyping('bot1', 'chatId@s.whatsapp.net', true);
|
|
753
|
+
// Stoppen
|
|
754
|
+
await sendTyping('bot1', 'chatId@s.whatsapp.net', false);
|
|
755
|
+
|
|
756
|
+
// Aufnahme-Indikator anzeigen
|
|
757
|
+
await sendRecording('bot1', 'chatId@s.whatsapp.net', true);
|
|
758
|
+
// Stoppen
|
|
759
|
+
await sendRecording('bot1', 'chatId@s.whatsapp.net', false);
|
|
760
|
+
|
|
761
|
+
// Eigenen Status ändern
|
|
762
|
+
await updateProfileStatus('bot1', 'Verfügbar 🟢');
|
|
763
|
+
|
|
764
|
+
// Eigenen Namen ändern
|
|
765
|
+
await updateProfileName('bot1', 'Neuer Name');
|
|
766
|
+
|
|
767
|
+
// Profilbild setzen
|
|
768
|
+
await setProfilePicture('bot1', './profile.jpg');
|
|
769
|
+
|
|
770
|
+
// Chat als gelesen markieren
|
|
771
|
+
await markChatRead('bot1', 'chatId@s.whatsapp.net', [messageKey1, messageKey2]);
|
|
260
772
|
```
|
|
261
773
|
|
|
262
774
|
## 🎮 Bot-Beispiel
|
|
263
775
|
|
|
264
|
-
Siehe `socket.js` für ein vollständiges Bot-Beispiel mit
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
-
|
|
268
|
-
-
|
|
269
|
-
-
|
|
776
|
+
Siehe `socket.js` für ein vollständiges Bot-Beispiel mit **50+ Befehlen**:
|
|
777
|
+
|
|
778
|
+
### Basis-Befehle
|
|
779
|
+
- **!ping** / **!ping all** - Bot & alle Sessions testen
|
|
780
|
+
- **!info** - Nachrichteninfo anzeigen
|
|
781
|
+
- **!liste** - Alle Sessions auflisten
|
|
782
|
+
- **!stats** - Detaillierte Session-Statistiken
|
|
783
|
+
- **!gesamtstats** - Gesamtstatistik aller Sessions
|
|
784
|
+
|
|
785
|
+
### Gruppen-Befehle
|
|
786
|
+
- **!gruppeninfo** - Infos zur aktuellen Gruppe
|
|
787
|
+
- **!gruppenlink** - Einladungslink der Gruppe
|
|
788
|
+
- **!gruppenname** - Gruppennamen ändern
|
|
789
|
+
- **!gruppenbio** - Gruppenbeschreibung ändern
|
|
790
|
+
- **!hinzufügen** / **!entfernen** - Teilnehmer verwalten
|
|
791
|
+
- **!promoten** / **!demoten** - Admin-Rechte verwalten
|
|
792
|
+
|
|
793
|
+
### Nachrichten-Befehle
|
|
794
|
+
- **!ort** - Standort senden
|
|
795
|
+
- **!reaktion** - Auf Nachricht reagieren
|
|
796
|
+
- **!tippen** / **!aufnehmen** - Indikatoren anzeigen
|
|
797
|
+
- **!umfrage** - Umfrage erstellen
|
|
798
|
+
- **!broadcast** - Broadcast senden
|
|
799
|
+
|
|
800
|
+
### Status & Queue
|
|
801
|
+
- **!status** - Status hochladen
|
|
802
|
+
- **!queue** - Nachricht zur Queue hinzufügen
|
|
803
|
+
- **!queuestatus** - Queue Status anzeigen
|
|
804
|
+
- **!clearqueue** - Queue leeren
|
|
805
|
+
- **!ratelimit** - Rate Limit setzen
|
|
806
|
+
|
|
807
|
+
### Profil & Kontakt
|
|
808
|
+
- **!profilbild** - Profilbild anzeigen
|
|
809
|
+
- **!status** - Status abrufen
|
|
810
|
+
- **!kontakt** - Kontaktinfo anzeigen
|
|
811
|
+
- **!meinestatus** - Eigenen Status ändern
|
|
812
|
+
|
|
813
|
+
### Verbindung
|
|
814
|
+
- **!autoreconnect** - Auto-Reconnect aktivieren
|
|
815
|
+
- **!health** - Verbindungs-Status prüfen
|
|
816
|
+
|
|
817
|
+
### Session-Verwaltung
|
|
818
|
+
- **!neustart** / **!pause** / **!fortsetzen** / **!stopp** - Session Control
|
|
819
|
+
- **!löschen** - Session-Daten löschen
|
|
820
|
+
- **!start** - Neue Session starten
|
|
821
|
+
- **!zuweisen** - Chat einer Session zuweisen
|
|
822
|
+
- **!zuweisungen** - Alle Zuweisungen anzeigen
|
|
823
|
+
|
|
824
|
+
**Features:**
|
|
825
|
+
- ✅ Chat-Assignment System (keine Doppel-Antworten)
|
|
826
|
+
- ✅ Command-Lock System (keine Race-Conditions)
|
|
827
|
+
- ✅ Latenz-Messung
|
|
828
|
+
- ✅ Error-Handling
|
|
270
829
|
|
|
271
830
|
## 📊 Statistik-System
|
|
272
831
|
|
|
@@ -367,31 +926,40 @@ wa_credentials/ # Session-Daten
|
|
|
367
926
|
|
|
368
927
|
## 🛠️ Bekannte Einschränkungen & Design-Entscheidungen
|
|
369
928
|
|
|
370
|
-
###
|
|
371
|
-
- ❌
|
|
372
|
-
- ❌
|
|
373
|
-
- ❌
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
-
|
|
377
|
-
-
|
|
378
|
-
-
|
|
379
|
-
-
|
|
380
|
-
-
|
|
381
|
-
-
|
|
929
|
+
### Was ist NICHT implementiert
|
|
930
|
+
- ❌ Message Editing (wartet auf Baileys Support)
|
|
931
|
+
- ❌ Business API erweiterte Features
|
|
932
|
+
- ❌ Chat Archive/Mute/Pin über API (manuell möglich)
|
|
933
|
+
|
|
934
|
+
### Vollständig implementiert in v2.0 ✅
|
|
935
|
+
- ✅ Group Management (Complete - 12 Funktionen)
|
|
936
|
+
- ✅ Advanced Messaging (Complete - 6 Funktionen)
|
|
937
|
+
- ✅ Contact Management (Complete - 7 Funktionen)
|
|
938
|
+
- ✅ Presence & Typing (Complete - 7 Funktionen)
|
|
939
|
+
- ✅ Poll Messages (Complete)
|
|
940
|
+
- ✅ Status/Stories (Complete)
|
|
941
|
+
- ✅ Broadcast Lists (Complete)
|
|
942
|
+
- ✅ Message Queue & Rate Limiting (Complete - 6 Funktionen)
|
|
943
|
+
- ✅ Webhook Support (Complete - 3 Funktionen)
|
|
944
|
+
- ✅ Enhanced Auto-Reconnect (Complete mit Exponential Backoff)
|
|
945
|
+
|
|
946
|
+
**Total: 60+ Funktionen implementiert!**
|
|
382
947
|
|
|
383
948
|
### Design-Philosophie
|
|
384
|
-
- **
|
|
385
|
-
- **
|
|
386
|
-
- **
|
|
949
|
+
- **Feature-Complete über Minimalismus** - Alle wichtigen Features implementiert
|
|
950
|
+
- **Production-Ready** - Robustes Error-Handling und Rate Limiting
|
|
951
|
+
- **Dual Package Support** - CommonJS + ES Modules
|
|
387
952
|
- **Event-Driven** - Keine Polling, nur Events
|
|
388
953
|
- **Map-basiert** - Schnelle Session-Lookups
|
|
954
|
+
- **Obfuskiert** - Source Code geschützt
|
|
389
955
|
|
|
390
956
|
### Performance-Charakteristiken
|
|
391
957
|
- ✅ Sehr schnelle Session-Switches
|
|
392
|
-
- ✅ Geringer Memory-Footprint (~
|
|
958
|
+
- ✅ Geringer Memory-Footprint (~50-100MB pro Session)
|
|
393
959
|
- ✅ Keine Blocking Operations
|
|
394
|
-
-
|
|
960
|
+
- ✅ Built-in Rate Limiting
|
|
961
|
+
- ✅ Queue System für Mass-Messaging
|
|
962
|
+
- ✅ Auto-Reconnect mit Exponential Backoff
|
|
395
963
|
|
|
396
964
|
## 🔒 Sicherheit
|
|
397
965
|
|