โปรเจ็กต์นี้ได้รับการพัฒนาเพื่อช่วยชุมชนที่ใช้ Whatsapp เป็นแนวทางในการปรับใช้ API อย่างรวดเร็วและมีประสิทธิภาพ สำหรับบริษัท และอื่นๆ อีกมากมาย! ขอบคุณที่เป็นส่วนหนึ่งของครอบครัวนี้
คุณสามารถใช้โปรเจ็กต์นี้ได้สองวิธี วิธีแรกคือการใช้บริการเว็บโดยใช้ชุดการดำเนินการที่กำหนดไว้อย่างดี วิธี POST, GET, PUT และ DELETE ตัวเลือกที่สองคือการใช้บอทในรูปแบบ Raw โดยไม่ต้องใช้เว็บ บริการ.
คุณมีข้อสงสัยหรือไม่? ต้องการความช่วยเหลือ? เข้าร่วมกลุ่ม Whatsapp ของเราและถามคำถามของคุณกับคนอื่นๆ!
ใช้เวอร์ชันเสถียร:
> npm i --save hydra-bot
หรือสำหรับการเผยแพร่ตอนกลางคืน:
> npm ฉัน --บันทึก https://github.com/jonalan7/Hydra-bot/releases/download/nightly/hydra-nightly.tgz
ผู้ดูแลระบบเทอร์มินัล:
> แอดมินเส้นด้าย
ติดตั้งเส้นด้าย Ubuntu:
> curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -> echo "deb https://dl.yarnpkg.com/debian/ หลักที่เสถียร" | sudo tee /etc/apt/sources.list.d/yarn.list> อัปเดต sudo apt && sudo apt ติดตั้งเส้นด้าย> เส้นด้าย
บริการจะเริ่มบน localhost บนพอร์ต 8080
const hydraBot = ต้องการ ('hydra-bot'); (async () => { // เริ่มบริการเว็บ const WS = รอ hydraBot.initWs();})();
หากคุณต้องการทำงานในโหมดฟรีโดยใช้เพียงบอท เช็ดข้อมูลที่จำเป็นให้แห้ง!
const hydraBot = ต้องการ ('hydra-bot'); const mime = ต้องการ ('mime-types'); const fs = ต้องการ ('fs'); (async () => { ให้ลูกค้า; // เริ่มบริการบอท const ev = รอ hydraBot.initServer(); // กลับสู่อินเทอร์เฟซ Whatsapp ปัจจุบัน ev.on('interfaceChange', (เปลี่ยน) => {console.log('interfaceChange: ', เปลี่ยน); - // ส่งคืนพารามิเตอร์ qrcode ev.on('qrcode', (qrcode) => {console.log('qrcode: ', qrcode); - // ส่งคืนข้อมูลการเชื่อมต่อ ev.on('connection', async (conn) => {// ข้อมูลเบราว์เซอร์!if (conn.statusFind === 'browser') { console.log('info Browser: ', conn.text);}/ / เชื่อมต่อกับ whatsapp chatif (conn.connect) { client = conn.client; // class client จาก hydra-bot const getMe = await client.getHost(); getMe.id._serialized; // number host console.log('Host Number: ', hostNumber); // ส่งข้อความ await client.sendMessage({ ถึง: hostNumber, // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่มได้ body: "สวัสดี ฉันชื่อไฮดราบอต", // ตัวเลือกข้อความ: {type: 'sendText', // ประเภทการจัดส่ง },}).then((result) => { console.log(result); // ข้อความ ผลลัพธ์}).catch((ข้อผิดพลาด) => { console.log(ข้อผิดพลาด); // ข้อผิดพลาดของข้อความ});} - // กลับได้รับข้อความใหม่ ev.on('newMessage', async (newMsg) => {// เมื่อได้รับ if (!newMsg.result.fromMe) { // ได้รับข้อความแล้ว! console.log('NewMessageReceived: ', newMsg.result); // ดาวน์โหลดไฟล์ if (newMsg.result.isMedia) {const buffer = await client.decryptFile(newMsg.result);// ณ จุดนี้ คุณสามารถทำอะไรก็ได้ ต้องการด้วยบัฟเฟอร์// เป็นไปได้มากว่าคุณต้องการเขียนมันลงใน fileconst fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile(fileName, buffer, (err ) => { if (err) {console.log(err); }}); }}// จะส่งเมื่อไร (!!newMsg.result.fromMe) { // ส่งข้อความแล้ว console.log('NewMessageSent: ', newMsg.result);} - // ส่งคืนสถานะของแต่ละข้อความ ev.on('newOnAck', async (event) => {console.log('id Message: ', event.result.id._serialized); // ข้อความ idconsole.log('ข้อความสถานะ: ', event.result .ack); // -7 = MD_DOWNGRADE, -6 = ไม่ใช้งาน, -5 = CONTENT_UNUPLOADABLE, -4 = CONTENT_TOO_BIG, -3 = CONTENT_GONE, -2 = หมดอายุ, -1 = ล้มเหลว, 0 = นาฬิกา, 1 = ส่งแล้ว, 2 = ได้รับแล้ว, 3 = อ่านแล้ว, 4 = PLAYEDconsole.log('จากข้อความ: ', event.result.from); // จาก messageconsole.log('ถึงข้อความ:', event.result.to); // ถึงข้อความ -
Puppeteer ดูแลการดาวน์โหลดไฟล์ การถอดรหัสจะดำเนินการโดยเร็วที่สุด (เร็วกว่าวิธีดั้งเดิม) รองรับไฟล์ขนาดใหญ่!
const hydraBot = ต้องการ ('hydra-bot'); const fs = ต้องการ ('fs'); const mime = ต้องการ ('mime-types'); (async () => { ให้ลูกค้า; // เริ่มบริการบอท const ev = รอ hydraBot.initServer(); // ส่งคืนข้อมูลการเชื่อมต่อ ev.on('connection', async (conn) => {// เชื่อมต่อกับ whatsapp chatif (conn.connect) { client = conn.client;} - ev.on('newMessage', async (newMsg) => {// เมื่อได้รับ if (!newMsg.result.fromMe) { // ได้รับข้อความแล้ว! console.log('NewMessageReceived: ', newMsg.result); // dowload ไฟล์ if (newMsg.result.isMedia) {const buffer = await client.decryptFile(newMsg.result);// ณ จุดนี้ คุณสามารถทำอะไรก็ได้ ต้องการด้วยบัฟเฟอร์// เป็นไปได้มากว่าคุณต้องการเขียนมันลงใน fileconst fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile(fileName, buffer, (err ) => { ถ้า (ผิดพลาด) {console.log( }}); -
const hydraBot = ต้องการ ('hydra-bot'); hydraBot.initServer ({ session: 'session', // ชื่อของโทเค็นที่จะสร้าง โฟลเดอร์ที่มีข้อมูลลูกค้าทั้งหมดจะถูกสร้างขึ้น pathNameToken: 'token', // เส้นทางและชื่อของโฟลเดอร์ที่จะบันทึกโทเค็นไคลเอ็นต์ printQRInTerminal: true, // QR CODE จะถูกพิมพ์บนเทอร์มินัลหากเป็นจริง UpdatesLog: จริง // บันทึกข้อมูลอัปเดตโดยอัตโนมัติในเทอร์มินัล timeAutoClose: 60000, // หากคุณไม่อ่าน QR CODE ตามค่าเริ่มต้นเป็นเวลา 60 วินาที มันจะปิดเบราว์เซอร์ของลูกค้าโดยอัตโนมัติเพื่อประหยัดหน่วยความจำ หากคุณต้องการปิดการใช้งาน ให้ตั้งค่า 0 หรือเท็จ mkdirFolderToken: '', // เส้นทางโฟลเดอร์ Token ภายในโครงการเท่านั้น puppeteerOptions: {headless: true, // เริ่มโปรเจ็กต์โดยเปิดเบราว์เซอร์หรือไม่!args: [], // อาร์กิวเมนต์เพิ่มเติมที่จะส่งผ่านไปยังอินสแตนซ์ของเบราว์เซอร์ การเพิ่มพารามิเตอร์ใด ๆ ที่คุณจะแทนที่ args เริ่มต้นของ projectexecutablePath: 'useChrome' // เบราว์เซอร์ที่จะใช้สำหรับโครงการ คุณสามารถระบุเส้นทางได้ หากคุณไม่ผ่านพารามิเตอร์ใด ๆ มันจะเปิดเบราว์เซอร์ที่ติดตั้ง -
const hydraBot = ต้องการ ('hydra-bot'); hydraBot.initWs ({ โฮสต์เซิร์ฟเวอร์: 'http://localhost', พอร์ต: '8080', url: '', // ชี้ URL เพื่อรับการติดต่อกลับ! การรับรองความถูกต้อง: จริง // ขอการรับรองความถูกต้องในเส้นทาง pathNameToken: 'token', // เส้นทางและชื่อของโฟลเดอร์ที่จะบันทึกโทเค็นไคลเอ็นต์ printQRInTerminal: true, // QR CODE จะถูกพิมพ์บนเทอร์มินัลหากเป็นจริง UpdatesLog: จริง // บันทึกข้อมูลอัปเดตโดยอัตโนมัติในเทอร์มินัล timeAutoClose: 60000, // หากคุณไม่อ่าน QR CODE ตามค่าเริ่มต้นเป็นเวลา 60 วินาที มันจะปิดเบราว์เซอร์ของลูกค้าโดยอัตโนมัติเพื่อประหยัดหน่วยความจำ หากคุณต้องการปิดการใช้งาน ให้ตั้งค่า 0 หรือเท็จ mkdirFolderToken: '', // เส้นทางโฟลเดอร์ Token ภายในโครงการเท่านั้น puppeteerOptions: {headless: true, // เริ่มโปรเจ็กต์โดยเปิดเบราว์เซอร์หรือไม่!args: [], // อาร์กิวเมนต์เพิ่มเติมที่จะส่งผ่านไปยังอินสแตนซ์ของเบราว์เซอร์ การเพิ่มพารามิเตอร์ใด ๆ ที่คุณจะแทนที่ args เริ่มต้นของ projectexecutablePath: 'useChrome' // เบราว์เซอร์ที่จะใช้สำหรับโครงการ คุณสามารถระบุเส้นทางได้ หากคุณไม่ผ่านพารามิเตอร์ใด ๆ มันจะเปิดเบราว์เซอร์ที่ติดตั้ง -
ในการเริ่มอินเทอร์เฟซการดูแลระบบให้ใช้:
> แอดมินเส้นด้าย
รายการคำสั่งในเทอร์มินัล:
สั่งการ | คำอธิบาย |
---|---|
/create | สร้างผู้ใช้ |
/delete | ลบผู้ใช้ |
/selectid | แสดงผู้ใช้ตามรหัส |
/selectname | เลือกผู้ใช้ตามชื่อ |
/getall | รายชื่อผู้ใช้ทั้งหมด |
/deactivate | ปิดการใช้งานผู้ใช้ |
/activate | เปิดใช้งานผู้ใช้ |
/changename | เปลี่ยนชื่อผู้ใช้ |
/password | เปลี่ยนรหัสผ่านผู้ใช้ |
/cls | ล้างหน้าจอ/เทอร์มินัล |
/help | แสดงรายการคำสั่งทั้งหมดสำหรับการดูแลระบบในเทอร์มินัล |
/exit | ออกจากผู้จัดการ |
REST API
Headers
เพื่อให้สามารถเข้าถึงได้ เพื่อสร้างผู้ดูแลระบบ{ "ประเภทเนื้อหา": "application/json", "admin": "admin", "admin_pass": "admin"}
พิมพ์ | เส้นทางไปยังเบราว์เซอร์ | คำอธิบาย | ร่างกาย |
---|---|---|---|
โพสต์ | /create_user | สร้างผู้ใช้ | {"name":"USE","password":"USER PASSWORD"} |
เดล | /delete_user/ID_USE | ลบผู้ใช้ | EMPTY |
รับ | /get_user_by_id/ID_USE | แสดงผู้ใช้ตาม ID | EMPTY |
รับ | /get_all_users | รายชื่อผู้ใช้ทั้งหมด | EMPTY |
ใส่ | /deactivate_user | ปิดการใช้งานผู้ใช้ | {"id":"USER ID"} |
ใส่ | /activate_user | เปิดใช้งานผู้ใช้ | {"id":"USER ID"} |
ใส่ | /change_name | เปลี่ยนชื่อผู้ใช้ | {"id":"USER ID","name":"NEW USERNAME"} |
ใส่ | /change_password | เปลี่ยนรหัสผ่านผู้ใช้ | {"id":"USER ID","password":"NEW SECURE PASSWORD"} |
หมายเหตุ: พารามิเตอร์สามารถเปลี่ยนแปลงได้ในระหว่างการพัฒนา!
Headers
ของผู้ใช้ (ค่าเริ่มต้น ชื่อผู้ใช้ = 'ผู้ใช้' รหัสผ่าน = 'ผู้ใช้')ส่วนหัวจะต้องมีการกำหนดพารามิเตอร์เป็น:
{ "ประเภทเนื้อหา": "application/json", "ผู้ใช้": "ผู้ใช้", "user_pass": "ผู้ใช้"}
หากคุณต้องการรับการติดต่อกลับใน URL ที่ระบุ ให้ส่งพารามิเตอร์ url ในเส้นทางการเชื่อมต่อ
พิมพ์ | เส้นทางไปยังเบราว์เซอร์ | คำอธิบาย | ร่างกาย |
---|---|---|---|
โพสต์ | /connect | เริ่มเชื่อมต่อกับ Whatsapp | { "url": "http://localhost:8080/webhooktest" } |
โพสต์ | /sendtext | ส่งข้อความไปที่หมายเลข | { "to": "contact number", "body": "message"} |
โพสต์ | /sendFile | ส่งไฟล์มาที่เบอร์ | { "to": "contact number", "file_path": "https://docs.marklogic.com/guide/node-dev.pdf", "file_name": "node.js" } |
โพสต์ | /sendAudio | ส่งเสียง | { "to": "contact number", "url_mp3": "https://cdn.freesound.org/previews/620/620094_4935038-lq.mp3", "file_name": "node.js" } |
โพสต์ | /sendImage | ส่งข้อความรูปภาพ | { "to": "contact number", "url_img": "https://i.pinimg.com/564x/a9/b1/18/a9b118761788b1ab260aae2835c468cd.jpg" } |
โพสต์ | /disconnect | กำลังตัดการเชื่อมต่อจากเซิร์ฟเวอร์ | ว่างเปล่า |
โพสต์ | /check_user | ตรวจสอบว่ามีผู้ใช้ที่ป้อนอยู่หรือไม่ | ว่างเปล่า |
พิมพ์ | เส้นทางไปยังเบราว์เซอร์ | คำอธิบาย | ร่างกาย |
---|---|---|---|
รับ | /get_all_contacts | ดึงข้อมูลผู้ติดต่อ | EMPTY |
รับ | /check_connect | ตรวจสอบว่าไคลเอนต์เชื่อมต่ออยู่หรือไม่ | EMPTY |
รับ | /last_qrcode | ตรวจสอบว่า QR-Code ทำงานอยู่หรือไม่ | EMPTY |
รับ | /screenshot | รับภาพหน้าจอ | EMPTY |
คุณต้องเข้าสู่ระบบเพื่อใช้ฟังก์ชั่นเหล่านี้!
to
เป็น <phone Number>@c.us
หรือ <phone Number>-<groupId>@g.us
หรือ <phone Number><groupId>@g.us
คุณสามารถส่งข้อความได้โดยใช้ฟังก์ชันเดียวเท่านั้น!
// ส่งข้อความรอลูกค้า .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่มได้: 'ข้อความที่ส่งโดย hydra-bot', // ตัวเลือกข้อความ: { type: 'sendText', // ประเภทการจัดส่ง}, - .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งไฟล์รอไคลเอ็นต์ .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่ม: './file.pdf', // คุณสามารถใช้ไดเร็กทอรีหรือใช้ urloptions: { type: ' sendFile', // ชื่อไฟล์ประเภทการจัดส่ง: 'ชื่อไฟล์', // ใส่ชื่อไฟล์ที่นี่}, - .then((result) => {console.log(result); // message result - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งไฟล์ audioawait ไคลเอ็นต์ .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่ม: './file.mp3', // คุณสามารถใช้ไดเร็กทอรีหรือใช้ urloptions: { type: ' sendAudio', // ประเภทการจัดส่ง}, - .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งไฟล์เสียง base64await ลูกค้า .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่ม: base64MP3, // คุณสามารถใช้ไดเร็กทอรีหรือใช้ urloptions: { type: 'sendAudioBase64', // shipping พิมพ์}, - .then((result) => {console.log(result); // message result - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งข้อความรูปภาพรอลูกค้า .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่ม: './file.jpg', // คุณสามารถใช้ไดเร็กทอรีหรือใช้ urloptions: { type: ' sendImage', // คำอธิบายประเภทการจัดส่ง: 'ข้อความรูปภาพ', // ข้อความรูปภาพ}, - .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งรูปภาพ Base64await ลูกค้า .sendMessage({to: '[email protected]', // คุณสามารถส่งหมายเลขติดต่อหรือหมายเลขกลุ่ม: base64IMG, // คุณสามารถใช้ไดเร็กทอรีหรือใช้ urloptions: { type: 'sendImageFromBase64', // shipping พิมพ์คำบรรยาย: 'ข้อความรูปภาพ', // ข้อความรูปภาพ}, - .then((result) => {console.log(result); // message result - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ -
// ส่งข้อความถึงลูกค้า Chatawait ที่กำหนด .sendText('[email protected]', 'ข้อความที่ส่งโดย hydra-bot') .then((result) => {console.log(result); // message result - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งไฟล์จากไคลเอ็นต์ pathawait .sendFile('[email protected]', './file.pdf', { ชื่อไฟล์: 'ชื่อไฟล์' }) .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งไฟล์เสียงรอไคลเอนต์ .sendAudio('[email protected]', './file.mp3') .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งเสียง base64await ลูกค้า .sendAudioBase64('[email protected]', base64MP3) .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งข้อความรูปภาพรอลูกค้า .sendImage('[email protected]', './file.jpg', { คำบรรยาย: 'ข้อความรูปภาพ' }) .then((result) => {console.log(result); // ผลลัพธ์ข้อความ - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ });// ส่งอิมเมจ base64await ลูกค้า .sendImageFromBase64('[email protected]', base64IMG, { คำอธิบายภาพ: 'ข้อความรูปภาพ' }) .then((result) => {console.log(result); // message result - .catch((error) => {console.log(error); // ข้อผิดพลาดของข้อความ -
// รับข้อมูลอุปกรณ์รอคอย client.getHost();
// ส่งคืนรายชื่อผู้ติดต่อ const ผู้ติดต่อ = aw