Baileys VS whatsapp-web.js

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

    • solusi: -

  • /api/clearMessagesStore, /api/changeMessagesStoreSave, /api/changeChatsStoreSave

    • reason: tidak seperti baileys, wweb.js menyimpan database whatsapp mereka di chrome

  • Media stories

    • reason: untuk sementara, kami menonaktifkan media untuk webhook stories (base64_file), dikarenakan di beberapa kondisi, bisa menyebabkan app crash

    • solusi: untuk sementara tidak ada solusi, kami sedang mencoba berbagai cara untuk menghadirkan fitur ini

Perbedaan format number

baileys berupa "[email protected]" wweb.js berupa "[email protected]"

Perbedaan Webhook

ready

{
	"type": "ready",
	"results": {
		"apiKey": "xxxxx",
		"waClient": "wweb", // wweb | baileys
		"message": "Device connected successfully"
	}
}

disconnected

wweb.js

  • Tidak memiliki reason "connection_banned_temp"

  • Memiliki reason "deprecated_version"

message

baileys

{
 	"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

  • /api/getUserInfo Memiliki object baru, "waClient"

 {
     "code": 200,
     "results": {
         "id": "[email protected]",
         "jid": "[email protected]",
         "name": "XXXX",
         "waClient": "wweb" // wweb | baileys
     }
 }

Last updated