@deathnaitsa/wa-api 1.0.15 → 1.0.16
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/package.json +1 -1
- package/readme.md +116 -82
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,41 +1,35 @@
|
|
|
1
1
|
# wa-api
|
|
2
2
|
|
|
3
|
-
Leichte Bibliothek zur Verwaltung mehrerer WhatsApp-Sessions – mit einer
|
|
3
|
+
Leichte Bibliothek zur Verwaltung mehrerer WhatsApp-Sessions – mit **einer** universellen `sendMessage`-Funktion und direkter `relayMessage`-Unterstützung für alle fortgeschrittenen Szenarien.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## 📑 Inhaltsverzeichnis
|
|
8
8
|
|
|
9
|
-
1. [
|
|
10
|
-
2. [
|
|
9
|
+
1. [Installation](#installation)
|
|
10
|
+
2. [Import & Setup](#import--setup)
|
|
11
11
|
3. [Session Management](#session-management)
|
|
12
|
-
4. [Nachrichten senden
|
|
13
|
-
5. [Low-
|
|
12
|
+
4. [Nachrichten senden via `sendMessage`](#nachrichten-senden-via-sendmessage)
|
|
13
|
+
5. [Low-level `relayMessage` Beispiele](#low-level-relaymessage-beispiele)
|
|
14
|
+
|
|
15
|
+
* [ProtocolMessage: Nachricht löschen (Revoke)](#protocolmessage-nachricht-löschen-revoke)
|
|
16
|
+
* [Ephemeral-Modus (Gruppen)](#ephemeral-modus-gruppen)
|
|
17
|
+
* [Status-Update (Story)](#status-update-story)
|
|
18
|
+
* [Weiterleiten (Forward)](#weiterleiten-forward)
|
|
19
|
+
* [Profilbild aktualisieren](#profilbild-aktualisieren)
|
|
20
|
+
* [Chat als gelesen markieren](#chat-als-gelesen-markieren)
|
|
14
21
|
6. [Listener](#listener)
|
|
15
22
|
7. [Fehlerbehandlung](#fehlerbehandlung)
|
|
16
|
-
8. [Support](#support)
|
|
17
23
|
|
|
18
24
|
---
|
|
19
25
|
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
**wa-api** bietet:
|
|
23
|
-
|
|
24
|
-
* **Multi-Session**: Verwaltung beliebig vieler WhatsApp-Sessions in einer App.
|
|
25
|
-
* **One-Stop Messaging**: Eine einzige `sendMessage`-Funktion für **Text**, **Media**, **Umfragen**, **Reactions**, **Status-Updates** u.v.m.
|
|
26
|
-
* **Low-Level Relay**: Direkter Zugriff auf Baileys’ `relayMessage` für Spezialfälle.
|
|
27
|
-
* **Automatisches Caching** und **JID-Konvertierung**.
|
|
28
|
-
* **Konsistentes Error-Handling** mit `WhatsappError`.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Installation und Setup
|
|
26
|
+
## 📦 Installation
|
|
33
27
|
|
|
34
28
|
```bash
|
|
35
29
|
npm install @deathnaitsa/wa-api@latest
|
|
36
30
|
```
|
|
37
31
|
|
|
38
|
-
|
|
32
|
+
## 🔌 Import & Setup
|
|
39
33
|
|
|
40
34
|
```js
|
|
41
35
|
// CommonJS
|
|
@@ -45,103 +39,149 @@ const wa = require('@deathnaitsa/wa-api');
|
|
|
45
39
|
import * as wa from '@deathnaitsa/wa-api';
|
|
46
40
|
```
|
|
47
41
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## Session Management
|
|
51
|
-
|
|
52
|
-
| Funktion | Beschreibung |
|
|
53
|
-
| ----------------------------------------------------- | ------------------------------------------------- |
|
|
54
|
-
| `wa.startSession(id)` | Neue Session starten + QR-Code im Terminal zeigen |
|
|
55
|
-
| `wa.startSessionWithPairingCode(id, { phoneNumber })` | Direkt per Pairing-Code starten |
|
|
56
|
-
| `wa.getAllSession()` | Array aller aktiven Session-IDs |
|
|
57
|
-
| `wa.getSession(id)` | Metadaten einer Session abrufen |
|
|
58
|
-
| `wa.loadSessionsFromStorage()` | Alle gespeicherten Sessions aus Ordner laden |
|
|
59
|
-
|
|
60
|
-
**Beispiel**
|
|
42
|
+
## 🚀 Session Management
|
|
61
43
|
|
|
62
44
|
```js
|
|
63
|
-
await wa.startSession('
|
|
64
|
-
|
|
65
|
-
|
|
45
|
+
await wa.startSession('session1');
|
|
46
|
+
await wa.startSessionWithPairingCode('session2', { phoneNumber: '491234567890' });
|
|
47
|
+
const all = wa.getAllSession();
|
|
48
|
+
const one = wa.getSession('session1');
|
|
49
|
+
const loaded = await wa.loadSessionsFromStorage();
|
|
66
50
|
```
|
|
67
51
|
|
|
68
|
-
|
|
52
|
+
## 💬 Nachrichten senden via `sendMessage`
|
|
69
53
|
|
|
70
|
-
|
|
54
|
+
Eine **zentrale** Funktion für **alle** Nachrichtentypen:
|
|
71
55
|
|
|
72
56
|
```js
|
|
73
57
|
await wa.sendMessage(
|
|
74
|
-
sessionId, //
|
|
75
|
-
jidOrPhone, //
|
|
76
|
-
content, // AnyMessageContent
|
|
77
|
-
options // MiscMessageGenerationOptions
|
|
58
|
+
sessionId, // Session-ID
|
|
59
|
+
jidOrPhone, // JID oder Telefonnummer
|
|
60
|
+
content, // AnyMessageContent
|
|
61
|
+
options // MiscMessageGenerationOptions
|
|
78
62
|
);
|
|
79
63
|
```
|
|
80
64
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
65
|
+
### Beispiele
|
|
66
|
+
|
|
67
|
+
| Typ | Kurzbeschreibung | content | options |
|
|
68
|
+
| -------------- | -------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------- |
|
|
69
|
+
| Text | Normale Textnachricht | `{ text: 'Hallo Welt!' }` | `{ quoted, mentions }` |
|
|
70
|
+
| Bild | Sende Bild | `{ image:{url:'./img.png'},caption:'Bild',viewOnce:true }` | `{ quoted }` |
|
|
71
|
+
| Video | Sende Video | `{ video:{url:'./vid.mp4'},caption:'Video' }` | `{ }` |
|
|
72
|
+
| GIF | Sende GIF (MP4 + Playback) | `{ video:{url:'./gif.mp4'},gifPlayback:true }` | `{ }` |
|
|
73
|
+
| Audio | Voice Note (OGG/Opus) | `{ audio: fs.createReadStream('test.ogg'),mimetype:'audio/ogg',ptt:true }` | `{ quoted }` |
|
|
74
|
+
| Dokument | Datei | `{ document:{url:'./doc.pdf',filename:'Doc.pdf'} }` | `{ }` |
|
|
75
|
+
| Poll | Umfrage | `{ pollCreationMessage:{name:'Umfrage',options:[{name:'A'},{name:'B'}],selectableCount:1} }` | `{ quoted }` |
|
|
76
|
+
| React | Emoji-Reaktion | `{ react:{text:'👍',key:msg.key} }` | `{ quoted }` |
|
|
77
|
+
| Delete | Löschen (Revoke) | `{ delete: msg.key }` | `{ }` |
|
|
78
|
+
| Pin | Pin/Unpin | `{ pin:{type:1,time:3600,key:msg.key} }` | `{ }` |
|
|
79
|
+
| Contacts | Kontaktkarte | `{ contacts:{displayName:'Max',contacts:[{vcard}] } }` | `{ }` |
|
|
80
|
+
| Location | Standort | `{ location:{degreesLatitude:52.52,degreesLongitude:13.405} }` | `{ }` |
|
|
81
|
+
| Forward | Weiterleiten | `{ forward: origMsg }` | `{ quoted }` |
|
|
82
|
+
| Status (Story) | Status-Update | `{ video:{url:'story.mp4'},caption:'Status' }` | `{ statusJidList:[...JIDs] }` |
|
|
97
83
|
|
|
98
84
|
---
|
|
99
85
|
|
|
100
|
-
## 🔄 Low-
|
|
86
|
+
## 🔄 Low-level `relayMessage` Beispiele
|
|
101
87
|
|
|
102
|
-
Direktes Senden von
|
|
88
|
+
Direktes Senden von WAMessage-Stanzas für Spezialfälle.
|
|
103
89
|
|
|
104
90
|
### ProtocolMessage: Nachricht löschen (Revoke)
|
|
105
91
|
|
|
106
92
|
```js
|
|
107
|
-
const deleteNode = {
|
|
108
|
-
|
|
93
|
+
const deleteNode = {
|
|
94
|
+
protocolMessage: {
|
|
95
|
+
key: { remoteJid: chatJid, fromMe: true, id: targetId },
|
|
96
|
+
type: 7 // MESSAGE_REVOKE
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
await wa.relayMessage(
|
|
100
|
+
sessionId,
|
|
101
|
+
chatJid,
|
|
102
|
+
deleteNode,
|
|
103
|
+
{ messageId: targetId }
|
|
104
|
+
);
|
|
109
105
|
```
|
|
110
106
|
|
|
111
107
|
### Ephemeral-Modus (Gruppen)
|
|
112
108
|
|
|
113
109
|
```js
|
|
114
|
-
|
|
115
|
-
await wa.relayMessage(
|
|
110
|
+
// 24h Ephemeral ein
|
|
111
|
+
await wa.relayMessage(
|
|
112
|
+
sessionId,
|
|
113
|
+
groupJid,
|
|
114
|
+
{ disappearingMessagesInChat: Defaults.WA_DEFAULT_EPHEMERAL },
|
|
115
|
+
{}
|
|
116
|
+
);
|
|
117
|
+
// Ephemeral aus
|
|
118
|
+
await wa.relayMessage(
|
|
119
|
+
sessionId,
|
|
120
|
+
groupJid,
|
|
121
|
+
{ disappearingMessagesInChat: 0 },
|
|
122
|
+
{}
|
|
123
|
+
);
|
|
116
124
|
```
|
|
117
125
|
|
|
118
126
|
### Status-Update (Story)
|
|
119
127
|
|
|
120
128
|
```js
|
|
121
|
-
const
|
|
122
|
-
|
|
129
|
+
const storyNode = {
|
|
130
|
+
videoMessage: { url: './story.mp4' },
|
|
131
|
+
caption: 'Meine Story'
|
|
132
|
+
};
|
|
133
|
+
await wa.relayMessage(
|
|
134
|
+
sessionId,
|
|
135
|
+
'status@broadcast',
|
|
136
|
+
storyNode,
|
|
137
|
+
{ statusJidList: ['491234567890@s.whatsapp.net'] }
|
|
138
|
+
);
|
|
123
139
|
```
|
|
124
140
|
|
|
125
141
|
### Weiterleiten (Forward)
|
|
126
142
|
|
|
127
143
|
```js
|
|
128
144
|
const origMsg = getMessageFromStore();
|
|
129
|
-
const
|
|
130
|
-
await wa.relayMessage(
|
|
145
|
+
const forwardNode = { forward: origMsg };
|
|
146
|
+
await wa.relayMessage(
|
|
147
|
+
sessionId,
|
|
148
|
+
chatJid,
|
|
149
|
+
forwardNode,
|
|
150
|
+
{ messageId: origMsg.key.id }
|
|
151
|
+
);
|
|
131
152
|
```
|
|
132
153
|
|
|
133
154
|
### Profilbild aktualisieren
|
|
134
155
|
|
|
135
156
|
```js
|
|
136
|
-
const
|
|
137
|
-
|
|
157
|
+
const updateNode = {
|
|
158
|
+
profilePictureChange: {
|
|
159
|
+
displayPicture: fs.readFileSync('./newprofile.jpg')
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
await wa.relayMessage(
|
|
163
|
+
sessionId,
|
|
164
|
+
userJid,
|
|
165
|
+
updateNode,
|
|
166
|
+
{ messageId: 'nishiProfileUpdate' }
|
|
167
|
+
);
|
|
138
168
|
```
|
|
139
169
|
|
|
140
170
|
### Chat als gelesen markieren
|
|
141
171
|
|
|
142
172
|
```js
|
|
143
|
-
const
|
|
144
|
-
|
|
173
|
+
const readNode = {
|
|
174
|
+
protocolMessage: {
|
|
175
|
+
key: { remoteJid: chatJid },
|
|
176
|
+
type: 3 // READ
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
await wa.relayMessage(
|
|
180
|
+
sessionId,
|
|
181
|
+
chatJid,
|
|
182
|
+
readNode,
|
|
183
|
+
{ messageId: 'nishiMarkRead' }
|
|
184
|
+
);
|
|
145
185
|
```
|
|
146
186
|
|
|
147
187
|
---
|
|
@@ -151,25 +191,19 @@ await wa.relayMessage(sessionId, chatJid, node, { messageId:'nishiRead' });
|
|
|
151
191
|
```js
|
|
152
192
|
wa.onConnected(id => console.log('Online:', id));
|
|
153
193
|
wa.onQRUpdated(info => console.log('QR:', info));
|
|
154
|
-
wa.onMessageReceived(msg => console.log('
|
|
194
|
+
wa.onMessageReceived(msg => console.log('Nachricht:', msg));
|
|
155
195
|
```
|
|
156
196
|
|
|
157
|
-
---
|
|
158
|
-
|
|
159
197
|
## ⚠️ Fehlerbehandlung
|
|
160
198
|
|
|
161
199
|
```js
|
|
162
200
|
try {
|
|
163
201
|
await wa.sendMessage(...);
|
|
164
|
-
} catch
|
|
165
|
-
|
|
202
|
+
} catch(e) {
|
|
203
|
+
console.error(e);
|
|
166
204
|
}
|
|
167
205
|
```
|
|
168
206
|
|
|
169
207
|
---
|
|
170
208
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
**E-Mail:** [sebloidl13@gmail.com](mailto:sebloidl13@gmail.com)
|
|
174
|
-
|
|
175
|
-
© 2025 `@deathnaitsa/wa-api`
|
|
209
|
+
© 2025 `@deathnaitsa/wa-api` • Support: [sebloidl13@gmail.com](mailto:sebloidl13@gmail.com)
|