Kali ini saya akan share cara membuat WhatsApp API dengan NodeJs tanpa scraping ke web. ada apa. com dan tanpa harus daftar terlebih dahulu ke whatsapp business dan dapatkan kredensial api dan tunggu sangat lama untuk diterima Show
Nah, ada satu library atau package yang sangat berguna dan memudahkan hidup kita tanpa harus repot mengorek web itu sendiri. Apa itu? Apa itu menggores?
Pengikisan Web. Panduan dan TeknikBagi Anda pemilik toko online, mungkin banyak sekali data yang perlu Anda kumpulkan untuk kebutuhan bisnis Anda...www. dewa web. com Oke langsung saja kita mulai InstalasiBuat proyek baru dengan perintah setelah berhasil membuat project dan membuat file server. js, lalu instal paket yang kami sebutkan di atas $ benang tambahkan whatsapp-web. js Proses instalasi akan memakan waktu lama karena paket ini berisi dalang yang mendownload chromium pedroslopez/whatsapp-web. jsKlien API WhatsApp yang terhubung melalui aplikasi browser Web WhatsApp Ini menggunakan Puppeteer untuk menjalankan contoh nyata dari…github. com lari temanku, lari... kami suka benang… Mulailah membuatKami memerlukan beberapa dependensi lagi untuk menjalankan aplikasi kami $ benang tambahkan soket ekspres. io kode qr http Pada berkas paket. json isi bagian script dengan start, seperti kode berikut Kemudian, isi server. js dengan kode berikut Buat file indeks. html Jalankan aplikasi kita dengan perintah Selanjutnya buka http. // localhost. 8000 dan PINDAI Kode QR yang muncul indeks. htmlPengujian mengirim pesanKita tes dulu, dengan mengirim pesan ke nomor yang baru kita scan. KARENA KAMI TULIS PESANAN JIKA PESAN SAMA DENGAN. ping, lalu kirim. ping oke jika berhasil akan ada balasan otomatis yaitu pong Pengujian API di tukang posSelanjutnya kita akan menguji API Endpoint yang telah kita buat di postman http. // localhost. 8000/kirim tukang posJika berhasil maka akan muncul objek respon, dengan pesan “Pesan terkirim” Perlu DIPERHATIKAN bahwa angka yang dimasukkan harus dimulai dengan 62, dan c ditambahkan di belakangnya. kita SelanjutnyaKemudian kita tinggal mengembangkan APInya lagi, misalnya mengirim gambar, file, dll. Jelajahi sendiri paket whatsapp-web Anda. js di sini Baileys tidak memerlukan Selenium atau browser lain untuk berinteraksi dengan WhatsApp Web, ia melakukannya secara langsung menggunakan WebSocket. Tidak menjalankan Selenium dan Chromium menghemat setengah gig ram. / Baileys mendukung interaksi dengan versi multi-perangkat dan web WhatsApp Terima kasih kepada @pokeraujo yang telah menuliskan pengamatannya tentang cara kerja WhatsApp Multi-Device. Terima kasih juga kepada @Sigalor yang telah menulis pengamatannya tentang cara kerja WhatsApp Web dan terima kasih kepada @Rhymen atas implementasinya Baileys aman untuk tipe, dapat diperluas, dan mudah digunakan. Jika Anda memerlukan lebih banyak fungsionalitas daripada yang disediakan, sangat mudah untuk menulis ekstensi. Lebih lanjut tentang ini Jika Anda tertarik untuk membuat bot WhatsApp, Anda mungkin ingin melihat WhatsAppInfoBot dan bot sebenarnya yang dibuat dengannya, Messcat Baca dokumennya di sini Bergabunglah dengan Perselisihan di sini ContohPeriksa & jalankan contoh. ts untuk melihat contoh penggunaan perpustakaan. Skrip mencakup kasus penggunaan yang paling umum. Untuk menjalankan skrip contoh, unduh atau klon repo lalu ketik yang berikut di terminal
InstallGunakan versi stabil
Gunakan versi edge (tidak ada jaminan stabilitas, tetapi perbaikan + fitur terbaru) _Kemudian impor kode Anda menggunakan import makeWASocket from '@adiwajshing/baileys' Tes SatuanMELAKUKAN Menghubungkanimport makeWASocket, { DisconnectReason } from '@adiwajshing/baileys' import { Boom } from '@hapi/boom' async function connectToWhatsApp () { const sock = makeWASocket({ // can provide additional config here printQRInTerminal: true }) sock.ev.on('connection.update', (update) => { const { connection, lastDisconnect } = update if(connection === 'close') { const shouldReconnect = (lastDisconnect.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut console.log('connection closed due to ', lastDisconnect.error, ', reconnecting ', shouldReconnect) // reconnect if not logged out if(shouldReconnect) { connectToWhatsApp() } } else if(connection === 'open') { console.log('opened connection') } }) sock.ev.on('messages.upsert', m => { console.log(JSON.stringify(m, undefined, 2)) console.log('replying to', m.messages[0].key.remoteJid) await sock.sendMessage(m.messages[0].key.remoteJid!, { text: 'Hello there!' }) }) } // run in main file connectToWhatsApp()_ Jika koneksi berhasil, Anda akan melihat kode QR tercetak di layar terminal Anda, pindai dengan WhatsApp di ponsel Anda dan Anda akan masuk Catatan. instal const conn = makeWASocket({ ...otherOpts, // can use Windows, Ubuntu here too browser: Browsers.macOS('Desktop'), syncFullHistory: true })6 menggunakan const conn = makeWASocket({ ...otherOpts, // can use Windows, Ubuntu here too browser: Browsers.macOS('Desktop'), syncFullHistory: true })7 untuk mencetak otomatis QR ke terminal Catatan. kode untuk mendukung WA Web versi lawas (pra multi-perangkat) telah dihapus di v5. Hanya koneksi multi-perangkat standar yang sekarang didukung. Ini dilakukan karena WA tampaknya benar-benar kehilangan dukungan untuk versi lawas Konfigurasi KoneksiAnda dapat mengonfigurasi koneksi dengan mengirimkan objek const conn = makeWASocket({ ...otherOpts, // can use Windows, Ubuntu here too browser: Browsers.macOS('Desktop'), syncFullHistory: true })8 Keseluruhan struktur const conn = makeWASocket({ ...otherOpts, // can use Windows, Ubuntu here too browser: Browsers.macOS('Desktop'), syncFullHistory: true })_8 disebutkan di sini dengan nilai default type SocketConfig = { /** the WS url to connect to WA */ waWebSocketUrl: string | URL /** Fails the connection if the socket times out in this interval */ connectTimeoutMs: number /** Default timeout for queries, undefined for no timeout */ defaultQueryTimeoutMs: number | undefined /** ping-pong interval for WS connection */ keepAliveIntervalMs: number /** proxy agent */ agent?: Agent /** pino logger */ logger: Logger /** version to connect with */ version: WAVersion /** override browser config */ browser: WABrowserDescription /** agent used for fetch requests -- uploading/downloading media */ fetchAgent?: Agent /** should the QR be printed in the terminal */ printQRInTerminal: boolean /** should events be emitted for actions done by this socket connection */ emitOwnEvents: boolean /** provide a cache to store media, so does not have to be re-uploaded */ mediaCache?: NodeCache /** custom upload hosts to upload media to */ customUploadHosts: MediaConnInfo['hosts'] /** time to wait between sending new retry requests */ retryRequestDelayMs: number /** time to wait for the generation of the next QR in ms */ qrTimeout?: number; /** provide an auth state object to maintain the auth state */ auth: AuthenticationState /** manage history processing with this control; by default will sync up everything */ shouldSyncHistoryMessage: (msg: proto.Message.IHistorySyncNotification) => boolean /** transaction capability options for SignalKeyStore */ transactionOpts: TransactionCapabilityOptions /** provide a cache to store a user's device list */ userDevicesCache?: NodeCache /** marks the client as online whenever the socket successfully connects */ markOnlineOnConnect: boolean /** * map to store the retry counts for failed messages; * used to determine whether to retry a message or not */ msgRetryCounterMap?: MessageRetryMap /** width for link preview images */ linkPreviewImageThumbnailWidth: number /** Should Baileys ask the phone for full history, will be received async */ syncFullHistory: boolean /** Should baileys fire init queries automatically, default true */ fireInitQueries: boolean /** * generate a high quality link preview, * entails uploading the jpegThumbnail to WA * */ generateHighQualityLinkPreview: boolean /** options for axios */ options: AxiosRequestConfig<any> /** * fetch a message from your store * implement this so that messages failed to send (solves the "this message can take a while" issue) can be retried * */ getMessage: (key: proto.IMessageKey) => Promise<proto.IMessage | undefined> } Meniru aplikasi Desktop, bukan web
Menyimpan & Memulihkan SesiAnda jelas tidak ingin terus memindai kode QR setiap kali ingin terhubung Jadi, Anda dapat memuat kredensial untuk masuk kembali import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds) Catatan. Saat pesan diterima/dikirim, karena sesi sinyal perlu diperbarui, kunci autentikasi ( import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)0) akan diperbarui. Setiap kali itu terjadi, Anda harus menyimpan kunci yang diperbarui ( import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)1 disebut). Tidak melakukannya akan mencegah pesan Anda mencapai penerima & menyebabkan konsekuensi tak terduga lainnya. Fungsi import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)_2 secara otomatis menanganinya, tetapi untuk penerapan serius lainnya -- Anda harus sangat berhati-hati dengan manajemen status kunci Mendengarkan Pembaruan KoneksiBaileys sekarang mengaktifkan import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)_3 untuk memberi tahu Anda bahwa ada sesuatu yang diperbarui dalam koneksi tersebut. Data ini memiliki struktur sebagai berikut type ConnectionState = { /** connection is now open, connecting or closed */ connection: WAConnectionState /** the error that caused the connection to close */ lastDisconnect?: { error: Error date: Date } /** is this a new login */ isNewLogin?: boolean /** the current QR code */ qr?: string /** has the device received all pending notifications while it was offline */ receivedPendingNotifications?: boolean } Catatan. ini juga menawarkan pembaruan apa pun pada QR Menangani AcaraBaileys menggunakan sintaks EventEmitter untuk acara. Semuanya diketik dengan baik, jadi Anda seharusnya tidak memiliki masalah dengan editor Intellisense seperti VS Code Acara diketik seperti yang disebutkan di sini export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] } Anda dapat mendengarkan acara ini seperti ini const sock = makeWASocket() sock.ev.on('messages.upsert', ({ messages }) => { console.log('got messages', messages) }) Menerapkan Penyimpanan DataBaileys tidak dilengkapi dengan penyimpanan de facto untuk obrolan, kontak, atau pesan. Namun, implementasi dalam memori yang sederhana telah disediakan. Toko mendengarkan pembaruan obrolan, pesan baru, pembaruan pesan, dll. , untuk selalu memiliki versi data terbaru Ini dapat digunakan sebagai berikut _0Toko juga menyediakan beberapa fungsi sederhana seperti import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)4 yang memanfaatkan toko untuk mempercepat pengambilan data Catatan. Saya sangat merekomendasikan membangun penyimpanan data Anda sendiri terutama untuk koneksi MD, karena menyimpan seluruh riwayat obrolan seseorang di memori adalah pemborosan RAM yang mengerikan Mengirim PesanKirim semua jenis pesan dengan satu fungsi Pesan Non-Media _1Mengirim pesan dengan pratinjau tautan
_2Pesan MediaMengirim media (video, stiker, gambar) lebih mudah dan efisien dari sebelumnya
_3Catatan
Meneruskan Pesan _5Membaca PesanSatu set kunci pesan harus secara eksplisit ditandai baca sekarang. Di multi-perangkat, Anda tidak dapat menandai seluruh "obrolan" sebagai telah dibaca dengan Baileys Web. Ini berarti Anda harus melacak pesan yang belum dibaca _6ID pesan adalah pengidentifikasi unik dari pesan yang Anda tandai sebagai telah dibaca. Pada type ConnectionState = { /** connection is now open, connecting or closed */ connection: WAConnectionState /** the error that caused the connection to close */ lastDisconnect?: { error: Error date: Date } /** is this a new login */ isNewLogin?: boolean /** the current QR code */ qr?: string /** has the device received all pending notifications while it was offline */ receivedPendingNotifications?: boolean }_8, type ConnectionState = { /** connection is now open, connecting or closed */ connection: WAConnectionState /** the error that caused the connection to close */ lastDisconnect?: { error: Error date: Date } /** is this a new login */ isNewLogin?: boolean /** the current QR code */ qr?: string /** has the device received all pending notifications while it was offline */ receivedPendingNotifications?: boolean }9 dapat diakses menggunakan export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] }0 Perbarui Kehadiran _7Ini memungkinkan orang/grup dengan import makeWASocket, { BufferJSON, useMultiFileAuthState } from '@adiwajshing/baileys' import * as fs from 'fs' // utility function to help save the auth state in a single folder // this function serves as a good guide to help write auth & key states for SQL/no-SQL databases, which I would recommend in any production grade system const { state, saveCreds } = await useMultiFileAuthState('auth_info_baileys') // will use the given state to connect // so if valid credentials are available -- it'll connect without QR const conn = makeWASocket({ auth: state }) // this will be called as soon as the credentials are updated conn.ev.on ('creds.update', saveCreds)_7 mengetahui apakah Anda sedang online, offline, mengetik, dll export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] }_2 dapat menjadi salah satu dari berikut ini _8Kehadiran berakhir setelah sekitar 10 detik Catatan. Di WhatsApp versi multi-perangkat -- jika klien desktop aktif, WA tidak mengirimkan pemberitahuan push ke perangkat. Jika Anda ingin menerima pemberitahuan tersebut -- tandai klien Baileys Anda offline menggunakan export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] }3 Mengunduh Pesan MediaJika Anda ingin menyimpan media yang Anda terima _9Catatan. WhatsApp secara otomatis menghapus media lama dari server mereka. Agar perangkat dapat mengakses media tersebut -- pengunggahan ulang diperlukan oleh perangkat lain yang memilikinya. Ini dapat dicapai dengan menggunakan import makeWASocket from '@adiwajshing/baileys'0 Menghapus Pesanimport makeWASocket from '@adiwajshing/baileys'1 Catatan. menghapus untuk diri sendiri didukung melalui export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] }4 (bagian selanjutnya) Memodifikasi ObrolanWA menggunakan bentuk komunikasi terenkripsi untuk mengirim pembaruan obrolan/aplikasi. Ini sebagian besar telah diterapkan dan Anda dapat mengirim pembaruan berikut
Catatan. jika Anda mengacaukan salah satu pembaruan Anda, WA dapat mengeluarkan Anda dari semua perangkat Anda dan Anda harus masuk lagi Pesan Menghilangimport makeWASocket from '@adiwajshing/baileys'_8 Lain-lain
Tentu saja, ganti export type BaileysEventMap = { /** connection state has been updated -- WS closed, opened, connecting etc. */ 'connection.update': Partial<ConnectionState> /** credentials updated -- some metadata, keys or something */ 'creds.update': Partial<AuthenticationCreds> /** history sync, everything is reverse chronologically sorted */ 'messaging-history.set': { chats: Chat[] contacts: Contact[] messages: WAMessage[] isLatest: boolean } /** upsert chats */ 'chats.upsert': Chat[] /** update the given chats */ 'chats.update': Partial<Chat>[] /** delete chats with given ID */ 'chats.delete': string[] /** presence of contact in a chat updated */ 'presence.update': { id: string, presences: { [participant: string]: PresenceData } } 'contacts.upsert': Contact[] 'contacts.update': Partial<Contact>[] 'messages.delete': { keys: WAMessageKey[] } | { jid: string, all: true } 'messages.update': WAMessageUpdate[] 'messages.media-update': { key: WAMessageKey, media?: { ciphertext: Uint8Array, iv: Uint8Array }, error?: Boom }[] /** * add/update the given messages. If they were received while the connection was online, * the update will have type: "notify" * */ 'messages.upsert': { messages: WAMessage[], type: MessageUpsertType } /** message was reacted to. If reaction was removed -- then "reaction.text" will be falsey */ 'messages.reaction': { key: WAMessageKey, reaction: proto.IReaction }[] 'message-receipt.update': MessageUserReceiptUpdate[] 'groups.upsert': GroupMetadata[] 'groups.update': Partial<GroupMetadata>[] /** apply an action to participants in a group */ 'group-participants.update': { id: string, participants: string[], action: ParticipantAction } 'blocklist.set': { blocklist: string[] } 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } /** Receive an update on a call, including when the call was received, rejected, accepted */ 'call': WACallEvent[] }_5 dengan ID yang sebenarnya Grup
Daftar Siaran & CeritaCatatan. pesan saat ini tidak dapat dikirim ke daftar siaran dari versi MD
Menulis Fungsi KustomBaileys ditulis dengan mempertimbangkan fungsionalitas khusus. Alih-alih membagi proyek & menulis ulang bagian dalamnya, Anda cukup menulis ekstensi Anda sendiri Pertama, aktifkan pencatatan pesan tidak tertangani dari WhatsApp dengan pengaturan const conn = makeWASocket({ ...otherOpts, // can use Windows, Ubuntu here too browser: Browsers.macOS('Desktop'), syncFullHistory: true })_1 Ini akan memungkinkan Anda untuk melihat semua jenis pesan yang dikirim WhatsApp di konsol Beberapa contoh
CatatanPerpustakaan ini awalnya merupakan proyek untuk CS-2362 di Universitas Ashoka dan sama sekali tidak berafiliasi dengan WhatsApp. Gunakan atas kebijaksanaan Anda sendiri. Jangan spam orang dengan ini |