@nuiisweety/baileys 0.1.5 → 0.1.7
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 +248 -162
- package/README.md.bak +1077 -437
- package/lib/Socket/messages-send.js +62 -0
- package/lib/Utils/messages.js +5 -5
- package/lib/Utils/rich-message-utils.js +396 -19
- package/package.json +1 -1
package/README.md.bak
CHANGED
|
@@ -1,70 +1,128 @@
|
|
|
1
|
-
<h1 align="center">✨@nuiisweety/baileys</h1>
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
<img src="https://raw.githubusercontent.com/NuiiS4TORU/-nuisockets/refs/heads/main/nuiisweety.png" width="100%"/>
|
|
5
|
-
</div>
|
|
6
|
-
|
|
7
|
-
<div align="center">
|
|
8
|
-
<i>✨ Fork manis dari <code>@whiskeysockets/baileys</code> v7.0.0-rc11 — dikembangkan dengan sepenuh hati oleh <b>NuiiS4TORU</b> 💖</i>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<br/>
|
|
12
|
-
|
|
13
|
-
<div align="center">
|
|
14
|
-
<blockquote>
|
|
15
|
-
🌷 <b>@nuiisweety/baileys hanya pernah bercabang dari satu sumber yang ia percaya, yaitu <a href="https://github.com/WhiskeySockets/Baileys">@whiskeysockets/baileys</a>.</b><br/>
|
|
16
|
-
Setiap modifikasi adalah buah dari pengembangan mandiri yang penuh dedikasi~ 🍀
|
|
17
|
-
</blockquote>
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 🗺️ Navigasi Sayang
|
|
23
|
-
|
|
24
1
|
<div align="center">
|
|
25
2
|
|
|
26
|
-
|
|
27
|
-
[QR Code](#-koneksi-qr-code) · [Pairing Code](#-koneksi-pairing-code) · [Browser Identity](#️-browser-identity) · [Opsi Koneksi](#️-opsi-koneksi)
|
|
28
|
-
|
|
29
|
-
**📨 Handle Pesan**
|
|
30
|
-
[Terima Pesan](#-terima-pesan) · [Handle Grup](#-handle-grup)
|
|
3
|
+
<img src="https://raw.githubusercontent.com/NuiiS4TORU/-nuisockets/refs/heads/main/nuiisweety.png" width="100%"/>
|
|
31
4
|
|
|
32
|
-
|
|
33
|
-
[Teks](#-teks) · [Gambar](#️-gambar) · [Video](#-video) · [Audio & Voice Note](#-audio--voice-note) · [Dokumen](#-dokumen) · [Sticker](#-sticker) · [Lokasi](#-lokasi) · [Kontak](#-kontak)
|
|
5
|
+
# @nuiisweety/baileys
|
|
34
6
|
|
|
35
|
-
|
|
36
|
-
|
|
7
|
+
*Fork dari [`@whiskeysockets/baileys`](https://github.com/WhiskeySockets/Baileys) v7.0.0-rc11*
|
|
8
|
+
*dikembangkan dengan sepenuh hati oleh **NuiiS4TORU***
|
|
37
9
|
|
|
38
|
-
|
|
39
|
-
[
|
|
10
|
+
[](https://www.npmjs.com/package/@nuiisweety/baileys)
|
|
11
|
+
[](LICENSE)
|
|
12
|
+
[](https://github.com/WhiskeySockets/Baileys)
|
|
40
13
|
|
|
41
|
-
|
|
42
|
-
[View Once](#️-view-once) · [View Once V2](#️-view-once-v2) · [Ephemeral](#️-ephemeral) · [Spoiler](#-spoiler) · [Group Status Wrap](#-group-status-wrap) · [Lottie Sticker](#-lottie-sticker) · [AI Icon](#-ai-icon) · [Secure Meta Label](#️-secure-meta-service-label)
|
|
43
|
-
|
|
44
|
-
**✨ Interactive**
|
|
45
|
-
[Buttons](#-buttons) · [List Message](#-list-message) · [Template Buttons](#️-template-buttons) · [Native Flow](#-native-flow) · [Carousel](#-carousel)
|
|
46
|
-
|
|
47
|
-
**🌟 Rich Message (AI)**
|
|
48
|
-
[Code Block](#-code-block) · [Links](#-links-rich) · [Table](#-table-rich) · [Rich Response (Gabungan)](#-rich-response-gabungan)
|
|
14
|
+
</div>
|
|
49
15
|
|
|
50
|
-
|
|
51
|
-
[List Reply](#-list-reply) · [Sticker Pack](#-sticker-pack) · [External Ad Reply](#-external-ad-reply) · [Request Payment](#-request-payment) · [Invoice](#-invoice) · [Order](#-order) · [Disappearing Messages](#-disappearing-messages) · [Raw Message](#-raw-message)
|
|
16
|
+
---
|
|
52
17
|
|
|
53
|
-
|
|
18
|
+
## 🗺️ Navigasi
|
|
19
|
+
|
|
20
|
+
🔌 **Koneksi & Setup** —
|
|
21
|
+
[Instalasi](#instalasi) ·
|
|
22
|
+
[QR Code](#koneksi-qr-code) ·
|
|
23
|
+
[Pairing Code](#koneksi-pairing-code) ·
|
|
24
|
+
[Browser Identity](#browser-identity) ·
|
|
25
|
+
[Opsi Koneksi](#opsi-koneksi)
|
|
26
|
+
|
|
27
|
+
📨 **Handle Pesan** —
|
|
28
|
+
[Terima Pesan](#terima-pesan) ·
|
|
29
|
+
[Handle Grup](#handle-grup)
|
|
30
|
+
|
|
31
|
+
📤 **Kirim Pesan** —
|
|
32
|
+
[Teks](#teks) ·
|
|
33
|
+
[Gambar](#gambar) ·
|
|
34
|
+
[Video](#video) ·
|
|
35
|
+
[Audio & Voice Note](#audio--voice-note) ·
|
|
36
|
+
[Dokumen](#dokumen) ·
|
|
37
|
+
[Sticker](#sticker) ·
|
|
38
|
+
[Lokasi](#lokasi) ·
|
|
39
|
+
[Kontak](#kontak)
|
|
40
|
+
|
|
41
|
+
💬 **Interaksi** —
|
|
42
|
+
[Reaksi](#reaksi) ·
|
|
43
|
+
[Poll](#poll) ·
|
|
44
|
+
[Poll Result](#poll-result) ·
|
|
45
|
+
[Poll Update](#poll-update) ·
|
|
46
|
+
[Forward](#forward) ·
|
|
47
|
+
[Hapus](#hapus-pesan) ·
|
|
48
|
+
[Edit](#edit-pesan) ·
|
|
49
|
+
[Pin](#pin-pesan)
|
|
50
|
+
|
|
51
|
+
✨ **Fitur Tambahan** —
|
|
52
|
+
[Album](#album) ·
|
|
53
|
+
[Event](#event) ·
|
|
54
|
+
[Group Status / Story](#group-status--group-story) ·
|
|
55
|
+
[Status Mention](#status-mention) ·
|
|
56
|
+
[Flow Reply](#flow-reply) ·
|
|
57
|
+
[Button Reply](#button-reply) ·
|
|
58
|
+
[Keep In Chat](#keep-in-chat) ·
|
|
59
|
+
[Scheduled Call](#scheduled-call) ·
|
|
60
|
+
[Group Invite](#group-invite) ·
|
|
61
|
+
[Product](#product)
|
|
62
|
+
|
|
63
|
+
🎁 **Wrapper** —
|
|
64
|
+
[View Once](#view-once) ·
|
|
65
|
+
[View Once V2](#view-once-v2) ·
|
|
66
|
+
[Ephemeral](#ephemeral) ·
|
|
67
|
+
[Spoiler](#spoiler) ·
|
|
68
|
+
[Group Status Wrap](#group-status-wrap) ·
|
|
69
|
+
[Lottie Sticker](#lottie-sticker) ·
|
|
70
|
+
[AI Icon](#ai-icon) ·
|
|
71
|
+
[Secure Meta Label](#secure-meta-service-label)
|
|
72
|
+
|
|
73
|
+
🎛️ **Interactive** —
|
|
74
|
+
[Buttons](#buttons) ·
|
|
75
|
+
[List Message](#list-message) ·
|
|
76
|
+
[Template Buttons](#template-buttons) ·
|
|
77
|
+
[Native Flow](#native-flow) ·
|
|
78
|
+
[Carousel](#carousel)
|
|
79
|
+
|
|
80
|
+
🤖 **Rich Message (AI)** —
|
|
81
|
+
[Text](#addtext) ·
|
|
82
|
+
[Code Block](#addcode) ·
|
|
83
|
+
[Table](#addtable) ·
|
|
84
|
+
[Image](#addimage) ·
|
|
85
|
+
[Video](#addvideo) ·
|
|
86
|
+
[Source](#addsource) ·
|
|
87
|
+
[Reels](#addreels) ·
|
|
88
|
+
[Product Card](#addproduct) ·
|
|
89
|
+
[Post](#addpost) ·
|
|
90
|
+
[Tip](#addtip) ·
|
|
91
|
+
[Suggest](#addsuggest) ·
|
|
92
|
+
[Map](#map-rich) ·
|
|
93
|
+
[LaTeX](#latex-rich) ·
|
|
94
|
+
[Grid Image](#grid-image-rich) ·
|
|
95
|
+
[Inline Image](#inline-image-rich) ·
|
|
96
|
+
[Dynamic/GIF](#dynamic--gif-rich) ·
|
|
97
|
+
[Content Items](#content-items-rich) ·
|
|
98
|
+
[Gabungan (richResponse)](#rich-response-gabungan) ·
|
|
99
|
+
[Terima & Decode](#terima--decode-rich-message)
|
|
100
|
+
|
|
101
|
+
🔧 **Lainnya** —
|
|
102
|
+
[List Reply](#list-reply) ·
|
|
103
|
+
[Sticker Pack](#sticker-pack) ·
|
|
104
|
+
[External Ad Reply](#external-ad-reply) ·
|
|
105
|
+
[Request Payment](#request-payment) ·
|
|
106
|
+
[Invoice](#invoice) ·
|
|
107
|
+
[Order](#order) ·
|
|
108
|
+
[Disappearing Messages](#disappearing-messages) ·
|
|
109
|
+
[Raw Message](#raw-message)
|
|
54
110
|
|
|
55
111
|
---
|
|
56
112
|
|
|
57
|
-
##
|
|
113
|
+
## 📦 Instalasi
|
|
58
114
|
|
|
59
115
|
```js
|
|
116
|
+
// CommonJS
|
|
60
117
|
const { default: makeWASocket } = require('@nuiisweety/baileys')
|
|
61
|
-
|
|
118
|
+
|
|
119
|
+
// ESM
|
|
62
120
|
import makeWASocket from '@nuiisweety/baileys'
|
|
63
121
|
```
|
|
64
122
|
|
|
65
123
|
---
|
|
66
124
|
|
|
67
|
-
##
|
|
125
|
+
## 📱 Koneksi QR Code
|
|
68
126
|
|
|
69
127
|
```js
|
|
70
128
|
const {
|
|
@@ -90,7 +148,7 @@ async function start() {
|
|
|
90
148
|
const code = lastDisconnect?.error?.output?.statusCode
|
|
91
149
|
if (code !== DisconnectReason.loggedOut) start()
|
|
92
150
|
} else if (connection === 'open') {
|
|
93
|
-
console.log('
|
|
151
|
+
console.log('Connected!')
|
|
94
152
|
}
|
|
95
153
|
})
|
|
96
154
|
}
|
|
@@ -101,14 +159,10 @@ start()
|
|
|
101
159
|
|
|
102
160
|
## 🔑 Koneksi Pairing Code
|
|
103
161
|
|
|
104
|
-
>
|
|
162
|
+
> Cocok untuk server/VPS tanpa tampilan terminal.
|
|
105
163
|
|
|
106
164
|
```js
|
|
107
|
-
const sock = makeWASocket({
|
|
108
|
-
version,
|
|
109
|
-
auth: state,
|
|
110
|
-
printQRInTerminal: false
|
|
111
|
-
})
|
|
165
|
+
const sock = makeWASocket({ version, auth: state, printQRInTerminal: false })
|
|
112
166
|
|
|
113
167
|
sock.ev.on('creds.update', saveCreds)
|
|
114
168
|
sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
|
|
@@ -117,35 +171,30 @@ sock.ev.on('connection.update', ({ connection, lastDisconnect }) => {
|
|
|
117
171
|
}
|
|
118
172
|
})
|
|
119
173
|
|
|
120
|
-
//
|
|
174
|
+
// Nomor HP format internasional tanpa +
|
|
121
175
|
if (!sock.authState.creds.registered) {
|
|
122
176
|
const code = await sock.requestPairingCode('628123456789')
|
|
123
|
-
console.log('
|
|
124
|
-
// Masukkan di WA → Perangkat Tertaut → Tautkan Perangkat
|
|
177
|
+
console.log('Pairing code:', code)
|
|
125
178
|
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
> 🍀 Pairing code kadaluarsa dalam beberapa menit. Jalankan ulang jika gagal ya~
|
|
129
179
|
|
|
130
|
-
|
|
131
|
-
```js
|
|
180
|
+
// Custom pairing code (8 karakter)
|
|
132
181
|
const code = await sock.requestPairingCode('628123456789', 'NUYY2822')
|
|
133
182
|
```
|
|
134
183
|
|
|
135
184
|
---
|
|
136
185
|
|
|
137
|
-
##
|
|
186
|
+
## 🌐 Browser Identity
|
|
138
187
|
|
|
139
188
|
```js
|
|
140
189
|
const { Browsers } = require('@nuiisweety/baileys')
|
|
141
190
|
|
|
142
191
|
makeWASocket({
|
|
143
|
-
browser: Browsers.macOS('Chrome'),
|
|
144
|
-
browser: Browsers.macOS('Firefox'),
|
|
145
|
-
browser: Browsers.windows('Chrome'),
|
|
146
|
-
browser: Browsers.ubuntu('Chrome'),
|
|
147
|
-
browser: Browsers.baileys('Chrome'),
|
|
148
|
-
browser: ['MyBot', 'Chrome', '1.0.0'] //
|
|
192
|
+
browser: Browsers.macOS('Chrome'), // Mac OS — Chrome
|
|
193
|
+
browser: Browsers.macOS('Firefox'), // Mac OS — Firefox
|
|
194
|
+
browser: Browsers.windows('Chrome'), // Windows — Chrome
|
|
195
|
+
browser: Browsers.ubuntu('Chrome'), // Ubuntu — Chrome
|
|
196
|
+
browser: Browsers.baileys('Chrome'), // Baileys — Chrome
|
|
197
|
+
browser: ['MyBot', 'Chrome', '1.0.0'] // custom
|
|
149
198
|
})
|
|
150
199
|
```
|
|
151
200
|
|
|
@@ -171,7 +220,7 @@ makeWASocket({
|
|
|
171
220
|
|
|
172
221
|
---
|
|
173
222
|
|
|
174
|
-
##
|
|
223
|
+
## 📬 Terima Pesan
|
|
175
224
|
|
|
176
225
|
```js
|
|
177
226
|
sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
@@ -185,17 +234,13 @@ sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
|
185
234
|
const isGroup = jid.endsWith('@g.us')
|
|
186
235
|
const sender = isGroup ? m.key.participant : jid
|
|
187
236
|
|
|
188
|
-
// 💬 Ambil teks
|
|
189
237
|
const text =
|
|
190
238
|
m.message.conversation ||
|
|
191
239
|
m.message.extendedTextMessage?.text ||
|
|
192
240
|
m.message.imageMessage?.caption ||
|
|
193
241
|
m.message.videoMessage?.caption || ''
|
|
194
242
|
|
|
195
|
-
// 👀 Tandai dibaca
|
|
196
243
|
await sock.readMessages([m.key])
|
|
197
|
-
|
|
198
|
-
// 🌸 Typing indicator
|
|
199
244
|
await sock.sendPresenceUpdate('composing', jid)
|
|
200
245
|
}
|
|
201
246
|
})
|
|
@@ -206,36 +251,36 @@ sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
|
206
251
|
## 👥 Handle Grup
|
|
207
252
|
|
|
208
253
|
```js
|
|
209
|
-
//
|
|
254
|
+
// Anggota masuk/keluar
|
|
210
255
|
sock.ev.on('group-participants.update', ({ id, participants, action }) => {
|
|
211
256
|
// action: 'add' | 'remove' | 'promote' | 'demote'
|
|
212
257
|
})
|
|
213
258
|
|
|
214
|
-
//
|
|
259
|
+
// Info grup diupdate
|
|
215
260
|
sock.ev.on('groups.update', updates => {})
|
|
216
261
|
|
|
217
|
-
//
|
|
262
|
+
// Metadata grup
|
|
218
263
|
const meta = await sock.groupMetadata(groupJid)
|
|
219
264
|
console.log(meta.subject, meta.participants)
|
|
220
265
|
|
|
221
|
-
//
|
|
266
|
+
// Semua grup
|
|
222
267
|
const groups = await sock.groupFetchAllParticipating()
|
|
223
268
|
|
|
224
|
-
//
|
|
269
|
+
// Tambah / keluarkan / promote / demote
|
|
225
270
|
await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'add')
|
|
226
271
|
await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'remove')
|
|
227
272
|
await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'promote')
|
|
228
273
|
await sock.groupParticipantsUpdate(groupJid, ['628xxx@s.whatsapp.net'], 'demote')
|
|
229
274
|
|
|
230
|
-
//
|
|
275
|
+
// Ubah nama / deskripsi
|
|
231
276
|
await sock.groupUpdateSubject(groupJid, 'Nama Baru')
|
|
232
277
|
await sock.groupUpdateDescription(groupJid, 'Deskripsi baru')
|
|
233
278
|
|
|
234
|
-
//
|
|
279
|
+
// Kunci / buka grup
|
|
235
280
|
await sock.groupSettingUpdate(groupJid, 'announcement')
|
|
236
281
|
await sock.groupSettingUpdate(groupJid, 'not_announcement')
|
|
237
282
|
|
|
238
|
-
//
|
|
283
|
+
// Mention semua anggota
|
|
239
284
|
const meta2 = await sock.groupMetadata(groupJid)
|
|
240
285
|
const members = meta2.participants.map(p => p.id)
|
|
241
286
|
await sock.sendMessage(groupJid, {
|
|
@@ -249,9 +294,9 @@ await sock.sendMessage(groupJid, {
|
|
|
249
294
|
## 💬 Teks
|
|
250
295
|
|
|
251
296
|
```js
|
|
252
|
-
await sock.sendMessage(jid, { text: 'Halo
|
|
297
|
+
await sock.sendMessage(jid, { text: 'Halo!' })
|
|
253
298
|
|
|
254
|
-
//
|
|
299
|
+
// Dengan mention
|
|
255
300
|
await sock.sendMessage(jid, {
|
|
256
301
|
text: '@628xxx halo!',
|
|
257
302
|
mentions: ['628xxx@s.whatsapp.net']
|
|
@@ -263,31 +308,31 @@ await sock.sendMessage(jid, {
|
|
|
263
308
|
## 🖼️ Gambar
|
|
264
309
|
|
|
265
310
|
```js
|
|
266
|
-
//
|
|
311
|
+
// URL
|
|
267
312
|
await sock.sendMessage(jid, {
|
|
268
313
|
image: { url: 'https://example.com/image.jpg' },
|
|
269
|
-
caption: 'Keterangan
|
|
314
|
+
caption: 'Keterangan'
|
|
270
315
|
})
|
|
271
316
|
|
|
272
|
-
//
|
|
317
|
+
// Buffer
|
|
273
318
|
await sock.sendMessage(jid, {
|
|
274
319
|
image: fs.readFileSync('image.jpg'),
|
|
275
|
-
caption: 'Keterangan
|
|
320
|
+
caption: 'Keterangan'
|
|
276
321
|
})
|
|
277
322
|
```
|
|
278
323
|
|
|
279
324
|
---
|
|
280
325
|
|
|
281
|
-
##
|
|
326
|
+
## 🎬 Video
|
|
282
327
|
|
|
283
328
|
```js
|
|
284
329
|
await sock.sendMessage(jid, {
|
|
285
330
|
video: { url: 'https://example.com/video.mp4' },
|
|
286
|
-
caption: 'Keterangan
|
|
287
|
-
gifPlayback: false // true = GIF looping
|
|
331
|
+
caption: 'Keterangan',
|
|
332
|
+
gifPlayback: false // true = GIF looping
|
|
288
333
|
})
|
|
289
334
|
|
|
290
|
-
//
|
|
335
|
+
// Video note (bubble)
|
|
291
336
|
await sock.sendMessage(jid, {
|
|
292
337
|
video: fs.readFileSync('video.mp4'),
|
|
293
338
|
ptv: true
|
|
@@ -296,16 +341,16 @@ await sock.sendMessage(jid, {
|
|
|
296
341
|
|
|
297
342
|
---
|
|
298
343
|
|
|
299
|
-
##
|
|
344
|
+
## 🎙️ Audio & Voice Note
|
|
300
345
|
|
|
301
346
|
```js
|
|
302
|
-
//
|
|
347
|
+
// Audio biasa
|
|
303
348
|
await sock.sendMessage(jid, {
|
|
304
349
|
audio: { url: 'https://example.com/audio.mp3' },
|
|
305
350
|
mimetype: 'audio/mpeg'
|
|
306
351
|
})
|
|
307
352
|
|
|
308
|
-
//
|
|
353
|
+
// Voice note (PTT)
|
|
309
354
|
await sock.sendMessage(jid, {
|
|
310
355
|
audio: fs.readFileSync('voice.ogg'),
|
|
311
356
|
mimetype: 'audio/ogg; codecs=opus',
|
|
@@ -322,18 +367,16 @@ await sock.sendMessage(jid, {
|
|
|
322
367
|
document: fs.readFileSync('file.pdf'),
|
|
323
368
|
mimetype: 'application/pdf',
|
|
324
369
|
fileName: 'dokumen.pdf',
|
|
325
|
-
caption: 'File ini
|
|
370
|
+
caption: 'File ini'
|
|
326
371
|
})
|
|
327
372
|
```
|
|
328
373
|
|
|
329
374
|
---
|
|
330
375
|
|
|
331
|
-
##
|
|
376
|
+
## 🎴 Sticker
|
|
332
377
|
|
|
333
378
|
```js
|
|
334
|
-
await sock.sendMessage(jid, {
|
|
335
|
-
sticker: fs.readFileSync('sticker.webp')
|
|
336
|
-
})
|
|
379
|
+
await sock.sendMessage(jid, { sticker: fs.readFileSync('sticker.webp') })
|
|
337
380
|
```
|
|
338
381
|
|
|
339
382
|
---
|
|
@@ -345,7 +388,7 @@ await sock.sendMessage(jid, {
|
|
|
345
388
|
location: {
|
|
346
389
|
degreesLatitude: -6.2088,
|
|
347
390
|
degreesLongitude: 106.8456,
|
|
348
|
-
name: 'Monas
|
|
391
|
+
name: 'Monas',
|
|
349
392
|
address: 'Jakarta Pusat'
|
|
350
393
|
}
|
|
351
394
|
})
|
|
@@ -358,7 +401,7 @@ await sock.sendMessage(jid, {
|
|
|
358
401
|
```js
|
|
359
402
|
await sock.sendMessage(jid, {
|
|
360
403
|
contacts: {
|
|
361
|
-
displayName: 'Nama
|
|
404
|
+
displayName: 'Nama',
|
|
362
405
|
contacts: [{
|
|
363
406
|
vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:Nama\nTEL:+62812345678\nEND:VCARD'
|
|
364
407
|
}]
|
|
@@ -368,51 +411,48 @@ await sock.sendMessage(jid, {
|
|
|
368
411
|
|
|
369
412
|
---
|
|
370
413
|
|
|
371
|
-
##
|
|
414
|
+
## ❤️ Reaksi
|
|
372
415
|
|
|
373
416
|
```js
|
|
374
|
-
await sock.sendMessage(jid, { react: { text: '
|
|
375
|
-
|
|
417
|
+
await sock.sendMessage(jid, { react: { text: '❤️', key: m.key } })
|
|
418
|
+
|
|
419
|
+
// Hapus reaksi
|
|
376
420
|
await sock.sendMessage(jid, { react: { text: '', key: m.key } })
|
|
377
421
|
```
|
|
378
422
|
|
|
379
423
|
---
|
|
380
424
|
|
|
381
|
-
##
|
|
425
|
+
## 📊 Poll
|
|
382
426
|
|
|
383
427
|
```js
|
|
384
428
|
await sock.sendMessage(jid, {
|
|
385
429
|
poll: {
|
|
386
|
-
name: 'Pilih salah satu
|
|
387
|
-
values: ['Opsi A
|
|
388
|
-
selectableCount: 1 // 0 = boleh pilih banyak
|
|
430
|
+
name: 'Pilih salah satu',
|
|
431
|
+
values: ['Opsi A', 'Opsi B', 'Opsi C'],
|
|
432
|
+
selectableCount: 1 // 0 = boleh pilih banyak
|
|
389
433
|
}
|
|
390
434
|
})
|
|
391
|
-
```
|
|
392
435
|
|
|
393
|
-
|
|
394
|
-
```js
|
|
436
|
+
// Poll dengan fitur tambahan
|
|
395
437
|
await sock.sendMessage(jid, {
|
|
396
438
|
poll: {
|
|
397
|
-
name: 'Nama Poll
|
|
439
|
+
name: 'Nama Poll',
|
|
398
440
|
values: ['Opsi A', 'Opsi B'],
|
|
399
441
|
selectableCount: 1,
|
|
400
|
-
endDate: new Date('2025-12-31'),
|
|
401
|
-
hideVoter: true,
|
|
402
|
-
canAddOption: false,
|
|
403
|
-
toAnnouncementGroup: false
|
|
442
|
+
endDate: new Date('2025-12-31'),
|
|
443
|
+
hideVoter: true,
|
|
444
|
+
canAddOption: false,
|
|
445
|
+
toAnnouncementGroup: false
|
|
404
446
|
}
|
|
405
447
|
})
|
|
406
|
-
```
|
|
407
448
|
|
|
408
|
-
|
|
409
|
-
```js
|
|
449
|
+
// Quiz (Poll dengan jawaban benar)
|
|
410
450
|
await sock.sendMessage(jid, {
|
|
411
451
|
poll: {
|
|
412
|
-
name: 'Ibu kota Indonesia?
|
|
452
|
+
name: 'Ibu kota Indonesia?',
|
|
413
453
|
values: ['Jakarta', 'Surabaya', 'Bandung'],
|
|
414
454
|
selectableCount: 1,
|
|
415
|
-
pollType: 1, // 1 = QUIZ
|
|
455
|
+
pollType: 1, // 1 = QUIZ
|
|
416
456
|
correctAnswer: 'Jakarta'
|
|
417
457
|
}
|
|
418
458
|
})
|
|
@@ -420,29 +460,29 @@ await sock.sendMessage(jid, {
|
|
|
420
460
|
|
|
421
461
|
---
|
|
422
462
|
|
|
423
|
-
##
|
|
463
|
+
## 📈 Poll Result
|
|
424
464
|
|
|
425
465
|
```js
|
|
426
466
|
await sock.sendMessage(jid, {
|
|
427
467
|
pollResult: {
|
|
428
|
-
name: 'Nama Poll
|
|
468
|
+
name: 'Nama Poll',
|
|
429
469
|
votes: [
|
|
430
|
-
{ name: 'Opsi A
|
|
431
|
-
{ name: 'Opsi B
|
|
470
|
+
{ name: 'Opsi A', voteCount: 10 },
|
|
471
|
+
{ name: 'Opsi B', voteCount: 5 }
|
|
432
472
|
],
|
|
433
|
-
pollType: 0 // 0 = POLL, 1 = QUIZ
|
|
473
|
+
pollType: 0 // 0 = POLL, 1 = QUIZ
|
|
434
474
|
}
|
|
435
475
|
})
|
|
436
476
|
```
|
|
437
477
|
|
|
438
478
|
---
|
|
439
479
|
|
|
440
|
-
##
|
|
480
|
+
## 🔄 Poll Update
|
|
441
481
|
|
|
442
482
|
```js
|
|
443
483
|
await sock.sendMessage(jid, {
|
|
444
484
|
pollUpdate: {
|
|
445
|
-
key: pollMessage.key,
|
|
485
|
+
key: pollMessage.key,
|
|
446
486
|
vote: encryptedVotePayload,
|
|
447
487
|
metadata: optionalMetadata
|
|
448
488
|
}
|
|
@@ -451,12 +491,12 @@ await sock.sendMessage(jid, {
|
|
|
451
491
|
|
|
452
492
|
---
|
|
453
493
|
|
|
454
|
-
##
|
|
494
|
+
## ↗️ Forward
|
|
455
495
|
|
|
456
496
|
```js
|
|
457
497
|
await sock.sendMessage(jid, {
|
|
458
498
|
forward: targetMessage,
|
|
459
|
-
force: true //
|
|
499
|
+
force: true // paksa tampil sebagai forwarded
|
|
460
500
|
})
|
|
461
501
|
```
|
|
462
502
|
|
|
@@ -474,7 +514,7 @@ await sock.sendMessage(jid, { delete: m.key })
|
|
|
474
514
|
|
|
475
515
|
```js
|
|
476
516
|
await sock.sendMessage(jid, {
|
|
477
|
-
text: 'Teks yang sudah diedit
|
|
517
|
+
text: 'Teks yang sudah diedit',
|
|
478
518
|
edit: m.key
|
|
479
519
|
})
|
|
480
520
|
```
|
|
@@ -484,29 +524,30 @@ await sock.sendMessage(jid, {
|
|
|
484
524
|
## 📌 Pin Pesan
|
|
485
525
|
|
|
486
526
|
```js
|
|
487
|
-
//
|
|
527
|
+
// Pin
|
|
488
528
|
await sock.sendMessage(jid, {
|
|
489
529
|
pin: m.key,
|
|
490
530
|
type: 1,
|
|
491
|
-
time: 86400 // 86400=1hr
|
|
531
|
+
time: 86400 // 86400=1hr | 604800=7hr | 2592000=30hr
|
|
492
532
|
})
|
|
493
|
-
|
|
533
|
+
|
|
534
|
+
// Unpin
|
|
494
535
|
await sock.sendMessage(jid, { pin: m.key, type: 2 })
|
|
495
536
|
```
|
|
496
537
|
|
|
497
538
|
---
|
|
498
539
|
|
|
499
|
-
##
|
|
540
|
+
## 🗂️ Album
|
|
500
541
|
|
|
501
542
|
```js
|
|
502
543
|
await sock.sendMessage(jid, {
|
|
503
544
|
album: [
|
|
504
|
-
{ image: { url: 'https://example.com/1.jpg' }, caption: 'Foto 1
|
|
505
|
-
{ image: { url: 'https://example.com/2.jpg' }, caption: 'Foto 2
|
|
506
|
-
{ video: { url: 'https://example.com/vid.mp4' }, caption: 'Video
|
|
545
|
+
{ image: { url: 'https://example.com/1.jpg' }, caption: 'Foto 1' },
|
|
546
|
+
{ image: { url: 'https://example.com/2.jpg' }, caption: 'Foto 2' },
|
|
547
|
+
{ video: { url: 'https://example.com/vid.mp4' }, caption: 'Video' }
|
|
507
548
|
]
|
|
508
549
|
})
|
|
509
|
-
//
|
|
550
|
+
// minimal 2 media
|
|
510
551
|
```
|
|
511
552
|
|
|
512
553
|
---
|
|
@@ -516,27 +557,25 @@ await sock.sendMessage(jid, {
|
|
|
516
557
|
```js
|
|
517
558
|
await sock.sendMessage(jid, {
|
|
518
559
|
event: {
|
|
519
|
-
name: 'Nama Acara
|
|
520
|
-
description: 'Deskripsi
|
|
560
|
+
name: 'Nama Acara',
|
|
561
|
+
description: 'Deskripsi',
|
|
521
562
|
startDate: new Date('2025-12-01T10:00:00'),
|
|
522
563
|
endDate: new Date('2025-12-01T12:00:00'),
|
|
523
564
|
location: {
|
|
524
565
|
degreesLatitude: -6.2088,
|
|
525
566
|
degreesLongitude: 106.8456,
|
|
526
|
-
name: 'Monas, Jakarta
|
|
567
|
+
name: 'Monas, Jakarta'
|
|
527
568
|
},
|
|
528
569
|
extraGuestsAllowed: true
|
|
529
570
|
}
|
|
530
571
|
})
|
|
531
|
-
```
|
|
532
572
|
|
|
533
|
-
|
|
534
|
-
```js
|
|
573
|
+
// Event dengan scheduled call
|
|
535
574
|
await sock.sendMessage(jid, {
|
|
536
575
|
event: {
|
|
537
|
-
name: 'Meeting Online
|
|
576
|
+
name: 'Meeting Online',
|
|
538
577
|
startDate: new Date('2025-12-01T10:00:00'),
|
|
539
|
-
call: 'audio', //
|
|
578
|
+
call: 'audio', // 'audio' | 'video'
|
|
540
579
|
isScheduleCall: true
|
|
541
580
|
}
|
|
542
581
|
})
|
|
@@ -544,43 +583,41 @@ await sock.sendMessage(jid, {
|
|
|
544
583
|
|
|
545
584
|
---
|
|
546
585
|
|
|
547
|
-
##
|
|
586
|
+
## 📖 Group Status / Group Story
|
|
548
587
|
|
|
549
588
|
```js
|
|
550
|
-
//
|
|
589
|
+
// Teks
|
|
551
590
|
await sock.sendMessage(groupJid, {
|
|
552
|
-
groupStatusMessage: { text: 'Status teks
|
|
591
|
+
groupStatusMessage: { text: 'Status teks' }
|
|
553
592
|
})
|
|
554
593
|
|
|
555
|
-
//
|
|
594
|
+
// Gambar
|
|
556
595
|
await sock.sendMessage(groupJid, {
|
|
557
596
|
groupStatusMessage: {
|
|
558
597
|
image: { url: 'https://example.com/image.jpg' },
|
|
559
|
-
caption: 'Keterangan
|
|
598
|
+
caption: 'Keterangan'
|
|
560
599
|
}
|
|
561
600
|
})
|
|
562
601
|
|
|
563
|
-
//
|
|
602
|
+
// Video
|
|
564
603
|
await sock.sendMessage(groupJid, {
|
|
565
604
|
groupStatusMessage: {
|
|
566
605
|
video: { url: 'https://example.com/video.mp4' },
|
|
567
|
-
caption: 'Keterangan
|
|
606
|
+
caption: 'Keterangan'
|
|
568
607
|
}
|
|
569
608
|
})
|
|
570
609
|
```
|
|
571
610
|
|
|
572
611
|
---
|
|
573
612
|
|
|
574
|
-
##
|
|
575
|
-
|
|
576
|
-
> 💫 Balas pesan interaktif native flow dengan anggun~
|
|
613
|
+
## 🔁 Flow Reply
|
|
577
614
|
|
|
578
615
|
```js
|
|
579
616
|
await sock.sendMessage(jid, {
|
|
580
617
|
flowReply: {
|
|
581
|
-
name: 'quick_reply',
|
|
618
|
+
name: 'quick_reply',
|
|
582
619
|
paramsJson: '{"id":"btn1"}',
|
|
583
|
-
text: 'Teks balasan
|
|
620
|
+
text: 'Teks balasan',
|
|
584
621
|
format: 1,
|
|
585
622
|
version: 1
|
|
586
623
|
}
|
|
@@ -592,35 +629,27 @@ await sock.sendMessage(jid, {
|
|
|
592
629
|
## 🔘 Button Reply
|
|
593
630
|
|
|
594
631
|
```js
|
|
595
|
-
//
|
|
632
|
+
// Template button
|
|
596
633
|
await sock.sendMessage(jid, {
|
|
597
|
-
buttonReply: {
|
|
598
|
-
displayText: 'Opsi yang dipilih 💕',
|
|
599
|
-
id: 'btn_id',
|
|
600
|
-
index: 0
|
|
601
|
-
},
|
|
634
|
+
buttonReply: { displayText: 'Opsi yang dipilih', id: 'btn_id', index: 0 },
|
|
602
635
|
type: 'template'
|
|
603
636
|
})
|
|
604
637
|
|
|
605
|
-
//
|
|
638
|
+
// Plain button
|
|
606
639
|
await sock.sendMessage(jid, {
|
|
607
|
-
buttonReply: {
|
|
608
|
-
displayText: 'Opsi yang dipilih 🌸',
|
|
609
|
-
id: 'btn_id'
|
|
610
|
-
},
|
|
640
|
+
buttonReply: { displayText: 'Opsi yang dipilih', id: 'btn_id' },
|
|
611
641
|
type: 'plain'
|
|
612
642
|
})
|
|
613
643
|
```
|
|
614
644
|
|
|
615
645
|
---
|
|
616
646
|
|
|
617
|
-
##
|
|
647
|
+
## 📎 Keep In Chat
|
|
618
648
|
|
|
619
649
|
```js
|
|
620
|
-
// 💾 Simpan
|
|
621
650
|
await sock.sendMessage(jid, {
|
|
622
651
|
keep: m.key,
|
|
623
|
-
keepType: 1 // 1 = keep
|
|
652
|
+
keepType: 1 // 1 = keep, 2 = unkeep
|
|
624
653
|
})
|
|
625
654
|
```
|
|
626
655
|
|
|
@@ -632,8 +661,8 @@ await sock.sendMessage(jid, {
|
|
|
632
661
|
await sock.sendMessage(jid, {
|
|
633
662
|
call: {
|
|
634
663
|
time: Date.now() + 3600000,
|
|
635
|
-
type: 1, // 1 = voice
|
|
636
|
-
title: 'Meeting
|
|
664
|
+
type: 1, // 1 = voice, 2 = video
|
|
665
|
+
title: 'Meeting'
|
|
637
666
|
}
|
|
638
667
|
})
|
|
639
668
|
```
|
|
@@ -648,8 +677,8 @@ await sock.sendMessage(jid, {
|
|
|
648
677
|
jid: 'xxx@g.us',
|
|
649
678
|
inviteCode: 'kode',
|
|
650
679
|
inviteExpiration: Date.now() + 86400000,
|
|
651
|
-
subject: 'Nama Grup
|
|
652
|
-
text: 'Bergabunglah bersama kami
|
|
680
|
+
subject: 'Nama Grup',
|
|
681
|
+
text: 'Bergabunglah bersama kami'
|
|
653
682
|
}
|
|
654
683
|
})
|
|
655
684
|
```
|
|
@@ -663,14 +692,14 @@ await sock.sendMessage(jid, {
|
|
|
663
692
|
product: {
|
|
664
693
|
productImage: fs.readFileSync('produk.jpg'),
|
|
665
694
|
productId: 'prod_123',
|
|
666
|
-
title: 'Nama Produk
|
|
667
|
-
description: 'Deskripsi
|
|
695
|
+
title: 'Nama Produk',
|
|
696
|
+
description: 'Deskripsi produk',
|
|
668
697
|
currencyCode: 'IDR',
|
|
669
698
|
priceAmount1000: 50000000,
|
|
670
699
|
retailerId: 'sku_001',
|
|
671
700
|
url: 'https://toko.example.com/produk'
|
|
672
701
|
},
|
|
673
|
-
businessOwnerJid: '628xxx@s.whatsapp.net' //
|
|
702
|
+
businessOwnerJid: '628xxx@s.whatsapp.net' // wajib diisi
|
|
674
703
|
})
|
|
675
704
|
```
|
|
676
705
|
|
|
@@ -681,7 +710,7 @@ await sock.sendMessage(jid, {
|
|
|
681
710
|
```js
|
|
682
711
|
await sock.sendMessage(jid, {
|
|
683
712
|
image: { url: 'https://example.com/image.jpg' },
|
|
684
|
-
viewOnce: true
|
|
713
|
+
viewOnce: true
|
|
685
714
|
})
|
|
686
715
|
```
|
|
687
716
|
|
|
@@ -692,10 +721,10 @@ await sock.sendMessage(jid, {
|
|
|
692
721
|
```js
|
|
693
722
|
await sock.sendMessage(jid, {
|
|
694
723
|
image: { url: 'https://example.com/image.jpg' },
|
|
695
|
-
viewOnceV2: true
|
|
724
|
+
viewOnceV2: true
|
|
696
725
|
})
|
|
697
726
|
|
|
698
|
-
//
|
|
727
|
+
// viewOnceV2Extension
|
|
699
728
|
await sock.sendMessage(jid, {
|
|
700
729
|
image: { url: 'https://example.com/image.jpg' },
|
|
701
730
|
viewOnceV2Extension: true
|
|
@@ -704,49 +733,41 @@ await sock.sendMessage(jid, {
|
|
|
704
733
|
|
|
705
734
|
---
|
|
706
735
|
|
|
707
|
-
##
|
|
708
|
-
|
|
709
|
-
> 🍃 Wrap pesan ke dalam `ephemeralMessage` — pesan yang menghilang seperti embun pagi~
|
|
736
|
+
## ⏳ Ephemeral
|
|
710
737
|
|
|
711
738
|
```js
|
|
712
739
|
await sock.sendMessage(jid, {
|
|
713
|
-
text: 'Pesan ini ephemeral
|
|
740
|
+
text: 'Pesan ini ephemeral',
|
|
714
741
|
ephemeral: true
|
|
715
742
|
})
|
|
716
743
|
```
|
|
717
744
|
|
|
718
745
|
---
|
|
719
746
|
|
|
720
|
-
##
|
|
721
|
-
|
|
722
|
-
> 🎀 Wrap pesan ke dalam `spoilerMessage` — untuk kejutan yang manis~
|
|
747
|
+
## 🙈 Spoiler
|
|
723
748
|
|
|
724
749
|
```js
|
|
725
750
|
await sock.sendMessage(jid, {
|
|
726
751
|
image: { url: 'https://example.com/image.jpg' },
|
|
727
|
-
caption: 'Spoiler!
|
|
752
|
+
caption: 'Spoiler!',
|
|
728
753
|
spoiler: true
|
|
729
754
|
})
|
|
730
755
|
```
|
|
731
756
|
|
|
732
757
|
---
|
|
733
758
|
|
|
734
|
-
##
|
|
735
|
-
|
|
736
|
-
> 💕 Wrap pesan biasa menjadi `groupStatusMessageV2`~
|
|
759
|
+
## 🎭 Group Status Wrap
|
|
737
760
|
|
|
738
761
|
```js
|
|
739
762
|
await sock.sendMessage(jid, {
|
|
740
|
-
text: 'Status di grup ini
|
|
763
|
+
text: 'Status di grup ini',
|
|
741
764
|
groupStatus: true
|
|
742
765
|
})
|
|
743
766
|
```
|
|
744
767
|
|
|
745
768
|
---
|
|
746
769
|
|
|
747
|
-
##
|
|
748
|
-
|
|
749
|
-
> ✨ Wrap sticker ke dalam `lottieStickerMessage` — animasi yang memukau~
|
|
770
|
+
## 🎞️ Lottie Sticker
|
|
750
771
|
|
|
751
772
|
```js
|
|
752
773
|
await sock.sendMessage(jid, {
|
|
@@ -757,58 +778,70 @@ await sock.sendMessage(jid, {
|
|
|
757
778
|
|
|
758
779
|
---
|
|
759
780
|
|
|
760
|
-
##
|
|
781
|
+
## 🤖 AI Icon
|
|
782
|
+
|
|
783
|
+
```js
|
|
784
|
+
// Hanya untuk private chat (bukan grup)
|
|
785
|
+
await sock.sendMessage(jid, { text: 'Respons dari AI', ai: true })
|
|
786
|
+
|
|
787
|
+
await sock.sendMessage(jid, {
|
|
788
|
+
image: { url: 'https://example.com/image.jpg' },
|
|
789
|
+
caption: 'Dihasilkan oleh AI',
|
|
790
|
+
ai: true
|
|
791
|
+
})
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
---
|
|
761
795
|
|
|
762
|
-
|
|
796
|
+
## 🔒 Secure Meta Service Label
|
|
763
797
|
|
|
764
798
|
```js
|
|
765
|
-
// 💬 Dengan teks biasa
|
|
766
799
|
await sock.sendMessage(jid, {
|
|
767
|
-
text: '
|
|
768
|
-
|
|
769
|
-
buttons: [
|
|
770
|
-
{ id: 'btn1', text: 'Tombol 1 💕' },
|
|
771
|
-
{ id: 'btn2', text: 'Tombol 2 🌷' },
|
|
772
|
-
{ id: 'btn3', text: 'Tombol 3 🌺' }
|
|
773
|
-
]
|
|
800
|
+
text: 'Pesan layanan resmi',
|
|
801
|
+
secureMetaServiceLabel: true
|
|
774
802
|
})
|
|
803
|
+
```
|
|
775
804
|
|
|
776
|
-
|
|
805
|
+
---
|
|
806
|
+
|
|
807
|
+
## 🎛️ Buttons
|
|
808
|
+
|
|
809
|
+
```js
|
|
810
|
+
// Teks dengan tombol
|
|
777
811
|
await sock.sendMessage(jid, {
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
footer: 'Footer 🌸',
|
|
812
|
+
text: 'Pilih salah satu',
|
|
813
|
+
footer: 'Footer pesan',
|
|
781
814
|
buttons: [
|
|
782
|
-
{ id: 'btn1', text: '
|
|
783
|
-
{ id: 'btn2', text: '
|
|
815
|
+
{ id: 'btn1', text: 'Tombol 1' },
|
|
816
|
+
{ id: 'btn2', text: 'Tombol 2' },
|
|
817
|
+
{ id: 'btn3', text: 'Tombol 3' }
|
|
784
818
|
]
|
|
785
819
|
})
|
|
786
820
|
|
|
787
|
-
//
|
|
821
|
+
// Gambar sebagai header
|
|
788
822
|
await sock.sendMessage(jid, {
|
|
789
|
-
|
|
823
|
+
image: { url: 'https://example.com/image.jpg' },
|
|
824
|
+
caption: 'Isi pesan',
|
|
825
|
+
footer: 'Footer',
|
|
790
826
|
buttons: [
|
|
791
|
-
{
|
|
792
|
-
|
|
793
|
-
sections: [
|
|
794
|
-
{
|
|
795
|
-
title: 'Kategori A 🌷',
|
|
796
|
-
rows: [
|
|
797
|
-
{ id: 'row1', title: 'Item 1 🌸', description: 'Deskripsi manis' },
|
|
798
|
-
{ id: 'row2', title: 'Item 2 🌺' }
|
|
799
|
-
]
|
|
800
|
-
}
|
|
801
|
-
]
|
|
802
|
-
}
|
|
827
|
+
{ id: 'btn1', text: 'Pilih A' },
|
|
828
|
+
{ id: 'btn2', text: 'Pilih B' }
|
|
803
829
|
]
|
|
804
830
|
})
|
|
805
831
|
|
|
806
|
-
//
|
|
832
|
+
// Native flow button
|
|
807
833
|
await sock.sendMessage(jid, {
|
|
808
|
-
text: 'Pilih
|
|
809
|
-
buttons: [
|
|
810
|
-
|
|
811
|
-
|
|
834
|
+
text: 'Pilih menu',
|
|
835
|
+
buttons: [{
|
|
836
|
+
text: 'Buka Menu',
|
|
837
|
+
sections: [{
|
|
838
|
+
title: 'Kategori A',
|
|
839
|
+
rows: [
|
|
840
|
+
{ id: 'row1', title: 'Item 1', description: 'Deskripsi' },
|
|
841
|
+
{ id: 'row2', title: 'Item 2' }
|
|
842
|
+
]
|
|
843
|
+
}]
|
|
844
|
+
}]
|
|
812
845
|
})
|
|
813
846
|
```
|
|
814
847
|
|
|
@@ -816,26 +849,24 @@ await sock.sendMessage(jid, {
|
|
|
816
849
|
|
|
817
850
|
## 📋 List Message
|
|
818
851
|
|
|
819
|
-
> 🌷 Kirim pesan daftar pilihan yang teratur dan elegan~
|
|
820
|
-
|
|
821
852
|
```js
|
|
822
853
|
await sock.sendMessage(jid, {
|
|
823
|
-
text: 'Silakan pilih
|
|
824
|
-
title: 'Judul List
|
|
825
|
-
buttonText: 'Buka Daftar
|
|
826
|
-
footer: 'Footer pesan
|
|
854
|
+
text: 'Silakan pilih',
|
|
855
|
+
title: 'Judul List',
|
|
856
|
+
buttonText: 'Buka Daftar',
|
|
857
|
+
footer: 'Footer pesan',
|
|
827
858
|
sections: [
|
|
828
859
|
{
|
|
829
|
-
title: 'Bagian 1
|
|
860
|
+
title: 'Bagian 1',
|
|
830
861
|
rows: [
|
|
831
|
-
{ id: 'row1', title: 'Pilihan A
|
|
832
|
-
{ id: 'row2', title: 'Pilihan B
|
|
862
|
+
{ id: 'row1', title: 'Pilihan A', description: 'Deskripsi A' },
|
|
863
|
+
{ id: 'row2', title: 'Pilihan B', description: 'Deskripsi B' }
|
|
833
864
|
]
|
|
834
865
|
},
|
|
835
866
|
{
|
|
836
|
-
title: 'Bagian 2
|
|
867
|
+
title: 'Bagian 2',
|
|
837
868
|
rows: [
|
|
838
|
-
{ id: 'row3', title: 'Pilihan C
|
|
869
|
+
{ id: 'row3', title: 'Pilihan C' }
|
|
839
870
|
]
|
|
840
871
|
}
|
|
841
872
|
]
|
|
@@ -844,32 +875,30 @@ await sock.sendMessage(jid, {
|
|
|
844
875
|
|
|
845
876
|
---
|
|
846
877
|
|
|
847
|
-
##
|
|
848
|
-
|
|
849
|
-
> 💌 Tombol template (quick reply, URL, call) — tampil di WhatsApp Web/Desktop & iOS~
|
|
878
|
+
## 🗃️ Template Buttons
|
|
850
879
|
|
|
851
880
|
```js
|
|
852
|
-
//
|
|
881
|
+
// Teks
|
|
853
882
|
await sock.sendMessage(jid, {
|
|
854
|
-
text: 'Pesan template
|
|
855
|
-
footer: 'Footer
|
|
883
|
+
text: 'Pesan template',
|
|
884
|
+
footer: 'Footer',
|
|
856
885
|
id: 'template-unik',
|
|
857
886
|
templateButtons: [
|
|
858
|
-
{ id: 'btn1', text: 'Quick Reply
|
|
859
|
-
{ url: 'https://example.com', text: 'Kunjungi Website
|
|
860
|
-
{ call: '+62812345678', text: 'Hubungi Kami
|
|
887
|
+
{ id: 'btn1', text: 'Quick Reply' },
|
|
888
|
+
{ url: 'https://example.com', text: 'Kunjungi Website' },
|
|
889
|
+
{ call: '+62812345678', text: 'Hubungi Kami' }
|
|
861
890
|
]
|
|
862
891
|
})
|
|
863
892
|
|
|
864
|
-
//
|
|
893
|
+
// Gambar sebagai header
|
|
865
894
|
await sock.sendMessage(jid, {
|
|
866
895
|
image: { url: 'https://example.com/img.jpg' },
|
|
867
|
-
caption: 'Isi pesan
|
|
868
|
-
title: 'Judul
|
|
869
|
-
footer: 'Footer
|
|
896
|
+
caption: 'Isi pesan',
|
|
897
|
+
title: 'Judul',
|
|
898
|
+
footer: 'Footer',
|
|
870
899
|
templateButtons: [
|
|
871
|
-
{ id: 'btn1', text: 'Klik Sini
|
|
872
|
-
{ url: 'https://example.com', text: 'Buka Link
|
|
900
|
+
{ id: 'btn1', text: 'Klik Sini' },
|
|
901
|
+
{ url: 'https://example.com', text: 'Buka Link' }
|
|
873
902
|
]
|
|
874
903
|
})
|
|
875
904
|
```
|
|
@@ -878,45 +907,43 @@ await sock.sendMessage(jid, {
|
|
|
878
907
|
|
|
879
908
|
## 🌊 Native Flow
|
|
880
909
|
|
|
881
|
-
> ✨ Pesan interaktif dengan native flow buttons yang indah — mendukung media header & audio footer~
|
|
882
|
-
|
|
883
910
|
```js
|
|
884
|
-
//
|
|
911
|
+
// Teks dengan native flow buttons
|
|
885
912
|
await sock.sendMessage(jid, {
|
|
886
|
-
text: 'Pilih aksi
|
|
887
|
-
footer: 'Footer pesan
|
|
913
|
+
text: 'Pilih aksi',
|
|
914
|
+
footer: 'Footer pesan',
|
|
888
915
|
nativeFlow: [
|
|
889
|
-
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Opsi 1
|
|
890
|
-
{ name: 'quick_reply', paramsJson: '{"id":"2"}', text: 'Opsi 2
|
|
916
|
+
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Opsi 1' },
|
|
917
|
+
{ name: 'quick_reply', paramsJson: '{"id":"2"}', text: 'Opsi 2' }
|
|
891
918
|
]
|
|
892
919
|
})
|
|
893
920
|
|
|
894
|
-
//
|
|
921
|
+
// Gambar sebagai header
|
|
895
922
|
await sock.sendMessage(jid, {
|
|
896
923
|
image: { url: 'https://example.com/img.jpg' },
|
|
897
|
-
caption: 'Isi pesan
|
|
898
|
-
title: 'Judul
|
|
899
|
-
subtitle: 'Subjudul
|
|
900
|
-
footer: 'Footer
|
|
924
|
+
caption: 'Isi pesan',
|
|
925
|
+
title: 'Judul',
|
|
926
|
+
subtitle: 'Subjudul',
|
|
927
|
+
footer: 'Footer',
|
|
901
928
|
nativeFlow: [
|
|
902
|
-
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol 1
|
|
929
|
+
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol 1' }
|
|
903
930
|
]
|
|
904
931
|
})
|
|
905
932
|
|
|
906
|
-
//
|
|
933
|
+
// Dengan audio footer
|
|
907
934
|
await sock.sendMessage(jid, {
|
|
908
|
-
text: 'Pesan dengan audio footer
|
|
935
|
+
text: 'Pesan dengan audio footer',
|
|
909
936
|
audioFooter: fs.readFileSync('audio.ogg'),
|
|
910
937
|
nativeFlow: [
|
|
911
|
-
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'OK
|
|
938
|
+
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'OK' }
|
|
912
939
|
]
|
|
913
940
|
})
|
|
914
941
|
|
|
915
|
-
//
|
|
942
|
+
// Wrap sebagai templateMessage
|
|
916
943
|
await sock.sendMessage(jid, {
|
|
917
|
-
text: 'Template interaktif
|
|
944
|
+
text: 'Template interaktif',
|
|
918
945
|
nativeFlow: [
|
|
919
|
-
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol
|
|
946
|
+
{ name: 'quick_reply', paramsJson: '{"id":"1"}', text: 'Tombol' }
|
|
920
947
|
],
|
|
921
948
|
interactiveAsTemplate: true,
|
|
922
949
|
id: 'template-id-unik'
|
|
@@ -927,28 +954,26 @@ await sock.sendMessage(jid, {
|
|
|
927
954
|
|
|
928
955
|
## 🎠 Carousel
|
|
929
956
|
|
|
930
|
-
> 🌺 Pesan carousel dengan kartu-kartu yang cantik (image/video/product per kartu)~
|
|
931
|
-
|
|
932
957
|
```js
|
|
933
958
|
await sock.sendMessage(jid, {
|
|
934
|
-
text: 'Carousel utama
|
|
935
|
-
footer: 'Footer utama
|
|
959
|
+
text: 'Carousel utama',
|
|
960
|
+
footer: 'Footer utama',
|
|
936
961
|
cards: [
|
|
937
962
|
{
|
|
938
963
|
image: { url: 'https://example.com/1.jpg' },
|
|
939
|
-
title: 'Kartu 1
|
|
940
|
-
caption: 'Deskripsi kartu 1
|
|
941
|
-
footer: 'Footer kartu 1
|
|
964
|
+
title: 'Kartu 1',
|
|
965
|
+
caption: 'Deskripsi kartu 1',
|
|
966
|
+
footer: 'Footer kartu 1',
|
|
942
967
|
nativeFlow: [
|
|
943
|
-
{ name: 'quick_reply', paramsJson: '{"id":"c1"}', text: 'Pilih Ini
|
|
968
|
+
{ name: 'quick_reply', paramsJson: '{"id":"c1"}', text: 'Pilih Ini' }
|
|
944
969
|
]
|
|
945
970
|
},
|
|
946
971
|
{
|
|
947
972
|
image: { url: 'https://example.com/2.jpg' },
|
|
948
|
-
title: 'Kartu 2
|
|
949
|
-
caption: 'Deskripsi kartu 2
|
|
973
|
+
title: 'Kartu 2',
|
|
974
|
+
caption: 'Deskripsi kartu 2',
|
|
950
975
|
nativeFlow: [
|
|
951
|
-
{ name: 'quick_reply', paramsJson: '{"id":"c2"}', text: 'Pilih Itu
|
|
976
|
+
{ name: 'quick_reply', paramsJson: '{"id":"c2"}', text: 'Pilih Itu' }
|
|
952
977
|
]
|
|
953
978
|
}
|
|
954
979
|
]
|
|
@@ -957,92 +982,700 @@ await sock.sendMessage(jid, {
|
|
|
957
982
|
|
|
958
983
|
---
|
|
959
984
|
|
|
960
|
-
##
|
|
961
|
-
|
|
962
|
-
> 💫 Mention seseorang di status/story dengan mengirim pesan ke array JID — otomatis mengirim `statusMentionMessage` atau `groupStatusMentionMessage` ke JID yang dituju~
|
|
985
|
+
## 🏷️ Status Mention
|
|
963
986
|
|
|
964
987
|
```js
|
|
965
|
-
//
|
|
988
|
+
// Kirim ke array JID untuk trigger status mention
|
|
966
989
|
await sock.sendMessage(['628xxx@s.whatsapp.net', 'yyy@g.us'], {
|
|
967
|
-
text: 'Hei kamu
|
|
990
|
+
text: 'Hei kamu!',
|
|
968
991
|
backgroundColor: '#ff6b9d'
|
|
969
992
|
})
|
|
970
993
|
|
|
971
|
-
//
|
|
994
|
+
// Gambar dengan mention
|
|
972
995
|
await sock.sendMessage(['628xxx@s.whatsapp.net'], {
|
|
973
996
|
image: { url: 'https://example.com/image.jpg' },
|
|
974
|
-
caption: '
|
|
997
|
+
caption: 'Untuk kamu'
|
|
975
998
|
})
|
|
976
999
|
```
|
|
977
1000
|
|
|
978
|
-
>
|
|
1001
|
+
> Untuk grup, otomatis pakai `groupStatusMentionMessage`.
|
|
979
1002
|
|
|
980
1003
|
---
|
|
981
1004
|
|
|
982
|
-
## 🤖 AI
|
|
1005
|
+
## 🤖 Rich Message (AI)
|
|
1006
|
+
|
|
1007
|
+
> Rich message menggunakan format `AIRichResponseMessage` yang tampil seperti respons AI di WhatsApp. Semua tipe di bawah bisa dipakai secara flat (field langsung) atau dikombinasikan via `richResponse: [...]`.
|
|
1008
|
+
|
|
1009
|
+
### ✍️ addText
|
|
983
1010
|
|
|
984
|
-
|
|
1011
|
+
Kirim teks markdown sebagai AI Rich Response. Mendukung hyperlink, citation, dan LaTeX inline.
|
|
985
1012
|
|
|
986
1013
|
```js
|
|
987
|
-
// 💬 Teks dengan AI icon
|
|
988
1014
|
await sock.sendMessage(jid, {
|
|
989
|
-
|
|
990
|
-
|
|
1015
|
+
contentText: 'Ini teks dari AI dengan *markdown* dan **bold**.',
|
|
1016
|
+
headerText: 'Judul',
|
|
1017
|
+
footerText: 'Footer',
|
|
1018
|
+
disclaimerText: 'Generated by AI'
|
|
991
1019
|
})
|
|
1020
|
+
```
|
|
1021
|
+
|
|
1022
|
+
---
|
|
1023
|
+
|
|
1024
|
+
### 💻 addCode
|
|
992
1025
|
|
|
993
|
-
|
|
1026
|
+
Kirim blok kode dengan syntax highlighting.
|
|
1027
|
+
|
|
1028
|
+
```js
|
|
994
1029
|
await sock.sendMessage(jid, {
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1030
|
+
code: 'console.log("Hello World!")',
|
|
1031
|
+
language: 'javascript', // default: 'javascript'
|
|
1032
|
+
headerText: 'Contoh kode:',
|
|
1033
|
+
footerText: 'Semoga membantu',
|
|
1034
|
+
disclaimerText: 'Generated by AI'
|
|
998
1035
|
})
|
|
999
1036
|
```
|
|
1000
1037
|
|
|
1001
|
-
|
|
1038
|
+
**Bahasa yang didukung:**
|
|
1039
|
+
|
|
1040
|
+
| Bahasa | Key |
|
|
1041
|
+
|--------|-----|
|
|
1042
|
+
| JavaScript | `javascript`, `js` |
|
|
1043
|
+
| TypeScript | `typescript`, `ts` |
|
|
1044
|
+
| Python | `python`, `py` |
|
|
1045
|
+
| Go | `go`, `golang` |
|
|
1046
|
+
| C++ | `cpp`, `c++` |
|
|
1047
|
+
| Rust | `rust`, `rs` |
|
|
1048
|
+
| Java | `java` |
|
|
1049
|
+
| PHP | `php` |
|
|
1050
|
+
| Ruby | `ruby`, `rb` |
|
|
1051
|
+
| Kotlin | `kotlin`, `kt` |
|
|
1052
|
+
| Swift | `swift` |
|
|
1053
|
+
| C | `c` |
|
|
1054
|
+
| SQL/MySQL/PostgreSQL | `sql`, `mysql`, `postgresql`, `sqlite` |
|
|
1055
|
+
| Bash/Shell | `bash`, `sh`, `shell` |
|
|
1056
|
+
| HTML | `html` |
|
|
1057
|
+
| CSS | `css` |
|
|
1058
|
+
| JSON | `json` |
|
|
1059
|
+
| YAML | `yaml`, `yml` |
|
|
1002
1060
|
|
|
1003
1061
|
---
|
|
1004
1062
|
|
|
1005
|
-
|
|
1063
|
+
### 📊 addTable
|
|
1006
1064
|
|
|
1007
|
-
|
|
1065
|
+
Kirim tabel dari array 2D. Baris pertama otomatis menjadi header.
|
|
1008
1066
|
|
|
1009
1067
|
```js
|
|
1010
1068
|
await sock.sendMessage(jid, {
|
|
1011
|
-
|
|
1012
|
-
|
|
1069
|
+
table: [
|
|
1070
|
+
['Nama', 'Usia', 'Kota'], // baris pertama = header
|
|
1071
|
+
['Hana', '20', 'Jakarta'],
|
|
1072
|
+
['Risa', '22', 'Bandung'],
|
|
1073
|
+
['Yuki', '21', 'Surabaya']
|
|
1074
|
+
],
|
|
1075
|
+
title: 'Data Anggota',
|
|
1076
|
+
headerText: 'Berikut datanya',
|
|
1077
|
+
footerText: 'Data per Juni 2025'
|
|
1013
1078
|
})
|
|
1014
1079
|
|
|
1015
|
-
//
|
|
1080
|
+
// Tanpa baris header
|
|
1016
1081
|
await sock.sendMessage(jid, {
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1082
|
+
table: [
|
|
1083
|
+
['Item A', 'Rp 10.000'],
|
|
1084
|
+
['Item B', 'Rp 20.000']
|
|
1085
|
+
],
|
|
1086
|
+
noHeading: true,
|
|
1087
|
+
title: 'Daftar Harga'
|
|
1020
1088
|
})
|
|
1021
1089
|
```
|
|
1022
1090
|
|
|
1023
1091
|
---
|
|
1024
1092
|
|
|
1025
|
-
|
|
1093
|
+
### 🖼️ addImage
|
|
1026
1094
|
|
|
1027
|
-
|
|
1095
|
+
Kirim satu atau beberapa gambar sebagai grid image di AI Rich Response.
|
|
1028
1096
|
|
|
1029
1097
|
```js
|
|
1098
|
+
// Satu gambar
|
|
1030
1099
|
await sock.sendMessage(jid, {
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1100
|
+
richImage: 'https://example.com/photo.jpg',
|
|
1101
|
+
headerText: 'Gambar untuk kamu'
|
|
1102
|
+
})
|
|
1103
|
+
|
|
1104
|
+
// Beberapa gambar (grid)
|
|
1105
|
+
await sock.sendMessage(jid, {
|
|
1106
|
+
richImage: [
|
|
1107
|
+
'https://example.com/photo1.jpg',
|
|
1108
|
+
'https://example.com/photo2.jpg',
|
|
1109
|
+
'https://example.com/photo3.jpg'
|
|
1110
|
+
],
|
|
1111
|
+
headerText: 'Koleksi gambar',
|
|
1112
|
+
footerText: 'Semoga suka'
|
|
1113
|
+
})
|
|
1114
|
+
```
|
|
1115
|
+
|
|
1116
|
+
> `image` menerima string URL atau array string URL. Berbeda dengan `gridImage` (format verbose), `image` adalah shorthand yang lebih praktis.
|
|
1117
|
+
|
|
1118
|
+
---
|
|
1119
|
+
|
|
1120
|
+
### 🎬 addVideo
|
|
1121
|
+
|
|
1122
|
+
Kirim satu atau beberapa video di AI Rich Response.
|
|
1123
|
+
|
|
1124
|
+
```js
|
|
1125
|
+
// Satu video
|
|
1126
|
+
await sock.sendMessage(jid, {
|
|
1127
|
+
richVideo: 'https://example.com/video.mp4',
|
|
1128
|
+
headerText: 'Video untuk kamu'
|
|
1129
|
+
})
|
|
1130
|
+
|
|
1131
|
+
// Dengan durasi (format: 'url|durasi_detik')
|
|
1132
|
+
await sock.sendMessage(jid, {
|
|
1133
|
+
richVideo: 'https://example.com/video.mp4|120',
|
|
1134
|
+
headerText: 'Video berdurasi 2 menit'
|
|
1135
|
+
})
|
|
1136
|
+
|
|
1137
|
+
// Beberapa video
|
|
1138
|
+
await sock.sendMessage(jid, {
|
|
1139
|
+
richVideo: [
|
|
1140
|
+
'https://example.com/video1.mp4|60',
|
|
1141
|
+
'https://example.com/video2.mp4|90'
|
|
1142
|
+
],
|
|
1143
|
+
headerText: 'Playlist video'
|
|
1144
|
+
})
|
|
1145
|
+
```
|
|
1146
|
+
|
|
1147
|
+
> Format URL video: `'url'` atau `'url|durasi_detik'`. Durasi dalam satuan detik, default 0.
|
|
1148
|
+
|
|
1149
|
+
---
|
|
1150
|
+
|
|
1151
|
+
### 🔗 addSource
|
|
1152
|
+
|
|
1153
|
+
Kirim daftar sumber referensi/link sebagai search result card.
|
|
1154
|
+
|
|
1155
|
+
```js
|
|
1156
|
+
await sock.sendMessage(jid, {
|
|
1157
|
+
source: [
|
|
1158
|
+
{
|
|
1159
|
+
url: 'https://example.com/artikel',
|
|
1160
|
+
title: 'Judul Artikel',
|
|
1161
|
+
display_name: 'Example.com',
|
|
1162
|
+
subtitle: 'Sumber terpercaya',
|
|
1163
|
+
favicon: 'https://example.com/favicon.ico'
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
url: 'https://docs.example.com/api',
|
|
1167
|
+
title: 'Dokumentasi API',
|
|
1168
|
+
display_name: 'Docs',
|
|
1169
|
+
subtitle: 'Referensi lengkap'
|
|
1170
|
+
}
|
|
1171
|
+
],
|
|
1172
|
+
headerText: 'Sumber referensi'
|
|
1173
|
+
})
|
|
1174
|
+
```
|
|
1175
|
+
|
|
1176
|
+
**Field tiap sumber:**
|
|
1177
|
+
|
|
1178
|
+
| Field | Tipe | Keterangan |
|
|
1179
|
+
|-------|------|------------|
|
|
1180
|
+
| `url` | string | URL tujuan (wajib) |
|
|
1181
|
+
| `title` | string | Judul sumber |
|
|
1182
|
+
| `display_name` | string | Nama tampilan |
|
|
1183
|
+
| `subtitle` | string | Subjudul/deskripsi singkat |
|
|
1184
|
+
| `favicon` | string | URL favicon (opsional) |
|
|
1185
|
+
| `source_type` | string | Default `'THIRD_PARTY'` |
|
|
1186
|
+
|
|
1187
|
+
---
|
|
1188
|
+
|
|
1189
|
+
### 🎥 addReels
|
|
1190
|
+
|
|
1191
|
+
Kirim daftar reel/video carousel (horizontal scroll) seperti hasil rekomendasi konten.
|
|
1192
|
+
|
|
1193
|
+
```js
|
|
1194
|
+
await sock.sendMessage(jid, {
|
|
1195
|
+
reels: [
|
|
1196
|
+
{
|
|
1197
|
+
username: 'creator1',
|
|
1198
|
+
videoUrl: 'https://example.com/reel1.mp4',
|
|
1199
|
+
thumbnailUrl: 'https://example.com/thumb1.jpg',
|
|
1200
|
+
profileIconUrl: 'https://example.com/avatar1.jpg',
|
|
1201
|
+
reels_title: 'Judul Reel 1',
|
|
1202
|
+
likes_count: 1200,
|
|
1203
|
+
view_count: 50000,
|
|
1204
|
+
shares_count: 300,
|
|
1205
|
+
reel_source: 'IG',
|
|
1206
|
+
is_verified: true
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
username: 'creator2',
|
|
1210
|
+
videoUrl: 'https://example.com/reel2.mp4',
|
|
1211
|
+
thumbnailUrl: 'https://example.com/thumb2.jpg',
|
|
1212
|
+
profileIconUrl: 'https://example.com/avatar2.jpg',
|
|
1213
|
+
reels_title: 'Judul Reel 2',
|
|
1214
|
+
likes_count: 800,
|
|
1215
|
+
view_count: 20000,
|
|
1216
|
+
reel_source: 'TT' // TikTok
|
|
1217
|
+
}
|
|
1218
|
+
],
|
|
1219
|
+
headerText: 'Rekomendasi video'
|
|
1220
|
+
})
|
|
1221
|
+
```
|
|
1222
|
+
|
|
1223
|
+
**Field tiap reel:**
|
|
1224
|
+
|
|
1225
|
+
| Field | Tipe | Keterangan |
|
|
1226
|
+
|-------|------|------------|
|
|
1227
|
+
| `username` / `title` | string | Nama kreator |
|
|
1228
|
+
| `videoUrl` / `url` | string | URL video |
|
|
1229
|
+
| `thumbnailUrl` / `thumbnail` | string | URL thumbnail |
|
|
1230
|
+
| `profileIconUrl` / `profile_url` | string | URL foto profil |
|
|
1231
|
+
| `reels_title` | string | Judul reel |
|
|
1232
|
+
| `likes_count` / `like` | number | Jumlah like |
|
|
1233
|
+
| `view_count` / `view` | number | Jumlah views |
|
|
1234
|
+
| `shares_count` / `share` | number | Jumlah share |
|
|
1235
|
+
| `reel_source` / `source` | string | `'IG'`, `'TT'`, dll |
|
|
1236
|
+
| `is_verified` / `verified` | boolean | Akun terverifikasi |
|
|
1237
|
+
|
|
1238
|
+
---
|
|
1239
|
+
|
|
1240
|
+
### 🛍️ addProduct
|
|
1241
|
+
|
|
1242
|
+
Kirim kartu produk (single atau horizontal scroll untuk banyak produk).
|
|
1243
|
+
|
|
1244
|
+
```js
|
|
1245
|
+
// Satu produk (Single layout)
|
|
1246
|
+
await sock.sendMessage(jid, {
|
|
1247
|
+
richProduct: {
|
|
1248
|
+
title: 'Nama Produk',
|
|
1249
|
+
brand: 'Nama Brand',
|
|
1250
|
+
price: 'Rp 150.000',
|
|
1251
|
+
sale_price: 'Rp 120.000',
|
|
1252
|
+
product_url: 'https://toko.example.com/produk',
|
|
1253
|
+
image_url: 'https://example.com/produk.jpg',
|
|
1254
|
+
icon_url: 'https://example.com/icon.jpg'
|
|
1255
|
+
},
|
|
1256
|
+
headerText: 'Rekomendasi produk untukmu'
|
|
1257
|
+
})
|
|
1258
|
+
|
|
1259
|
+
// Beberapa produk (HScroll layout)
|
|
1260
|
+
await sock.sendMessage(jid, {
|
|
1261
|
+
richProduct: [
|
|
1262
|
+
{
|
|
1263
|
+
title: 'Produk A',
|
|
1264
|
+
brand: 'Brand X',
|
|
1265
|
+
price: 'Rp 50.000',
|
|
1266
|
+
product_url: 'https://toko.example.com/a',
|
|
1267
|
+
image_url: 'https://example.com/a.jpg'
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
title: 'Produk B',
|
|
1271
|
+
brand: 'Brand Y',
|
|
1272
|
+
price: 'Rp 75.000',
|
|
1273
|
+
sale_price: 'Rp 60.000',
|
|
1274
|
+
product_url: 'https://toko.example.com/b',
|
|
1275
|
+
image_url: 'https://example.com/b.jpg'
|
|
1276
|
+
}
|
|
1277
|
+
],
|
|
1278
|
+
headerText: 'Produk pilihan hari ini'
|
|
1279
|
+
})
|
|
1280
|
+
```
|
|
1281
|
+
|
|
1282
|
+
**Field tiap produk:**
|
|
1283
|
+
|
|
1284
|
+
| Field | Tipe | Keterangan |
|
|
1285
|
+
|-------|------|------------|
|
|
1286
|
+
| `title` | string | Nama produk |
|
|
1287
|
+
| `brand` | string | Nama brand |
|
|
1288
|
+
| `price` | string | Harga normal (teks bebas, mis. `'Rp 50.000'`) |
|
|
1289
|
+
| `sale_price` / `salePrice` | string | Harga diskon |
|
|
1290
|
+
| `product_url` / `url` | string | Link produk |
|
|
1291
|
+
| `image_url` / `image` | string | URL gambar utama |
|
|
1292
|
+
| `icon_url` / `icon` | string | URL gambar tambahan |
|
|
1293
|
+
|
|
1294
|
+
> Kirim object tunggal → **Single layout**. Kirim array → **HScroll layout**.
|
|
1295
|
+
|
|
1296
|
+
---
|
|
1297
|
+
|
|
1298
|
+
### 📝 addPost
|
|
1299
|
+
|
|
1300
|
+
Kirim kartu post sosial media (Instagram, TikTok, dll) dalam horizontal scroll.
|
|
1301
|
+
|
|
1302
|
+
```js
|
|
1303
|
+
// Satu post
|
|
1304
|
+
await sock.sendMessage(jid, {
|
|
1305
|
+
richPost: {
|
|
1306
|
+
title: 'Judul Post',
|
|
1307
|
+
subtitle: 'Subjudul',
|
|
1308
|
+
username: 'namauser',
|
|
1309
|
+
profile_picture_url: 'https://example.com/avatar.jpg',
|
|
1310
|
+
is_verified: true,
|
|
1311
|
+
thumbnail_url: 'https://example.com/thumb.jpg',
|
|
1312
|
+
post_caption: 'Caption post ini',
|
|
1313
|
+
likes_count: 5000,
|
|
1314
|
+
comments_count: 200,
|
|
1315
|
+
shares_count: 100,
|
|
1316
|
+
post_url: 'https://instagram.com/p/xxx',
|
|
1317
|
+
post_deeplink: 'instagram://post/xxx',
|
|
1318
|
+
source_app: 'INSTAGRAM',
|
|
1319
|
+
footer_label: 'Lihat di Instagram',
|
|
1320
|
+
orientation: 'LANDSCAPE', // 'LANDSCAPE' | 'PORTRAIT'
|
|
1321
|
+
post_type: 'VIDEO' // 'VIDEO' | 'IMAGE'
|
|
1322
|
+
},
|
|
1323
|
+
headerText: 'Post terpopuler'
|
|
1324
|
+
})
|
|
1325
|
+
|
|
1326
|
+
// Beberapa post (carousel horizontal)
|
|
1327
|
+
await sock.sendMessage(jid, {
|
|
1328
|
+
richPost: [
|
|
1329
|
+
{
|
|
1330
|
+
username: 'user1',
|
|
1331
|
+
thumbnail_url: 'https://example.com/thumb1.jpg',
|
|
1332
|
+
post_caption: 'Caption post pertama',
|
|
1333
|
+
likes_count: 3000,
|
|
1334
|
+
post_url: 'https://instagram.com/p/aaa',
|
|
1335
|
+
source_app: 'INSTAGRAM'
|
|
1336
|
+
},
|
|
1337
|
+
{
|
|
1338
|
+
username: 'user2',
|
|
1339
|
+
thumbnail_url: 'https://example.com/thumb2.jpg',
|
|
1340
|
+
post_caption: 'Caption post kedua',
|
|
1341
|
+
likes_count: 1500,
|
|
1342
|
+
post_url: 'https://tiktok.com/@user2/video/yyy',
|
|
1343
|
+
source_app: 'TIKTOK'
|
|
1344
|
+
}
|
|
1345
|
+
],
|
|
1346
|
+
headerText: 'Post trending hari ini'
|
|
1347
|
+
})
|
|
1348
|
+
```
|
|
1349
|
+
|
|
1350
|
+
**Field tiap post:**
|
|
1351
|
+
|
|
1352
|
+
| Field | Tipe | Keterangan |
|
|
1353
|
+
|-------|------|------------|
|
|
1354
|
+
| `title` | string | Judul post |
|
|
1355
|
+
| `subtitle` | string | Subjudul |
|
|
1356
|
+
| `username` | string | Nama pengguna |
|
|
1357
|
+
| `profile_picture_url` / `profile_url` | string | URL foto profil |
|
|
1358
|
+
| `is_verified` / `verified` | boolean | Akun terverifikasi |
|
|
1359
|
+
| `thumbnail_url` / `thumbnail` | string | URL thumbnail post |
|
|
1360
|
+
| `post_caption` / `caption` | string | Caption/teks post |
|
|
1361
|
+
| `likes_count` / `like` | number | Jumlah like |
|
|
1362
|
+
| `comments_count` / `comment` | number | Jumlah komentar |
|
|
1363
|
+
| `shares_count` / `share` | number | Jumlah share |
|
|
1364
|
+
| `post_url` / `url` | string | URL post |
|
|
1365
|
+
| `post_deeplink` / `deeplink` | string | Deeplink aplikasi |
|
|
1366
|
+
| `source_app` / `source` | string | `'INSTAGRAM'`, `'TIKTOK'`, dll |
|
|
1367
|
+
| `footer_label` / `footer` | string | Teks footer |
|
|
1368
|
+
| `footer_icon` / `icon` | string | URL ikon footer |
|
|
1369
|
+
| `orientation` | string | `'LANDSCAPE'` atau `'PORTRAIT'` |
|
|
1370
|
+
| `post_type` | string | `'VIDEO'` atau `'IMAGE'` |
|
|
1371
|
+
|
|
1372
|
+
---
|
|
1373
|
+
|
|
1374
|
+
### 💡 addTip
|
|
1375
|
+
|
|
1376
|
+
Kirim teks pendek sebagai metadata/tip (tampil lebih kecil dan subtle).
|
|
1377
|
+
|
|
1378
|
+
```js
|
|
1379
|
+
await sock.sendMessage(jid, {
|
|
1380
|
+
tip: 'Informasi ini dibuat oleh AI berdasarkan data terbaru.',
|
|
1381
|
+
headerText: 'Ringkasan'
|
|
1382
|
+
})
|
|
1383
|
+
|
|
1384
|
+
// Dikombinasikan dengan tipe lain
|
|
1385
|
+
await sock.sendMessage(jid, {
|
|
1386
|
+
contentText: 'Berikut jawabannya...',
|
|
1387
|
+
tip: 'Jawaban mungkin tidak selalu akurat. Verifikasi mandiri disarankan.'
|
|
1388
|
+
})
|
|
1389
|
+
```
|
|
1390
|
+
|
|
1391
|
+
---
|
|
1392
|
+
|
|
1393
|
+
### 🔮 addSuggest
|
|
1394
|
+
|
|
1395
|
+
Kirim saran prompt follow-up sebagai pill buttons yang bisa langsung diklik user.
|
|
1396
|
+
|
|
1397
|
+
```js
|
|
1398
|
+
// Satu saran
|
|
1399
|
+
await sock.sendMessage(jid, {
|
|
1400
|
+
contentText: 'Begitulah penjelasannya.',
|
|
1401
|
+
suggest: 'Jelaskan lebih detail'
|
|
1402
|
+
})
|
|
1403
|
+
|
|
1404
|
+
// Beberapa saran
|
|
1405
|
+
await sock.sendMessage(jid, {
|
|
1406
|
+
contentText: 'Apakah ada yang ingin kamu tanyakan?',
|
|
1407
|
+
suggest: [
|
|
1408
|
+
'Contoh kodenya?',
|
|
1409
|
+
'Apa perbedaannya?',
|
|
1410
|
+
'Kapan sebaiknya digunakan?',
|
|
1411
|
+
'Ada alternatif lain?'
|
|
1412
|
+
]
|
|
1413
|
+
})
|
|
1414
|
+
```
|
|
1415
|
+
|
|
1416
|
+
> Saran tampil sebagai pill button di bawah pesan. Saat user mengetuk salah satu, teks saran tersebut akan terkirim sebagai pesan baru.
|
|
1417
|
+
|
|
1418
|
+
---
|
|
1419
|
+
|
|
1420
|
+
### 🖼️ Grid Image (Rich)
|
|
1421
|
+
|
|
1422
|
+
Kirim grid gambar dengan format verbose (object URL lengkap).
|
|
1423
|
+
|
|
1424
|
+
> Untuk pemakaian praktis, gunakan shorthand [`image`](#addimage).
|
|
1425
|
+
|
|
1426
|
+
```js
|
|
1427
|
+
// Object URL lengkap (recommended untuk kontrol penuh)
|
|
1428
|
+
await sock.sendMessage(jid, {
|
|
1429
|
+
gridImage: {
|
|
1430
|
+
gridImageUrl: {
|
|
1431
|
+
imagePreviewUrl: 'https://picsum.photos/id/10/300/300',
|
|
1432
|
+
imageHighResUrl: 'https://picsum.photos/id/10/1200/1200',
|
|
1433
|
+
sourceUrl: 'https://picsum.photos'
|
|
1434
|
+
},
|
|
1435
|
+
imageUrls: [
|
|
1436
|
+
{
|
|
1437
|
+
imagePreviewUrl: 'https://picsum.photos/id/11/300/300',
|
|
1438
|
+
imageHighResUrl: 'https://picsum.photos/id/11/1200/1200',
|
|
1439
|
+
sourceUrl: 'https://picsum.photos'
|
|
1440
|
+
}
|
|
1441
|
+
]
|
|
1442
|
+
},
|
|
1443
|
+
headerText: 'Hasil pencarian gambar'
|
|
1444
|
+
})
|
|
1445
|
+
|
|
1446
|
+
// String URL (shorthand)
|
|
1447
|
+
await sock.sendMessage(jid, {
|
|
1448
|
+
gridImage: {
|
|
1449
|
+
gridImageUrl: 'https://picsum.photos/id/10/300/300',
|
|
1450
|
+
imageUrls: ['https://picsum.photos/id/11/300/300']
|
|
1451
|
+
},
|
|
1452
|
+
headerText: 'Hasil pencarian gambar'
|
|
1453
|
+
})
|
|
1454
|
+
```
|
|
1455
|
+
|
|
1456
|
+
---
|
|
1457
|
+
|
|
1458
|
+
### 📸 Inline Image (Rich)
|
|
1459
|
+
|
|
1460
|
+
Kirim gambar yang muncul inline di dalam teks.
|
|
1461
|
+
|
|
1462
|
+
```js
|
|
1463
|
+
await sock.sendMessage(jid, {
|
|
1464
|
+
inlineImage: {
|
|
1465
|
+
imageUrl: 'https://picsum.photos/id/237/300/300',
|
|
1466
|
+
imageText: 'Ilustrasi gambar',
|
|
1467
|
+
alignment: 2, // 0 = leading, 1 = trailing, 2 = center
|
|
1468
|
+
tapLinkUrl: 'https://picsum.photos'
|
|
1469
|
+
},
|
|
1470
|
+
headerText: 'Berikut ilustrasinya',
|
|
1471
|
+
footerText: 'Tap gambar untuk detail'
|
|
1472
|
+
})
|
|
1473
|
+
```
|
|
1474
|
+
|
|
1475
|
+
---
|
|
1476
|
+
|
|
1477
|
+
### 🎞️ Dynamic / GIF (Rich)
|
|
1478
|
+
|
|
1479
|
+
Kirim animasi atau GIF.
|
|
1480
|
+
|
|
1481
|
+
```js
|
|
1482
|
+
await sock.sendMessage(jid, {
|
|
1483
|
+
dynamic: {
|
|
1484
|
+
url: 'https://example.com/animation.gif',
|
|
1485
|
+
type: 2, // 1 = IMAGE, 2 = GIF
|
|
1486
|
+
version: 1,
|
|
1487
|
+
loopCount: 0 // 0 = loop selamanya
|
|
1488
|
+
},
|
|
1489
|
+
headerText: 'Animasi untuk kamu'
|
|
1036
1490
|
})
|
|
1037
1491
|
```
|
|
1038
1492
|
|
|
1039
|
-
|
|
1493
|
+
---
|
|
1494
|
+
|
|
1495
|
+
### 🗺️ Map (Rich)
|
|
1496
|
+
|
|
1497
|
+
Kirim peta interaktif dengan anotasi lokasi.
|
|
1498
|
+
|
|
1499
|
+
```js
|
|
1500
|
+
// Satu lokasi
|
|
1501
|
+
await sock.sendMessage(jid, {
|
|
1502
|
+
map: {
|
|
1503
|
+
centerLatitude: -6.2088,
|
|
1504
|
+
centerLongitude: 106.8456,
|
|
1505
|
+
latitudeDelta: 0.05,
|
|
1506
|
+
longitudeDelta: 0.05,
|
|
1507
|
+
showInfoList: true,
|
|
1508
|
+
annotations: [
|
|
1509
|
+
{
|
|
1510
|
+
number: 1,
|
|
1511
|
+
latitude: -6.2088,
|
|
1512
|
+
longitude: 106.8456,
|
|
1513
|
+
title: 'Jakarta Pusat',
|
|
1514
|
+
body: 'Ibu kota Indonesia'
|
|
1515
|
+
}
|
|
1516
|
+
]
|
|
1517
|
+
},
|
|
1518
|
+
headerText: 'Lokasi yang kamu cari'
|
|
1519
|
+
})
|
|
1520
|
+
|
|
1521
|
+
// Multi-lokasi
|
|
1522
|
+
await sock.sendMessage(jid, {
|
|
1523
|
+
map: {
|
|
1524
|
+
centerLatitude: -7.2575,
|
|
1525
|
+
centerLongitude: 112.7521,
|
|
1526
|
+
latitudeDelta: 0.1,
|
|
1527
|
+
longitudeDelta: 0.1,
|
|
1528
|
+
showInfoList: true,
|
|
1529
|
+
annotations: [
|
|
1530
|
+
{ number: 1, latitude: -7.2575, longitude: 112.7521, title: 'Surabaya', body: 'Kota Pahlawan' },
|
|
1531
|
+
{ number: 2, latitude: -7.9797, longitude: 112.6304, title: 'Malang', body: 'Kota Bunga' }
|
|
1532
|
+
]
|
|
1533
|
+
},
|
|
1534
|
+
headerText: 'Kota-kota di Jawa Timur'
|
|
1535
|
+
})
|
|
1536
|
+
```
|
|
1040
1537
|
|
|
1041
1538
|
---
|
|
1042
1539
|
|
|
1043
|
-
|
|
1540
|
+
### 🧮 LaTeX (Rich)
|
|
1541
|
+
|
|
1542
|
+
Kirim rumus matematika dalam format LaTeX.
|
|
1044
1543
|
|
|
1045
|
-
>
|
|
1544
|
+
> `url` di setiap expression akan **otomatis di-generate** dari [latex.codecogs.com](https://latex.codecogs.com) jika tidak diisi.
|
|
1545
|
+
|
|
1546
|
+
```js
|
|
1547
|
+
// Satu rumus
|
|
1548
|
+
await sock.sendMessage(jid, {
|
|
1549
|
+
latex: {
|
|
1550
|
+
text: 'Berikut rumus yang kamu minta:',
|
|
1551
|
+
expressions: [
|
|
1552
|
+
{ expression: 'E = mc^2', width: 120, height: 40 }
|
|
1553
|
+
]
|
|
1554
|
+
},
|
|
1555
|
+
headerText: 'Rumus Einstein',
|
|
1556
|
+
footerText: 'E = energi, m = massa, c = kecepatan cahaya'
|
|
1557
|
+
})
|
|
1558
|
+
|
|
1559
|
+
// Beberapa rumus
|
|
1560
|
+
await sock.sendMessage(jid, {
|
|
1561
|
+
latex: {
|
|
1562
|
+
text: 'Rumus-rumus fisika dasar:',
|
|
1563
|
+
expressions: [
|
|
1564
|
+
{ expression: 'F = ma', width: 80, height: 35 },
|
|
1565
|
+
{ expression: 'v = u + at', width: 100, height: 35 },
|
|
1566
|
+
{ expression: 's = ut + \\frac{1}{2}at^2', width: 160, height: 50 }
|
|
1567
|
+
]
|
|
1568
|
+
},
|
|
1569
|
+
headerText: 'Hukum Newton',
|
|
1570
|
+
disclaimerText: 'Fisika dasar kelas 10'
|
|
1571
|
+
})
|
|
1572
|
+
```
|
|
1573
|
+
|
|
1574
|
+
|
|
1575
|
+
|
|
1576
|
+
---
|
|
1577
|
+
|
|
1578
|
+
### 🧮 generateLatexContent / sendLatex (Standalone)
|
|
1579
|
+
|
|
1580
|
+
Fungsi standalone kompatibel dengan upstream baileys. Bisa dipanggil langsung dari socket:
|
|
1581
|
+
|
|
1582
|
+
```js
|
|
1583
|
+
const { generateLatexContent, generateLatexImageContent, generateLatexInlineImageContent } = require('@nuiisweety/baileys')
|
|
1584
|
+
|
|
1585
|
+
// sendLatex — URL auto-generate via codecogs jika tidak diisi
|
|
1586
|
+
await sock.sendLatex(jid, m, {
|
|
1587
|
+
text: 'Rumus Pythagoras:',
|
|
1588
|
+
expressions: [
|
|
1589
|
+
{ latexExpression: 'a^2 + b^2 = c^2', width: 150, height: 45 }
|
|
1590
|
+
],
|
|
1591
|
+
headerText: 'Matematika',
|
|
1592
|
+
footer: 'Semoga paham!'
|
|
1593
|
+
})
|
|
1594
|
+
|
|
1595
|
+
// sendLatexImage — render ke PNG dulu, lalu upload
|
|
1596
|
+
await sock.sendLatexImage(jid, m, {
|
|
1597
|
+
expressions: [{ latexExpression: 'E = mc^2' }]
|
|
1598
|
+
}, renderLatexToPng, sock.waUploadToServer)
|
|
1599
|
+
|
|
1600
|
+
// sendLatexInlineImage — render ke PNG, kirim sebagai InlineImage per expression
|
|
1601
|
+
await sock.sendLatexInlineImage(jid, m, {
|
|
1602
|
+
expressions: [{ latexExpression: '\\int_0^\\infty e^{-x} dx = 1' }]
|
|
1603
|
+
}, renderLatexToPng, sock.waUploadToServer)
|
|
1604
|
+
```
|
|
1605
|
+
|
|
1606
|
+
### 📊 sendTable / sendTableV2 / sendList (Standalone)
|
|
1607
|
+
|
|
1608
|
+
```js
|
|
1609
|
+
// sendTable — format V1
|
|
1610
|
+
await sock.sendTable(jid, 'Data Kota', ['Kota', 'Populasi'], [['Jakarta', '10jt'], ['Surabaya', '3jt']], m)
|
|
1611
|
+
|
|
1612
|
+
// sendList
|
|
1613
|
+
await sock.sendList(jid, 'Daftar Belanja', ['Apel', 'Jeruk', 'Mangga'], m)
|
|
1614
|
+
```
|
|
1615
|
+
|
|
1616
|
+
### 💻 sendCodeBlock / sendCodeBlockV2 (Standalone)
|
|
1617
|
+
|
|
1618
|
+
```js
|
|
1619
|
+
await sock.sendCodeBlock(jid, 'console.log("Hello")', m, { language: 'javascript', title: 'Contoh JS' })
|
|
1620
|
+
```
|
|
1621
|
+
|
|
1622
|
+
### 🔗 sendLink / sendLinkV2 (Standalone)
|
|
1623
|
+
|
|
1624
|
+
```js
|
|
1625
|
+
await sock.sendLink(jid, 'Kunjungi dokumentasi ini', [{ url: 'https://docs.example.com', displayName: 'Docs' }], m)
|
|
1626
|
+
```
|
|
1627
|
+
|
|
1628
|
+
### 🎁 sendRichMessage / sendUnifiedResponse / captureUnifiedResponse (Standalone)
|
|
1629
|
+
|
|
1630
|
+
```js
|
|
1631
|
+
// Kirim array submessage mentah
|
|
1632
|
+
await sock.sendRichMessage(jid, [
|
|
1633
|
+
{ messageType: 2, messageText: 'Teks pertama' },
|
|
1634
|
+
{ messageType: 2, messageText: 'Teks kedua' }
|
|
1635
|
+
], m)
|
|
1636
|
+
|
|
1637
|
+
// Capture dan forward unified response
|
|
1638
|
+
const captured = sock.captureUnifiedResponse(existingMsg.message)
|
|
1639
|
+
if (captured) await sock.sendUnifiedResponse(jid, m, captured)
|
|
1640
|
+
```
|
|
1641
|
+
---
|
|
1642
|
+
|
|
1643
|
+
### 📦 Content Items (Rich)
|
|
1644
|
+
|
|
1645
|
+
Kirim carousel konten (reel/video) dengan format verbose.
|
|
1646
|
+
|
|
1647
|
+
> Untuk pemakaian praktis, gunakan shorthand [`reels`](#addreels).
|
|
1648
|
+
|
|
1649
|
+
```js
|
|
1650
|
+
await sock.sendMessage(jid, {
|
|
1651
|
+
contentItems: {
|
|
1652
|
+
contentType: 1, // 0 = DEFAULT, 1 = CAROUSEL
|
|
1653
|
+
items: [
|
|
1654
|
+
{
|
|
1655
|
+
kind: 'reel',
|
|
1656
|
+
title: 'Tutorial Coding JavaScript',
|
|
1657
|
+
profileIconUrl: 'https://example.com/avatar1.jpg',
|
|
1658
|
+
thumbnailUrl: 'https://example.com/thumb1.jpg',
|
|
1659
|
+
videoUrl: 'https://example.com/video1.mp4'
|
|
1660
|
+
},
|
|
1661
|
+
{
|
|
1662
|
+
kind: 'reel',
|
|
1663
|
+
title: 'Belajar React Hooks',
|
|
1664
|
+
profileIconUrl: 'https://example.com/avatar2.jpg',
|
|
1665
|
+
thumbnailUrl: 'https://example.com/thumb2.jpg',
|
|
1666
|
+
videoUrl: 'https://example.com/video2.mp4'
|
|
1667
|
+
}
|
|
1668
|
+
]
|
|
1669
|
+
},
|
|
1670
|
+
headerText: 'Rekomendasi video'
|
|
1671
|
+
})
|
|
1672
|
+
```
|
|
1673
|
+
|
|
1674
|
+
---
|
|
1675
|
+
|
|
1676
|
+
### 🔗 Links (Rich)
|
|
1677
|
+
|
|
1678
|
+
Kirim teks dengan inline citation/reference link.
|
|
1046
1679
|
|
|
1047
1680
|
```js
|
|
1048
1681
|
await sock.sendMessage(jid, {
|
|
@@ -1054,84 +1687,125 @@ await sock.sendMessage(jid, {
|
|
|
1054
1687
|
url: 'https://example.com/docs',
|
|
1055
1688
|
sources: [
|
|
1056
1689
|
{
|
|
1057
|
-
displayName: 'Source 1
|
|
1690
|
+
displayName: 'Source 1',
|
|
1058
1691
|
subtitle: 'Sumber terpercaya',
|
|
1059
1692
|
url: 'https://example.com/source'
|
|
1060
1693
|
}
|
|
1061
1694
|
]
|
|
1062
1695
|
}
|
|
1063
1696
|
],
|
|
1064
|
-
headerText: 'Referensi
|
|
1065
|
-
footerText: 'Semoga berguna
|
|
1697
|
+
headerText: 'Referensi',
|
|
1698
|
+
footerText: 'Semoga berguna'
|
|
1066
1699
|
})
|
|
1067
1700
|
```
|
|
1068
1701
|
|
|
1069
1702
|
---
|
|
1070
1703
|
|
|
1071
|
-
|
|
1704
|
+
### 🎁 Rich Response (Gabungan)
|
|
1072
1705
|
|
|
1073
|
-
|
|
1706
|
+
Kirim kombinasi berbagai tipe Rich Message dalam satu pesan menggunakan mode array.
|
|
1074
1707
|
|
|
1075
1708
|
```js
|
|
1709
|
+
// Kombinasi teks + kode + tabel
|
|
1076
1710
|
await sock.sendMessage(jid, {
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1711
|
+
richResponse: [
|
|
1712
|
+
{ text: 'Penjelasan singkat:' },
|
|
1713
|
+
{ code: 'const x = 1 + 1', language: 'javascript' },
|
|
1714
|
+
{
|
|
1715
|
+
table: [['Kolom A', 'Kolom B'], ['Nilai 1', 'Nilai 2']],
|
|
1716
|
+
title: 'Hasil'
|
|
1717
|
+
},
|
|
1718
|
+
{ text: 'Semoga membantu ya!' }
|
|
1082
1719
|
],
|
|
1083
|
-
|
|
1084
|
-
headerText: 'Berikut datanya~ 💖',
|
|
1085
|
-
footerText: 'Data per Juni 2025 🍃'
|
|
1720
|
+
disclaimerText: 'Generated by AI'
|
|
1086
1721
|
})
|
|
1087
1722
|
|
|
1088
|
-
//
|
|
1723
|
+
// Kombinasi dengan semua tipe baru
|
|
1089
1724
|
await sock.sendMessage(jid, {
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
['
|
|
1725
|
+
richResponse: [
|
|
1726
|
+
{ text: 'Berikut hasilnya:' },
|
|
1727
|
+
{ richImage: ['https://example.com/img1.jpg', 'https://example.com/img2.jpg'] },
|
|
1728
|
+
{ source: [{ url: 'https://example.com', title: 'Sumber Data' }] },
|
|
1729
|
+
{ code: 'print("Hello")', language: 'python' },
|
|
1730
|
+
{
|
|
1731
|
+
product: [
|
|
1732
|
+
{ title: 'Produk A', price: 'Rp 50.000', image_url: 'https://example.com/a.jpg', product_url: 'https://example.com/a' },
|
|
1733
|
+
{ title: 'Produk B', price: 'Rp 75.000', image_url: 'https://example.com/b.jpg', product_url: 'https://example.com/b' }
|
|
1734
|
+
]
|
|
1735
|
+
},
|
|
1736
|
+
{
|
|
1737
|
+
post: [
|
|
1738
|
+
{ username: 'user1', thumbnail_url: 'https://example.com/t1.jpg', post_url: 'https://ig.com/p/aaa', source_app: 'INSTAGRAM', likes_count: 1000 }
|
|
1739
|
+
]
|
|
1740
|
+
},
|
|
1741
|
+
{ tip: 'Informasi ini dihasilkan secara otomatis.' },
|
|
1742
|
+
{ suggest: ['Tanya lebih lanjut', 'Lihat contoh lain', 'Mulai dari awal'] }
|
|
1093
1743
|
],
|
|
1094
|
-
|
|
1095
|
-
title: 'Daftar Harga 🌺'
|
|
1744
|
+
disclaimerText: 'Powered by AI'
|
|
1096
1745
|
})
|
|
1097
1746
|
```
|
|
1098
1747
|
|
|
1099
1748
|
---
|
|
1100
1749
|
|
|
1101
|
-
##
|
|
1102
|
-
|
|
1103
|
-
> 💞 Kirim gabungan teks, kode, dan tabel dalam satu pesan AI Rich Response~
|
|
1750
|
+
## 📥 Terima & Decode Rich Message
|
|
1104
1751
|
|
|
1105
1752
|
```js
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1753
|
+
const { normalizeMessageContent, parseRichMessage } = require('@nuiisweety/baileys')
|
|
1754
|
+
|
|
1755
|
+
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
1756
|
+
for (const msg of messages) {
|
|
1757
|
+
const inner = normalizeMessageContent(msg.message)
|
|
1758
|
+
const parsed = parseRichMessage(inner?.richResponseMessage)
|
|
1759
|
+
|
|
1760
|
+
if (!parsed) continue
|
|
1761
|
+
|
|
1762
|
+
for (const sub of parsed.submessages) {
|
|
1763
|
+
switch (sub.type) {
|
|
1764
|
+
case 'text':
|
|
1765
|
+
console.log('Teks:', sub.text)
|
|
1766
|
+
break
|
|
1767
|
+
case 'code':
|
|
1768
|
+
console.log('Kode (' + sub.language + '):', sub.raw)
|
|
1769
|
+
break
|
|
1770
|
+
case 'table':
|
|
1771
|
+
console.log('Tabel:', sub.title, sub.rows)
|
|
1772
|
+
break
|
|
1773
|
+
case 'gridImage':
|
|
1774
|
+
console.log('Grid Image:', sub.gridImageUrl, sub.imageUrls)
|
|
1775
|
+
break
|
|
1776
|
+
case 'inlineImage':
|
|
1777
|
+
console.log('Inline Image:', sub.imageUrl, sub.imageText)
|
|
1778
|
+
break
|
|
1779
|
+
case 'dynamic':
|
|
1780
|
+
console.log('Dynamic:', sub.url, sub.dynamicType === 2 ? 'GIF' : 'Image')
|
|
1781
|
+
break
|
|
1782
|
+
case 'map':
|
|
1783
|
+
console.log('Map:', sub.centerLatitude, sub.centerLongitude)
|
|
1784
|
+
break
|
|
1785
|
+
case 'latex':
|
|
1786
|
+
console.log('LaTeX:', sub.text, sub.expressions)
|
|
1787
|
+
break
|
|
1788
|
+
case 'contentItems':
|
|
1789
|
+
console.log('Content Items:', sub.contentType, sub.items)
|
|
1790
|
+
break
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1120
1794
|
})
|
|
1121
1795
|
```
|
|
1122
1796
|
|
|
1123
|
-
|
|
1797
|
+
> `parseRichMessage` menerima `null` atau `undefined` dengan aman — return `null` jika tidak ada rich message.
|
|
1124
1798
|
|
|
1125
|
-
|
|
1799
|
+
---
|
|
1126
1800
|
|
|
1127
|
-
|
|
1801
|
+
## 📃 List Reply
|
|
1128
1802
|
|
|
1129
1803
|
```js
|
|
1130
1804
|
await sock.sendMessage(jid, {
|
|
1131
1805
|
listReply: {
|
|
1132
|
-
title: 'Pilihan Saya
|
|
1806
|
+
title: 'Pilihan Saya',
|
|
1133
1807
|
description: 'Deskripsi pilihan',
|
|
1134
|
-
id: 'row1'
|
|
1808
|
+
id: 'row1' // selectedRowId dari baris yang dipilih
|
|
1135
1809
|
}
|
|
1136
1810
|
})
|
|
1137
1811
|
```
|
|
@@ -1140,14 +1814,12 @@ await sock.sendMessage(jid, {
|
|
|
1140
1814
|
|
|
1141
1815
|
## 🎴 Sticker Pack
|
|
1142
1816
|
|
|
1143
|
-
> ✨ Kirim paket sticker kustom — membutuhkan cover dan minimal 1 sticker~
|
|
1144
|
-
|
|
1145
1817
|
```js
|
|
1146
1818
|
await sock.sendMessage(jid, {
|
|
1147
|
-
cover: fs.readFileSync('cover.webp'),
|
|
1148
|
-
name: 'Pack Manis
|
|
1149
|
-
publisher: 'NuiiS4TORU
|
|
1150
|
-
description: 'Sticker pack cantik
|
|
1819
|
+
cover: fs.readFileSync('cover.webp'), // wajib
|
|
1820
|
+
name: 'Pack Manis',
|
|
1821
|
+
publisher: 'NuiiS4TORU',
|
|
1822
|
+
description: 'Sticker pack cantik',
|
|
1151
1823
|
stickers: [
|
|
1152
1824
|
{
|
|
1153
1825
|
data: fs.readFileSync('sticker1.webp'),
|
|
@@ -1158,106 +1830,80 @@ await sock.sendMessage(jid, {
|
|
|
1158
1830
|
data: { url: 'https://example.com/sticker2.webp' },
|
|
1159
1831
|
emojis: ['🌷']
|
|
1160
1832
|
}
|
|
1161
|
-
//
|
|
1833
|
+
// maksimal 60 sticker
|
|
1162
1834
|
]
|
|
1163
1835
|
})
|
|
1164
1836
|
```
|
|
1165
1837
|
|
|
1166
|
-
> 🍀 Butuh library `sharp` atau `@napi-rs/image` untuk konversi WebP. Setiap sticker maks 1MB~
|
|
1167
|
-
|
|
1168
1838
|
---
|
|
1169
1839
|
|
|
1170
1840
|
## 📢 External Ad Reply
|
|
1171
1841
|
|
|
1172
|
-
> 💌 Tambahkan tampilan iklan eksternal sebagai context info pada pesan~
|
|
1173
|
-
|
|
1174
1842
|
```js
|
|
1175
|
-
// 💬 Teks dengan external ad reply
|
|
1176
1843
|
await sock.sendMessage(jid, {
|
|
1177
|
-
text: 'Cek produk ini
|
|
1844
|
+
text: 'Cek produk ini',
|
|
1178
1845
|
externalAdReply: {
|
|
1179
|
-
title: 'Judul Iklan
|
|
1180
|
-
body: 'Deskripsi iklan
|
|
1181
|
-
thumbnail: fs.readFileSync('thumbnail.jpg'),
|
|
1846
|
+
title: 'Judul Iklan',
|
|
1847
|
+
body: 'Deskripsi iklan',
|
|
1848
|
+
thumbnail: fs.readFileSync('thumbnail.jpg'), // harus Buffer
|
|
1182
1849
|
url: 'https://example.com/produk',
|
|
1183
|
-
mediaType: 1,
|
|
1850
|
+
mediaType: 1, // 1 = image
|
|
1184
1851
|
largeThumbnail: false
|
|
1185
1852
|
}
|
|
1186
1853
|
})
|
|
1187
|
-
|
|
1188
|
-
// 🖼️ Gambar dengan external ad reply
|
|
1189
|
-
await sock.sendMessage(jid, {
|
|
1190
|
-
image: { url: 'https://example.com/banner.jpg' },
|
|
1191
|
-
caption: 'Penawaran spesial 💖',
|
|
1192
|
-
externalAdReply: {
|
|
1193
|
-
title: 'Promo Hari Ini 🌸',
|
|
1194
|
-
url: 'https://example.com/promo',
|
|
1195
|
-
thumbnail: fs.readFileSync('thumb.jpg'),
|
|
1196
|
-
mediaType: 1
|
|
1197
|
-
}
|
|
1198
|
-
})
|
|
1199
1854
|
```
|
|
1200
1855
|
|
|
1201
1856
|
---
|
|
1202
1857
|
|
|
1203
|
-
##
|
|
1204
|
-
|
|
1205
|
-
> 🌷 Minta pembayaran dari seseorang — hanya untuk chat privat~
|
|
1858
|
+
## 💳 Request Payment
|
|
1206
1859
|
|
|
1207
1860
|
```js
|
|
1208
|
-
// 💬 Dengan teks sebagai note
|
|
1209
1861
|
await sock.sendMessage(jid, {
|
|
1210
|
-
text: 'Tolong transfer ya
|
|
1862
|
+
text: 'Tolong transfer ya',
|
|
1211
1863
|
requestPaymentFrom: '628xxx@s.whatsapp.net',
|
|
1212
|
-
amount1000: 50000000, //
|
|
1864
|
+
amount1000: 50000000, // Rp 50.000 (unit 1/1000)
|
|
1213
1865
|
currencyCodeIso4217: 'IDR',
|
|
1214
|
-
expiryTimestamp: Date.now() + 86400000
|
|
1866
|
+
expiryTimestamp: Date.now() + 86400000 // kadaluarsa 1 hari
|
|
1215
1867
|
})
|
|
1216
1868
|
```
|
|
1217
1869
|
|
|
1218
|
-
> 🍀 Note message harus berupa `extendedTextMessage` (teks) atau `stickerMessage`~
|
|
1219
|
-
|
|
1220
1870
|
---
|
|
1221
1871
|
|
|
1222
1872
|
## 🧾 Invoice
|
|
1223
1873
|
|
|
1224
|
-
> ✨ Kirim invoice dengan attachment gambar atau dokumen PDF~
|
|
1225
|
-
|
|
1226
1874
|
```js
|
|
1227
|
-
//
|
|
1875
|
+
// Dengan gambar
|
|
1228
1876
|
await sock.sendMessage(jid, {
|
|
1229
1877
|
image: fs.readFileSync('invoice.jpg'),
|
|
1230
|
-
invoiceNote: 'Invoice pembelian
|
|
1878
|
+
invoiceNote: 'Invoice pembelian\nTotal: Rp 150.000'
|
|
1231
1879
|
})
|
|
1232
1880
|
|
|
1233
|
-
//
|
|
1881
|
+
// Dengan PDF
|
|
1234
1882
|
await sock.sendMessage(jid, {
|
|
1235
1883
|
document: fs.readFileSync('invoice.pdf'),
|
|
1236
1884
|
mimetype: 'application/pdf',
|
|
1237
1885
|
fileName: 'invoice.pdf',
|
|
1238
|
-
invoiceNote: 'Terima kasih atas pesananmu
|
|
1886
|
+
invoiceNote: 'Terima kasih atas pesananmu'
|
|
1239
1887
|
})
|
|
1240
1888
|
```
|
|
1241
1889
|
|
|
1242
1890
|
---
|
|
1243
1891
|
|
|
1244
|
-
##
|
|
1245
|
-
|
|
1246
|
-
> 🌟 Kirim detail pesanan (order message) — untuk fitur belanja WhatsApp~
|
|
1892
|
+
## 📦 Order
|
|
1247
1893
|
|
|
1248
1894
|
```js
|
|
1249
1895
|
await sock.sendMessage(jid, {
|
|
1250
1896
|
order: {
|
|
1251
1897
|
orderId: 'order_001',
|
|
1252
|
-
thumbnail: fs.readFileSync('produk.jpg'),
|
|
1898
|
+
thumbnail: fs.readFileSync('produk.jpg'), // wajib
|
|
1253
1899
|
itemCount: 3,
|
|
1254
|
-
status: 'PAYMENT_PENDING',
|
|
1900
|
+
status: 'PAYMENT_PENDING',
|
|
1255
1901
|
surface: 'CATALOG',
|
|
1256
|
-
message: 'Pesanan kamu sedang diproses
|
|
1257
|
-
orderTitle: 'Pesanan #001
|
|
1902
|
+
message: 'Pesanan kamu sedang diproses',
|
|
1903
|
+
orderTitle: 'Pesanan #001',
|
|
1258
1904
|
sellerJid: '628xxx@s.whatsapp.net',
|
|
1259
1905
|
token: 'token_unik',
|
|
1260
|
-
totalAmount1000: 150000000,
|
|
1906
|
+
totalAmount1000: 150000000, // Rp 150.000
|
|
1261
1907
|
totalCurrencyCode: 'IDR'
|
|
1262
1908
|
}
|
|
1263
1909
|
})
|
|
@@ -1265,46 +1911,40 @@ await sock.sendMessage(jid, {
|
|
|
1265
1911
|
|
|
1266
1912
|
---
|
|
1267
1913
|
|
|
1268
|
-
##
|
|
1269
|
-
|
|
1270
|
-
> 🍃 Aktifkan atau nonaktifkan pesan menghilang di obrolan grup~
|
|
1914
|
+
## 💨 Disappearing Messages
|
|
1271
1915
|
|
|
1272
1916
|
```js
|
|
1273
|
-
//
|
|
1917
|
+
// Aktifkan (86400 detik = 24 jam default)
|
|
1274
1918
|
await sock.sendMessage(groupJid, { disappearingMessagesInChat: true })
|
|
1275
1919
|
|
|
1276
|
-
//
|
|
1920
|
+
// Nonaktifkan
|
|
1277
1921
|
await sock.sendMessage(groupJid, { disappearingMessagesInChat: false })
|
|
1278
1922
|
|
|
1279
|
-
//
|
|
1923
|
+
// Durasi kustom (detik)
|
|
1280
1924
|
await sock.sendMessage(groupJid, { disappearingMessagesInChat: 604800 }) // 7 hari
|
|
1281
1925
|
```
|
|
1282
1926
|
|
|
1283
|
-
>
|
|
1927
|
+
> Hanya berfungsi di grup (`@g.us`).
|
|
1284
1928
|
|
|
1285
1929
|
---
|
|
1286
1930
|
|
|
1287
|
-
##
|
|
1288
|
-
|
|
1289
|
-
> ⚡ Kirim pesan dalam bentuk raw WAProto — untuk kontrol penuh struktur pesan~
|
|
1931
|
+
## ⚡ Raw Message
|
|
1290
1932
|
|
|
1291
1933
|
```js
|
|
1292
|
-
// 🌸 Properti 'raw' akan di-bypass langsung tanpa transformasi apapun
|
|
1293
1934
|
await sock.sendMessage(jid, {
|
|
1294
1935
|
raw: true,
|
|
1295
1936
|
extendedTextMessage: {
|
|
1296
|
-
text: 'Pesan raw langsung ke proto
|
|
1937
|
+
text: 'Pesan raw langsung ke proto'
|
|
1297
1938
|
}
|
|
1298
1939
|
})
|
|
1299
1940
|
```
|
|
1300
1941
|
|
|
1301
|
-
>
|
|
1942
|
+
> Ketika `raw: true` ada, semua properti lain diteruskan langsung sebagai WAProto message tanpa pemrosesan tambahan.
|
|
1302
1943
|
|
|
1303
1944
|
---
|
|
1304
1945
|
|
|
1305
1946
|
<div align="center">
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
<br/><br/>
|
|
1947
|
+
|
|
1948
|
+
*Dibuat dengan dedikasi oleh **NuiiS4TORU***
|
|
1949
|
+
|
|
1310
1950
|
</div>
|