WHAPI dibangun dengan dua library, untuk mengantisipasi jika salah satu library ada gangguan, whapi masih memiliki backup. Kedua library tersebut adalah api unofficial whatsapp yang populer.
Setiap library memiliki kelebihan dan kekurangan, akan kami jelaskan perbedaan dari kedua library ini.
Karena kami telah menambahkan library baru pada aplikasi, ada beberapa fitur yang tidak support ketika menggunakan library whatsapp-web.js
Fitur yang tidak didukung
/api/sendAdReplyMessage
reason: wweb.js tidak memiliki metode untuk mengirim message secara raw ke whatsapp
/api/getMediaMessage
reason: wweb.js tidak memiliki metode untuk mengambil message berdasarkan id_message
solusi: store mediaMessage dari webhook "media"
Custom selectable_count | /api/sendPollMessage
reason: wweb.js hanya bisa mengirim PollMessage dengan Satu Pilihan atau Banyak Pilihan
available: jadi hanya tersedia selectable_count: 0 dan selectable_count: 1
Tidak support listening poll event
reason: wweb.js tidak memiliki event untuk listening Poll
solusi: untuk sementara tidak ada solusi, kami sedang mencoba berbagai cara untuk menghadirkan fitur ini
forward_type params
reason: wweb.js tidak memiliki metode untuk menetapkan forward secara leluasa
{"type":"message",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event message"key": { // Informasi pengirim"remoteJid":"[email protected]",// Nomer pengirim"fromMe":false,// Dikirim dari nomer sendiri ?"id":"xxxxx"// ID pesan },"messageTimestamp":1691639955,// Waktu pesan"pushName":"xxxxx",// Nama Whatsapp"broadcast":false,// Apakah pesan broadcast ?"status":2,// Object ini hanya muncul ketika mengirim pesan via API"message": { ... // Object disini adalah raw pesan whatsapp, bisa berubah sewaktu2 },"verifiedBizName":"WHAPI",// Object untuk nama whatsapp bisnis"t":1691639955,// Waktu pesan"id":"xxxxx",// ID pesan"from":"[email protected]",// Nomer pengirim"fromMe":false,// Dikirim dari nomer sendiri ?"chatId":"[email protected]",// Nomer pengirim"isGroupMsg":false,// Apakah pesan dari grup ?"isStories":false,// Apakah pesan story ?"sender":"[email protected]",// Nomer pengirim"pushname":"WHAPI",// Object untuk nama whatsapp bisnis"timestamp":1691639955,// Waktu pesan"isEphemeralMessage":false,"viewOnce":false,// Pesan dilihat 1x"type":"extendedTextMessage",// ada 3 type reactionMessage | extendedTextMessage | conversation"isMedia":false,// Apakah pesan media?"quotedMsg": { // Jika pesan berupa quote, akan ada data disini ... // Data object disini adalah raw dari whatsapp. },"mentionedJidList": [],// Mention nama akan muncul disini"body":"Isi Pesan",// Berisi isi pesan / caption pada gambar / caption pada dokumen"apiKey":"xxxxx"// Alamat API Key dari device } }
wweb.js
{"type":"message","results": {"t":1697928232,// Waktu pesan"id":"xxxxx",// ID pesan"from":"[email protected]",// Nomer chat"fromMe":false,// Dikirim dari nomer sendiri ?"chatId":"[email protected]",// Nomer chat"isGroupMsg":false,// Apakah pesan dari grup ?"isStories":false,// Apakah pesan story ?"sender":"[email protected]",// Nomer pengirim"pushname":"WHAPI",// Nama Whatsapp"timestamp":1697928232,// Waktu pesan"isEphemeralMessage":false,"viewOnce":false,// Pesan dilihat 1x"type":"chat",// chat | image | video | audio | document"message": { ... // Object disini adalah raw pesan whatsapp dari wweb.js },"isMedia":false,// Apakah file media ?"quotedMsg": { // Jika pesan memiliki quote, akan ada data disini"type":"chat","body":"Test","thumbnail":"","richPreviewType":0,"inviteGrpType":"DEFAULT" },"body":"Isi pesan",// Berisi isi pesan / caption pada gambar / caption pada dokumen"apiKey":"xxxxx"// Alamat API Key dari device } }
group_update
baileys
{"type":"group_update",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_update"apiKey":"xxxxx",// Alamat API Key dari device "update": [ // object update grup {"id":"[email protected]",// id group"announce":false// Ada 3 object, announce || subject || restrict } ] } }
wweb.js
{"type":"group_update",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_update"apiKey":"xxxxx",// Alamat API Key dari device"update": { // object update grup"id": { // Informasi pengirim"fromMe":false,// Dikirim dari nomer sendiri ?"remote":"[email protected]",// id group"id":"xxxxx",// ID"participant":"[email protected]",// Nomer pengirim"_serialized":"xxxxx" },"body":"isi perubahan","type":"description",// subject | description | picture | announce | restrict | invite"timestamp":1697931710,// Waktu"chatId":"[email protected]",// id group"author":"[email protected]",// Nomer pengirim"recipientIds": [] } } }
group_join
baileys
{"type":"group_join",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_join"apiKey":"xxxxx",// Alamat API Key dari device "join": { // object join"id":"[email protected]",// id group"participants": [ // data list member yang bergabung"[email protected]" ],"action":"add"// object aksi menambahkan } }}
wweb.js
{"type":"group_join",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_join"apiKey":"xxxxx",// Alamat API Key dari device"join": { // object join"id": { // Informasi pengirim"fromMe":false,// Dikirim dari nomer sendiri ?"remote":"[email protected]",// id group"id":"xxxxx",// ID"participant":"[email protected]",// Nomer pengirim"_serialized":"xxxxx" },"body":"","type":"add",// object aksi menambahkan"timestamp":1697932000,// waktu"chatId":"[email protected]","author":"[email protected]",// Nomer pengirim"recipientIds": [ // list Nomer yang di add"[email protected]" ] } }}
group_leave
{"type":"group_leave",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_leave"apiKey":"xxxxx",// Alamat API Key dari device "leave": { // object leave"id":"[email protected]",// id group"participants": [ // data list member yang keluar"[email protected]" ],"action":"remove"// object aksi mengeluarkan } }}
wweb.js
{"type":"group_leave",// Tipe webhook yang dikirim"results": { // Kumpulan object dari event group_join"apiKey":"xxxxx",// Alamat API Key dari device"join": { // object join"id": { // Informasi pengirim"fromMe":false,// Dikirim dari nomer sendiri ?"remote":"[email protected]",// id group"id":"xxxxx",// ID"participant":"[email protected]",// Nomer pengirim"_serialized":"xxxxx" },"body":"","type":"remove",// object aksi mengeluarkan"timestamp":1697932000,// waktu"chatId":"[email protected]","author":"[email protected]",// Nomer pengirim"recipientIds": [ // list Nomer yang di remove"[email protected]" ] } }}
Perbedaan respons dari API
/api/addParticipantGroup
object "status" hanya akan mereturn status 200 jika berhasil
Jika member telah ada di group, API akan mereturn status 400
/api/removeParticipantGroup
object "status" hanya akan mereturn status 200 jika berhasil
Jika member telah tidak ada di group, API akan mereturn status 400
/api/promoteParticipantGroup
object "status" hanya akan mereturn status 200 jika berhasil
Jika member telah menjadi admin, API akan mereturn status 400
/api/demoteParticipantGroup
object "status" hanya akan mereturn status 200 jika berhasil
Jika member telah menjadi member, API akan mereturn status 400