Venomは、JavaSapp用のボットを作成するためにJavaScriptを使用して開発された高性能システム、カスタマーサービス、メディアの送信、人工知能に基づくメディアの認識、WhatsAppのあらゆる種類のデザインアーキテクチャなどの対話の作成のサポートです。
完全なドキュメント
これは、WhatsAppの高性能APIであり、テキストメッセージ、ファイル、画像、ビデオなどを送信できます。
APIはRestful Webサービスと呼ばれるプラットフォームで開発され、インターネット上のコンピューターシステム間の相互運用性を提供することを忘れないでください。
すべての情報リソースに適用される明確に定義された一連の操作を使用します。HTTP自体は、最も重要な操作セットを定義します。
PHP、Python、C#などのお気に入りの言語で使用してください。あなたの言語がHTTPプロトコルでサポートされている限り、時間とお金を節約します。 Venomの仕組みを知る必要はありません。完全なAPIドキュメントがプロの方法であります。


SuperChatsは、ソケットを使用してWhatsApp機能を制御するユニークな機能を備えたプレミアムライブラリです。スーパーチャットを使用すると、サービスボット、マルチサービスチャット、またはWhatsAppを使用するシステムを構築できます
SuperChatsはVenomのプレミアムバージョンで、世界中の企業や開発者への排他的な機能とサポートを備えています
https://github.com/orkestral/superchats
ライセンスの価値は、下の画像をクリックしてWhatsAppで連絡先を取得するための毎月50ドルです。
| ?自動QR更新 | ✔ |
| ?テキスト、画像、ビデオ、オーディオ、ドキュメントを送信します | ✔ |
| 連絡先、チャット、グループ、グループメンバー、ブロックリストを取得します | ✔ |
| ?連絡先を送信します | ✔ |
| ボタンを送信します | ✔ |
| ステッカーを送信します | ✔ |
| ステッカーgifを送信します | ✔ |
| 複数のセッション | ✔ |
| forwardメッセージ | ✔ |
| ?メッセージを受信します | ✔ |
| ?ユーザーセクションを挿入します | ✔ |
| ?場所を送る!! | ✔ |
| ??そしてもっと | ✔ |
https://orkestral.github.io/venom/index.htmlのドキュメント
> npm i --save venom-botまたは毎晩リリースの場合:
> npm i --save https://github.com/orkestral/venom/releases/download/nightly/venom-bot-nightly.tgz現在のリポジトリのインストール「現在のリポジトリからベータ版をダウンロードできます!」
> npm i github:orkestral/venom // Supports ES6
// import { create, Whatsapp } from 'venom-bot';
const venom = require ( 'venom-bot' ) ;
venom
. create ( {
session : 'session-name' //name of session
} )
. then ( ( client ) => start ( client ) )
. catch ( ( erro ) => {
console . log ( erro ) ;
} ) ;
function start ( client ) {
client . onMessage ( ( message ) => {
if ( message . body === 'Hi' && message . isGroupMsg === false ) {
client
. sendText ( message . from , 'Welcome Venom ?' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
}
} ) ;
} create()関数を実行すると、 venomはwhatsappウェブのインスタンスを作成します。ログインしていない場合は、端末にQRコードを印刷します。携帯電話でスキャンすると、準備ができています! create()ことで同時に作成できます。 // Init sales whatsapp bot
venom . create ( 'sales' ) . then ( ( salesClient ) => { ... } ) ;
// Init support whatsapp bot
venom . create ( 'support' ) . then ( ( supportClient ) => { ... } ) ; venom create()メソッド3番目のパラメーターには、次のオプションパラメーターを持つことができます。
Linuxサーバーを使用している場合は、browserargsのargs --user-agent元のパラメーターを渡すことを忘れないでください
const venom = require ( 'venom-bot' ) ;
venom
. create (
//session
'sessionName' , //Pass the name of the client you want to start the bot
//catchQR
( base64Qrimg , asciiQR , attempts , urlCode ) => {
console . log ( 'Number of attempts to read the qrcode: ' , attempts ) ;
console . log ( 'Terminal qrcode: ' , asciiQR ) ;
console . log ( 'base64 image string qrcode: ' , base64Qrimg ) ;
console . log ( 'urlCode (data-ref): ' , urlCode ) ;
} ,
// statusFind
( statusSession , session ) => {
console . log ( 'Status Session: ' , statusSession ) ; //return isLogged || notLogged || browserClose || qrReadSuccess || qrReadFail || autocloseCalled || desconnectedMobile || deleteToken || chatsAvailable || deviceNotConnected || serverWssNotConnected || noOpenBrowser || initBrowser || openBrowser || connectBrowserWs || initWhatsapp || erroPageWhatsapp || successPageWhatsapp || waitForLogin || waitChat || successChat
//Create session wss return "serverClose" case server for close
console . log ( 'Session name: ' , session ) ;
} ,
// options
{
browserPathExecutable : '' , // browser executable path
folderNameToken : 'tokens' , //folder name when saving tokens
mkdirFolderToken : '' , //folder directory tokens, just inside the venom folder, example: { mkdirFolderToken: '/node_modules', } //will save the tokens folder in the node_modules directory
headless : 'new' , // you should no longer use boolean false or true, now use false, true or 'new' learn more https://developer.chrome.com/articles/new-headless/
devtools : false , // Open devtools by default
debug : false , // Opens a debug session
logQR : true , // Logs QR automatically in terminal
browserWS : '' , // If u want to use browserWSEndpoint
browserArgs : [ '' ] , // Original parameters ---Parameters to be added into the chrome browser instance
addBrowserArgs : [ '' ] , // Add broserArgs without overwriting the project's original
puppeteerOptions : { } , // Will be passed to puppeteer.launch
disableSpins : true , // Will disable Spinnies animation, useful for containers (docker) for a better log
disableWelcome : true , // Will disable the welcoming message which appears in the beginning
updatesLog : true , // Logs info updates automatically in terminal
autoClose : 60000 , // Automatically closes the venom-bot only when scanning the QR code (default 60 seconds, if you want to turn it off, assign 0 or false)
createPathFileToken : false , // creates a folder when inserting an object in the client's browser, to work it is necessary to pass the parameters in the function create browserSessionToken
addProxy : [ '' ] , // Add proxy server exemple : [e1.p.webshare.io:01, e1.p.webshare.io:01]
userProxy : '' , // Proxy login username
userPass : '' // Proxy password
} ,
// BrowserInstance
( browser , waPage ) => {
console . log ( 'Browser PID:' , browser . process ( ) . pid ) ;
waPage . screenshot ( { path : 'screenshot.png' } ) ;
}
)
. then ( ( client ) => {
start ( client ) ;
} )
. catch ( ( erro ) => {
console . log ( erro ) ;
} ) ; セッションがisLoggedまたはnotLoggedまたはbrowserCloseまたはqrReadSuccessまたはqrReadFailまたはautocloseCalledまたはdesconnectedMobileまたはdeleteTokenまたはdesconnectedMobile or deviceNotConnectedまたはnopenbrowserまたはイニシェまたはinitBrowserまたはイニシカンロウザーまたはopenBrowser chatsAvailable serverWssNotConnectedまたはerroPageWhatsappウザーまたはnoOpenBrowserたブラウザーまたは接続されている場合にinitWhatsapp connectBrowserWs 。 successPageWhatsappまたはwaitForLoginまたはwaitChatまたはsuccessChatまたはCreate session wss return "serverClose" case server for close
| 状態 | 状態 |
|---|---|
isLogged | ユーザーがすでにブラウザにログインしているとき |
notLogged | ユーザーがブラウザに接続されていない場合、オプションWhatsApp Webで携帯電話を介してQRコードをスキャンする必要があります |
browserClose | ブラウザが閉じている場合、このパラメーターが返されます |
qrReadSuccess | ユーザーがログインしていない場合、QRコードが端末に渡されます。コールバックが返されます。携帯電話による正しい読み取りの後、このパラメーターが返されます |
qrReadFail | QRコードスキャンが進行中のときにブラウザが停止した場合、このパラメーターは返されます |
autocloseCalled | ブラウザは、AutoCloseコマンドを使用して閉じられました |
desconnectedMobile | クライアントはモバイルに接続されています |
serverClose | クライアントはWSSに接続されています |
deleteToken | 関数内でtrueを渡す場合 |
chatsAvailable | Venomがチャットリストに接続されている場合 |
deviceNotConnected | 電話が切断されているため(Trying to connect to the phone)チャットは利用できません) |
serverWssNotConnected | アドレスWSSは見つかりませんでした! |
noOpenBrowser | それはブラウザでは見つかりませんでした、またはargsで何らかのコマンドが欠落しています |
initBrowser | ブラウザの起動 |
openBrowser | ブラウザが正常に開かれました! |
connectBrowserWs | browserwsとの接続が正常に完了しました! |
initWhatsapp | WhatsAppを開始! |
erroPageWhatsapp | WhatsAppページへのアクセスエラー |
successPageWhatsapp | Page WhatsAppに正常にアクセスされました |
waitForLogin | ログイン確認を待っています! |
waitChat | チャットが読み込まれるのを待っています |
successChat | チャットに正常にロードされました! |
const venom = require ( 'venom-bot' ) ;
venom
. create ( 'sessionName' , undefined , ( statusSession , session ) => {
console . log ( 'Status Session: ' , statusSession ) ;
//return isLogged || notLogged || browserClose || qrReadSuccess || qrReadFail || autocloseCalled || desconnectedMobile || deleteToken || chatsAvailable || deviceNotConnected || serverWssNotConnected || noOpenBrowser || initBrowser || openBrowser || connectBrowserWs || initWhatsapp || erroPageWhatsapp || successPageWhatsapp || waitForLogin || waitChat || successChat
//Create session wss return "serverClose" case server for close
console . log ( 'Session name: ' , session ) ;
} )
. then ( ( client ) => {
start ( client ) ;
} )
. catch ( ( erro ) => {
console . log ( erro ) ;
} ) ; デフォルトでは、QRコードが端末に表示されます。あなたが他のどこかでQRを渡す必要がある場合、次の方法は次のとおりです。
const fs = require ( 'fs' ) ;
const venom = require ( 'venom-bot' ) ;
venom
. create (
'sessionName' ,
( base64Qr , asciiQR , attempts , urlCode ) => {
console . log ( asciiQR ) ; // Optional to log the QR in the terminal
var matches = base64Qr . match ( / ^data:([A-Za-z-+/]+);base64,(.+)$ / ) ,
response = { } ;
if ( matches . length !== 3 ) {
return new Error ( 'Invalid input string' ) ;
}
response . type = matches [ 1 ] ;
response . data = new Buffer . from ( matches [ 2 ] , 'base64' ) ;
var imageBuffer = response ;
require ( 'fs' ) . writeFile (
'out.png' ,
imageBuffer [ 'data' ] ,
'binary' ,
function ( err ) {
if ( err != null ) {
console . log ( err ) ;
}
}
) ;
} ,
undefined ,
{ logQR : false }
)
. then ( ( client ) => {
start ( client ) ;
} )
. catch ( ( erro ) => {
console . log ( erro ) ;
} ) ; Puppeteerがファイルのダウンロードを処理します。復号化は可能な限り速く行われています(ネイティブ方法をアウトランします)。大きなファイルをサポートします!
import fs = require ( 'fs' ) ;
import mime = require ( 'mime-types' ) ;
client . onMessage ( async ( message ) => {
if ( message . isMedia === true || message . isMMS === true ) {
const buffer = await client . decryptFile ( message ) ;
// At this point you can do whatever you want with the buffer
// Most likely you want to write it into a file
const fileName = `some-file-name. ${ mime . extension ( message . mimetype ) } ` ;
fs . writeFile ( fileName , buffer , ( err ) => {
...
} ) ;
}
} ) ; 利用可能なすべての機能がリストされているわけではありません。さらに見るために、利用可能なすべての機能はこことここにあります
chatId <phoneNumber>@c.usまたは<phoneNumber>-<groupId>@g.usになります // Send Poll
const poll = {
name : 'new poll' ,
options : [
{
name : 'option 1'
} ,
{
name : 'option 2'
}
] ,
selectableOptionsCount : 1
} ;
await client . sendPollCreation ( '[email protected]' , poll )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send List menu
const list = [
{
title : "Pasta" ,
rows : [
{
title : "Ravioli Lasagna" ,
description : "Made with layers of frozen cheese" ,
}
]
} ,
{
title : "Dessert" ,
rows : [
{
title : "Baked Ricotta Cake" ,
description : "Sweets pecan baklava rolls" ,
} ,
{
title : "Lemon Meringue Pie" ,
description : "Pastry filled with lemonand meringue." ,
}
]
}
] ;
await client . sendListMenu ( '[email protected]' , 'Title' , 'subTitle' , 'Description' , 'menu' , list )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send Messages with Buttons Reply
const buttons = [
{
"buttonText" : {
"displayText" : "Text of Button 1"
}
} ,
{
"buttonText" : {
"displayText" : "Text of Button 2"
}
}
]
await client . sendButtons ( '[email protected]' , 'Title' , 'Description' , buttons )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send audio file MP3
await client . sendVoice ( '[email protected]' , './audio.mp3' ) . then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send audio file base64
await client . sendVoiceBase64 ( '[email protected]' , base64MP3 )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send contact
await client
. sendContactVcard ( '[email protected]' , '[email protected]' , 'Name of contact' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send a list of contact cards
await client
. sendContactVcardList ( '[email protected]' , [
'[email protected]' ,
'[email protected]' ,
] )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send basic text
await client
. sendText ( '[email protected]' , ' Hello from venom!' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send text message by injecting keystrokes into WhatsApp, thus maintaining the typing indicator
let success = await client . sendTextViaTyping ( '[email protected]' , ' Hello from venom!' ) ;
// Send photo or video by injecting keystrokes
let success = await client . sendPhotoVideoViaTyping ( '[email protected]' , 'path/to/file.jpg' , 'Pretty sunset' ) ;
// Send location
await client
. sendLocation ( '[email protected]' , '-13.6561589' , '-69.7309264' , 'Brasil' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Automatically sends a link with the auto generated link preview. You can also add a custom message to be added.
await client
. sendLinkPreview (
'[email protected]' ,
'https://www.youtube.com/watch?v=V1bFr2SWP1I' ,
'Kamakawiwo ole'
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send image (you can also upload an image using a valid HTTP protocol)
await client
. sendImage (
'[email protected]' ,
'path/to/img.jpg' ,
'image-name' ,
'Caption text'
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send image file base64
await client . sendImageFromBase64 ( '[email protected]' , base64Image , "name file" )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send file (venom will take care of mime types, just need the path)
// you can also upload an image using a valid HTTP protocol
await client
. sendFile (
'[email protected]' ,
'path/to/file.pdf' ,
'file_name' ,
'See my file in pdf'
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Sends file
// base64 parameter should have mime type already defined
await client
. sendFileFromBase64 (
'[email protected]' ,
base64PDF ,
'file_name.pdf' ,
'See my file in pdf'
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Generates sticker from the provided animated gif image and sends it (Send image as animated sticker)
// image path imageBase64 A valid gif and webp image is required. You can also send via http/https (http://www.website.com/img.gif)
await client
. sendImageAsStickerGif ( '[email protected]' , './image.gif' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Generates sticker from given image and sends it (Send Image As Sticker)
// image path imageBase64 A valid png, jpg and webp image is required. You can also send via http/https (http://www.website.com/img.jpg)
await client
. sendImageAsSticker ( '[email protected]' , './image.jpg' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Forwards messages
await client . forwardMessages (
'[email protected]' ,
[ '[email protected]_B70847EE89E22D20FB86ECA0C1B11609' , '[email protected]_B70847EE89E22D20FB86ECA0C1B11777' ]
) . then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send @tagged message
await client . sendMentioned (
'[email protected]' ,
'Hello @5218113130740 and @5218243160777!' ,
[ '5218113130740' , '5218243160777' ]
) ;
// Reply to a message
await client . reply (
'[email protected]' ,
'This is a reply!' ,
'[email protected]_7C22WHCB6DKYHJKQIEN9'
) . then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} ) . catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Send message with options
await client .
. sendMessageOptions (
'[email protected]' ,
'This is a reply!' ,
{
quotedMessageId : reply ,
}
)
. then ( ( retorno ) => {
resp = retorno ;
} )
. catch ( ( e ) => {
console . log ( e ) ;
} ) ;
// Send gif
await client . sendVideoAsGif (
'[email protected]' ,
'path/to/video.mp4' ,
'video.gif' ,
'Gif image file'
) ;
//checks and returns whether a message and a reply
// exemple:
// await client.onMessage(async (message) => {
// console.log(await client.returnReply(message)); // replicated message
// console.log(message.body ); //customer message
// })
checkReply = await client . returnReply ( messagem ) ;
// Send seen ✔️✔️
await client . sendSeen ( '[email protected]' ) ;
// Start typing...
await client . startTyping ( '[email protected]' ) ;
// Set chat state (0: Typing, 1: Recording, 2: Paused)
await client . setChatState ( '[email protected]' , 0 | 1 | 2 ) ; // Retrieve all chats
const chats = await client . getAllChats ( ) ;
//Retrieves all chats new messages
const chatsAllNew = getAllChatsNewMsg ( ) ;
//Retrieves all chats Contacts
const contacts = await client . getAllChatsContacts ( ) ;
//Retrieve all contacts new messages
const contactNewMsg = await client . getChatContactNewMsg ( ) ;
// Retrieve all groups
// you can pass the group id optional use, exemple: client.getAllChatsGroups('[email protected]')
const chats = await client . getAllChatsGroups ( ) ;
//Retrieve all groups new messages
const groupNewMsg = await client . getChatGroupNewMsg ( ) ;
//Retrieves all chats Transmission list
const transmission = await client . getAllChatsTransmission ( ) ;
// Retrieve contacts
const contacts = await client . getAllContacts ( ) ;
// Returns a list of mute and non-mute users
// "all" List all mutes
// "toMute" List all silent chats
// "noMute" List all chats without silence
const listMute = await client . getListMute ( 'all' ) ;
// Calls your list of blocked contacts (returns an array)
const getBlockList = await client . getBlockList ( ) ;
// Retrieve messages in chat
//chatID chat id
//includeMe will be by default true, if you do not want to pass false
//includeNotifications will be by default true, if you do not want to pass false
//const Messages = await client.getAllMessagesInChat(chatID, includeMe, includeNotifications)
const Messages = await client . getAllMessagesInChat ( '[email protected]' ) ;
// Retrieve more chat message
const moreMessages = await client . loadEarlierMessages ( '[email protected]' ) ;
// Retrieve all messages in chat
const allMessages = await client . loadAndGetAllMessagesInChat (
'[email protected]'
) ;
// Retrieve contact status
const status = await client . getStatus ( '[email protected]' ) ;
// Retrieve user profile
// Please note that this function does not currently work due to a bug in WhatsApp itself.
// There is no telling if or when this function might work again.
const user = await client . getNumberProfile ( '[email protected]' ) ;
// Retrieve all unread message
const messages = await client . getUnreadMessages ( ) ;
// Retrieve profile fic (as url)
const url = await client . getProfilePicFromServer ( '[email protected]' ) ;
// Retrieve chat/conversation
const chat = await client . getChat ( '[email protected]' ) ;
// Check if the number exists
const chat = await client
. checkNumberStatus ( '[email protected]' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ; // groupId or chatId: leaveGroup [email protected]
//change group description
await client
. setGroupDescription ( '[email protected]' , 'group description' )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Leave group
await client . leaveGroup ( '[email protected]' ) ;
// Get group members
await client . getGroupMembers ( '[email protected]' ) ;
// Get group members ids
await client . getGroupMembersIds ( '[email protected]' ) ;
// Generate group invite url link
await client . getGroupInviteLink ( '[email protected]' ) ;
// Create group (title, participants to add)
await client . createGroup ( 'Group name' , [
'[email protected]' ,
'[email protected]'
] ) ;
// Remove participant
await client . removeParticipant ( '[email protected]' , '[email protected]' ) ;
// Add participant
await client . addParticipant ( '[email protected]' , '[email protected]' ) ;
// Promote participant (Give admin privileges)
await client . promoteParticipant ( '[email protected]' , '[email protected]' ) ;
// Demote particiapnt (Revoke admin privileges)
await client . demoteParticipant ( '[email protected]' , '[email protected]' ) ;
// Get group admins
await client . getGroupAdmins ( '[email protected]' ) ;
// Return the group status, jid, description from it's invite link
await client . getGroupInfoFromInviteLink ( InviteCode ) ;
// Join a group using the group invite code
await client . joinGroup ( InviteCode ) ; // Set client status
await client . setProfileStatus ( 'On vacations! ✈️' ) ;
// Set client profile name
await client . setProfileName ( 'Venom bot' ) ;
// Set client profile photo
await client . setProfilePic ( 'path/to/image.jpg' ) ;
// Get device info
await client . getHostDevice ( ) ; // Disconnect from service
await client . logout ( ) ;
// Delete the Service Worker
await client . killServiceWorker ( ) ;
// Load the service again
await client . restartService ( ) ;
// Get connection state
await client . getConnectionState ( ) ;
// Get battery level
await client . getBatteryLevel ( ) ;
// Is connected
await client . isConnected ( ) ;
// Get whatsapp web version
await client . getWAVersion ( ) ; //Listens to all new messages
//To receiver or recipient
client . onAnyMessage ( message => {
...
} ;
// Listen to messages
client . onMessage ( message => {
...
} )
// Listen for messages that have been edited
client . onMessageEdit ( message => {
...
} )
// Listen for messages that have been deleted
client . onMessageDelete ( message => {
...
} )
// Listen to state changes
client . onStateChange ( state => {
...
} ) ;
// Listen to ack's
// See the status of the message when sent.
// When receiving the confirmation object, "ack" may return a number, look {@link AckType} for details:
// -7 = MD_DOWNGRADE,
// -6 = INACTIVE,
// -5 = CONTENT_UNUPLOADABLE,
// -4 = CONTENT_TOO_BIG,
// -3 = CONTENT_GONE,
// -2 = EXPIRED,
// -1 = FAILED,
// 0 = CLOCK,
// 1 = SENT,
// 2 = RECEIVED,
// 3 = READ,
// 4 = PLAYED =
client . onAck ( ack => {
...
} ) ;
// Listen to live location
// chatId: '[email protected]'
client . onLiveLocation ( "[email protected]" , ( liveLocation ) => {
...
} ) ;
// chatId looks like this: '[email protected]'
// Event interface is in here: https://github.com/s2click/venom/blob/master/src/api/model/participant-event.ts
client . onParticipantsChanged ( "[email protected]" , ( event ) => {
...
} ) ;
// Listen when client has been added to a group
client . onAddedToGroup ( chatEvent => {
...
} ) ; //Check if there is chat
await client
. checkChat ( chatId )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Pin chat and Unpin chat messages with true or false
// Pin chat, non-existent (optional)
await client
. pinChat ( chatId , true , false )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
///mute a contact
await client
. sendMute (
'[email protected]' , //contact mute
30 , //duration of silence, example: 30 minutes
'minutes' ///kind of silence "hours" "minutes" "year"
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
///unmute contact
await client
. sendMute (
'[email protected]' //contact unmute
)
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Change the theme
// string types "dark" or "light"
await client . setTheme ( 'dark' ) ;
// Receive the current theme
// returns string light or dark
await client . getTheme ( ) ;
// Delete chat
await client . deleteChat ( '[email protected]' ) ;
// Clear chat messages
await client . clearChatMessages ( '[email protected]' ) ;
// Archive and unarchive chat messages with true or false
await client . archiveChat ( chatId , true ) ;
// Delete message (last parameter: delete only locally)
await client
. deleteMessage ( '[email protected]' , [
'[email protected]_B70847EE89E22D20FB86ECA0C1B11609' ,
'[email protected]_B70847EE89E22D20FB86ECA0C1B11777'
] )
. then ( ( result ) => {
console . log ( 'Result: ' , result ) ; //return object success
} )
. catch ( ( erro ) => {
console . error ( 'Error when sending: ' , erro ) ; //return object error
} ) ;
// Mark chat as not seen (returns true if it works)
await client . markUnseenMessage ( '[email protected]' ) ;
// Blocks a user (returns true if it works)
await client . blockContact ( '[email protected]' ) ;
// Unlocks contacts (returns true if it works)
await client . unblockContact ( '[email protected]' ) ; 毒液をよりよく使用するためのいくつかのトリックがあります。
// function to detect conflits and change status
// Force it to keep the current session
// Possible state values:
// CONFLICT
// CONNECTED
// DEPRECATED_VERSION
// OPENING
// PAIRING
// PROXYBLOCK
// SMB_TOS_BLOCK
// TIMEOUT
// TOS_BLOCK
// UNLAUNCHED
// UNPAIRED
// UNPAIRED_IDLE
client . onStateChange ( ( state ) => {
console . log ( 'State changed: ' , state ) ;
// force whatsapp take over
if ( 'CONFLICT' . includes ( state ) ) client . useHere ( ) ;
// detect disconnect on whatsapp
if ( 'UNPAIRED' . includes ( state ) ) console . log ( 'logout' ) ;
} ) ;
// DISCONNECTED
// SYNCING
// RESUMING
// CONNECTED
let time = 0 ;
client . onStreamChange ( ( state ) => {
console . log ( 'State Connection Stream: ' + state ) ;
clearTimeout ( time ) ;
if ( state === 'DISCONNECTED' || state === 'SYNCING' ) {
time = setTimeout ( ( ) => {
client . close ( ) ;
} , 80000 ) ;
}
} ) ;
// function to detect incoming call
client . onIncomingCall ( async ( call ) => {
console . log ( call ) ;
client . sendText ( call . peerJid , "Sorry, I still can't answer calls" ) ;
} ) ; セッションを適切に閉じて、次にログインするときにセッションが保存されていることを確認します(QRスキャンを再度要求しません)。したがって、ctrl+cの代わりに、
// Catch ctrl+C
process . on ( 'SIGINT' , function ( ) {
client . close ( ) ;
} ) ;
// Try-catch close
try {
...
} catch ( error ) {
client . close ( ) ;
}デフォルトではオートクローズが有効になり、タイムアウトは60秒に設定されています。ペアになるまでカウントダウンするためにミリ秒単位で時間を受け取ります。
「Autoclose:0 | False」を使用して、自動閉鎖を無効にします。
venomオプションの一部としてwebVersion引数を渡すことにより、WhatsApp Webのキャッシュバージョンを使用できます。
venom . create ( {
session : 'sessionname' , //name of session
headless : false ,
logQR : true ,
webVersion : '2.2402.5'
} )
. then ( ( client ) => {
start ( client ) ;
} ) ;この機能は、https://github.com/wppconnect-team/wa-version/tree/main/htmlのリストで利用可能な任意のバージョンを使用できます
ヴェノムの構築は本当に簡単ですが、内部には3つの主要なプロジェクトが含まれています
> npm run build:wapi > npm run build:middleware
> npm run build:jsQR > npm run build:venomプロジェクト全体を構築するには、実行するだけです
> npm run buildメンテナーが必要です。私は自分ですべての更新を維持することはできません。興味がある場合は、プルリクエストを開いてください。
プルリクエストは大歓迎です。大きな変更については、最初に問題を開いて、何を変えたいかを議論してください。