Sulla เป็นไลบรารีจาวาสคริปต์ที่ให้การควบคุม API ระดับสูงแก่ Whatsapp ดังนั้นจึงสามารถกำหนดค่าให้ตอบกลับอัตโนมัติหรือข้อมูลใด ๆ ที่ส่งผ่าน Whatsapp ได้อย่างง่ายดาย
มันถูกสร้างขึ้นโดยใช้หุ่นเชิด
ในเวอร์ชัน 2.3.5
ดูเหมือนว่า sulla จะมีฟังก์ชันและสถาปัตยกรรมที่สมบูรณ์และเสถียรมาก เท่าที่ฉันต้องการ ฉันไม่สามารถอุทิศเวลาให้กับโปรเจ็กต์นี้ได้มากนัก ดังนั้นโปรดพิจารณาลองใช้ sulla เวอร์ชันที่แยกออกมา ซึ่งนักพัฒนารายอื่นสามารถอุทิศเวลาและสนับสนุนได้มากขึ้น
แนะนำให้สนับสนุนโครงการที่ใช้ซัลลาอย่างจริงจัง:
พิษ
wppconnect
open-wa/wa-อัตโนมัติ
> npm i sulla --save
// Supports ES6
// import { create, Whatsapp } from 'sulla';
const sulla = require ( 'sulla' ) ;
sulla . create ( ) . then ( ( client ) => start ( client ) ) ;
function start ( client ) {
client . onMessage ( ( message ) => {
if ( message . body === 'Hi' ) {
client . sendText ( message . from , ' Hello from sulla!' ) ;
}
} ) ;
}
create()
แล้ว sulla จะสร้างอินสแตนซ์ของ whatsapp web หากคุณไม่ได้เข้าสู่ระบบ ระบบจะพิมพ์รหัส QR ในเทอร์มินัล สแกนด้วยโทรศัพท์ของคุณแล้วคุณก็พร้อมที่จะไป! create()
ฟังก์ชัน: // Init sales whatsapp bot
sulla . create ( 'sales' ) . then ( ( salesClient ) => { ... } ) ;
// Init support whatsapp bot
sulla . create ( 'support' ) . then ( ( supportClient ) => { ... } ) ;
พารามิเตอร์ที่สามของเมธอด Sulla create()
สามารถมีพารามิเตอร์ทางเลือกต่อไปนี้:
create ( 'sessionName' , qrCallback , {
headless : true , // Headless chrome
devtools : false , // Open devtools by default
useChrome : true , // If false will use Chromium instance
debug : false , // Opens a debug session
logQR : true // Logs QR automatically in terminal
browserArgs : [ '' ] // Parameters to be added into the chrome browser instance
refreshQR : 15000 , // Will refresh QR every 15 seconds, 0 will load QR once. Default is 30 seconds
} ) ;
ตามค่าเริ่มต้นรหัส QR จะปรากฏบนเทอร์มินัล หากคุณต้องการส่ง QR ไปที่อื่น ให้ทำดังนี้:
const fs = require ( 'fs' ) ;
// Second create() parameter is the QR callback
sulla . create ( 'session-marketing' , ( base64Qr , asciiQR ) => {
// To log the QR in the terminal
console . log ( asciiQR ) ;
// To write it somewhere else in a file
exportQR ( base64Qr , 'marketing-qr.png' ) ;
} ) ;
// Writes QR in specified path
function exportQR ( qrCode , path ) {
qrCode = qrCode . replace ( 'data:image/png;base64,' , '' ) ;
const imageBuffer = Buffer . from ( qrCode , 'base64' ) ;
// Creates 'marketing-qr.png' file
fs . writeFileSync ( path , imageBuffer ) ;
}
Puppeteer ดูแลการดาวน์โหลดไฟล์ การถอดรหัสจะดำเนินการโดยเร็วที่สุด (เร็วกว่าวิธีดั้งเดิม) รองรับไฟล์ขนาดใหญ่!
import fs = require ( 'fs' ) ;
import mime = require ( 'mime-types' ) ;
client . onMessage ( async ( message ) => {
if ( message . isMedia ) {
const buffer = await client . downloadFile ( 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 , function ( err ) {
...
} ) ;
}
} ) ;
ไม่ได้มีการระบุฟังก์ชันทุกฟังก์ชันไว้ หากต้องการดูเพิ่มเติม ทุกฟังก์ชันที่มีสามารถพบได้ที่นี่และที่นี่
chatId
อาจเป็น @c.us
หรือ -@c.us
// Send basic text
await client . sendText ( chatId , ' Hello from sulla!' ) ;
// Send image
await client . sendImage (
chatId ,
'path/to/img.jpg' ,
'image-name.jpg' ,
'Caption text'
) ;
// Send @tagged message
await client . sendMentioned ( chatId , 'Hello @5218113130740 and @5218243160777!' , [
'5218113130740' ,
'5218243160777' ,
] ) ;
// Reply to a message
await client . reply ( chatId , 'This is a reply!' , message . id . toString ( ) ) ;
// Send file (sulla will take care of mime types, just need the path)
await client . sendFile ( chatId , 'path/to/file.pdf' , 'cv.pdf' , 'Curriculum' ) ;
// Send gif
await client . sendVideoAsGif (
chatId ,
'path/to/video.mp4' ,
'video.gif' ,
'Gif image file'
) ;
// Send contact
// contactId: [email protected]
await client . sendContact ( chatId , contactId ) ;
// Forwards messages
await client . forwardMessages ( chatId , [ message . id . toString ( ) ] , true ) ;
// Send sticker
await client . sendImageAsSticker ( chatId , 'path/to/image.jpg' ) ;
// Send location
await client . sendLocation (
chatId ,
25.6801987 ,
- 100.4060626 ,
'Some address, Washington DC' ,
'Subtitle'
) ;
// Send seen ✔️✔️
await client . sendSeen ( chatId ) ;
// Start typing...
await client . startTyping ( chatId ) ;
// Stop typing
await client . stopTyping ( chatId ) ;
// Set chat state (0: Typing, 1: Recording, 2: Paused)
await client . setChatState ( chatId , 0 | 1 | 2 ) ;
// Retrieve contacts
const contacts = await client . getAllContacts ( ) ;
// Retrieve all messages in chat
const allMessages = await client . loadAndGetAllMessagesInChat ( chatId ) ;
// Retrieve contact status
const status = await client . getStatus ( contactId ) ;
// Retrieve user profile
const user = await client . getNumberProfile ( contactId ) ;
// Retrieve all unread message
const messages = await client . getAllUnreadMessages ( ) ;
// Retrieve all chats
const chats = await client . getAllChats ( ) ;
// Retrieve all groups
const chats = await client . getAllGroups ( ) ;
// Retrieve profile fic (as url)
const url = await client . getProfilePicFromServer ( chatId ) ;
// Retrieve chat/conversation
const chat = await client . getChat ( chatId ) ;
// groupId or chatId: leaveGroup [email protected]
// Leave group
await client . leaveGroup ( groupId ) ;
// Get group members
await client . getGroupMembers ( groupId ) ;
// Get group members ids
await client . getGroupMembersIds ( groupId ) ;
// Generate group invite url link
await client . getGroupInviteLink ( groupId ) ;
// Create group (title, participants to add)
await client . createGroup ( 'Group name' , [ '[email protected]' , '[email protected]' ] ) ;
// Remove participant
await client . removeParticipant ( groupId , '[email protected]' ) ;
// Add participant
await client . addParticipant ( groupId , '[email protected]' ) ;
// Promote participant (Give admin privileges)
await client . promoteParticipant ( groupId , '[email protected]' ) ;
// Demote particiapnt (Revoke admin privileges)
await client . demoteParticipant ( groupId , '[email protected]' ) ;
// Get group admins
await client . getGroupAdmins ( groupId ) ;
// Set client status
await client . setProfileStatus ( 'On vacations! ✈️' ) ;
// Set client profile name
await client . setProfileName ( 'Sulla bot' ) ;
// Get device info
await client . getHostDevice ( ) ;
// Get connection state
await client . getConnectionState ( ) ;
// Get battery level
await client . getBatteryLevel ( ) ;
// Is connected
await client . isConnected ( ) ;
// Get whatsapp web version
await client . getWAVersion ( ) ;
// Listen to messages
client . onMessage ( message => {
...
} )
// Listen to state changes
client . onStateChange ( state => {
...
} ) ;
// Listen to ack's
client . onAck ( ack => {
...
} ) ;
// Listen to live location
// chatId: '[email protected]'
client . onLiveLocation ( chatId , ( liveLocation ) => {
...
} ) ;
// chatId looks like this: '[email protected]'
// Event interface is in here: https://github.com/danielcardeenas/sulla/blob/master/src/api/model/participant-event.ts
client . onParticipantsChanged ( chatId , ( event ) => {
...
} ) ;
// Listen when client has been added to a group
client . onAddedToGroup ( chatEvent => {
...
} ) ;
// Delete chat
await client . deleteChat ( chatId ) ;
// Clear chat messages
await client . clearChat ( chatId ) ;
// Delete message (last parameter: delete only locally)
await client . deleteMessage ( chatId , message . id . toString ( ) , false ) ;
// Retrieve a number profile / check if contact is a valid whatsapp number
const profile = await client . getNumberProfile ( '[email protected]' ) ;
มีเคล็ดลับบางประการสำหรับการใช้ซัลลาที่ดีขึ้น
// In case of being logged out of whatsapp web
// Force it to keep the current session
// State change
client . onStateChange ( ( state ) => {
console . log ( state ) ;
const conflits = [
sulla . SocketState . CONFLICT ,
sulla . SocketState . UNPAIRED ,
sulla . SocketState . UNLAUNCHED ,
] ;
if ( conflits . includes ( state ) ) {
client . useHere ( ) ;
}
} ) ;
ดูลิงก์ Whatsapp ด้วย ระวังเนื่องจากสิ่งนี้อาจทำให้เกิดการแบนจาก Whatsapp ได้ โปรดอัปเดตผู้ติดต่อของคุณอยู่เสมอ!
await client . sendMessageToId ( '[email protected]' , 'Hello from sulla! ' ) ;
หากคุณต้องการเรียกใช้หลายเซสชันพร้อมกัน เพียงแค่ส่งชื่อเซสชันเพื่อสร้างเมธอด create()
async ( ) => {
const marketingClient = await sulla . create ( 'marketing' ) ;
const salesClient = await sulla . create ( 'sales' ) ;
const supportClient = await sulla . create ( 'support' ) ;
} ;
ปิดเซสชั่นอย่างถูกต้องเพื่อให้แน่ใจว่าเซสชั่นจะถูกบันทึกไว้ในครั้งต่อไปที่คุณเข้าสู่ระบบ (ดังนั้นมันจะไม่ขอสแกน QR อีกครั้ง) ดังนั้นแทนที่จะกด CTRL+C
// Catch ctrl+C
process . on ( 'SIGINT' , function ( ) {
client . close ( ) ;
} ) ;
// Try-catch close
try {
...
} catch ( error ) {
client . close ( ) ;
}
การสร้างซัลลานั้นง่ายมากแม้ว่าจะมี 3 โปรเจ็กต์หลักอยู่ภายในก็ตาม
> npm run build:wapi
> npm run build:build:middleware
> npm run build:jsQR
> npm run build:sulla
หากต้องการสร้างโครงการทั้งหมดเพียงแค่เรียกใช้
> npm run build
จำเป็นต้องมีผู้ดูแล ฉันไม่สามารถติดตามการอัปเดตทั้งหมดได้ด้วยตัวเอง หากคุณสนใจกรุณาเปิด Pull Request
ยินดีต้อนรับคำขอดึง สำหรับการเปลี่ยนแปลงที่สำคัญ โปรดเปิดประเด็นก่อนเพื่อหารือเกี่ยวกับสิ่งที่คุณต้องการเปลี่ยนแปลง