تم تطوير هذا المشروع لمساعدة المجتمع الذي يستخدم واتساب كوسيلة لتنفيذ واجهة برمجة التطبيقات (API) بسرعة وفعالية، للشركات وغير ذلك الكثير! شكرا لكونك جزءا من هذه العائلة.
يمكنك استخدام هذا المشروع بطريقتين، الأولى هي استخدام خدمات الويب باستخدام مجموعة من العمليات المحددة جيدًا، وهي أساليب POST وGET وPUT وDELETE، أما الخيار الثاني فهو استخدام الروبوت في شكله الخام، دون استخدام الويب خدمات.
هل لديك أي شك؟ بحاجة الى مساعدة؟ انضم إلى مجموعة الواتساب الخاصة بنا واطرح أسئلتك مع الآخرين!
استخدم الإصدار الثابت:
> npm i --save hydra-bot
أو للإصدارات الليلية:
> npm i - حفظ https://github.com/jonalan7/Hydra-bot/releases/download/nightly/hydra-nightly.tgz
مسؤول المحطة:
> مدير الغزل
تثبيت الغزل أوبونتو:
> الضفيرة -sS https://dl.yarnpkg.com/debian/pubkey.gpg | Sudo apt-key add -> echo "deb https://dl.yarnpkg.com/debian/ Stable main" | Sudo Tee /etc/apt/sources.list.d/yarn.list> Sudo apt update && sudo apt install الغزل> الغزل
سيتم بدء الخدمة على المضيف المحلي على المنفذ 8080
const hydraBot = require('hydra-bot');(async () => { // ابدأ خدمة الويب const WS = انتظار hydraBot.initWs();})();
إذا كنت ترغب في العمل في الوضع الحر، باستخدام الروبوت فقط، قم بتجفيف المعلومات الضرورية!
const hydraBot = require('hydra-bot');const mime = require('أنواع mime');const fs = require('fs');(async () => { دع العميل؛ // ابدأ خدمة الروبوت const ev = انتظار hydraBot.initServer(); // العودة إلى واجهة واتساب الحالية ev.on('interfaceChange', (change) => {console.log('interfaceChange: ', Change); }); // إرجاع معلمات رمز الاستجابة السريعة 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; getMe.id._serialized; // رقم المضيف console.log('رقم المضيف:', hostNumber); // إرسال رسالة نصية في انتظار العميل.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); // تنزيل الملفات إذا (newMsg.result.isMedia) {const buffer = انتظار 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:', events.result.id._serialized); // message idconsole.log('رسالة الحالة:', events.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('من الرسالة:'، events.result.from //)؛ من messageconsole.log('إلى الرسالة:', events.result.to // إلى الرسالة });})();
يتولى محرك الدمى مهمة تنزيل الملف. يتم فك التشفير بأسرع ما يمكن (يتجاوز الطرق الأصلية). يدعم الملفات الكبيرة!
const hydraBot = require('hydra-bot');const fs = require('fs');const mime = require('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); // تنزيل الملفات إذا (newMsg.result.isMedia) {const buffer = انتظار client.decryptFile(newMsg.result);// في في هذه النقطة، يمكنك فعل ما تريد باستخدام المخزن المؤقت// على الأرجح أنك تريد كتابته في fileconst fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile (اسم الملف، المخزن المؤقت، (يخطئ) => { إذا (يخطئ) {console.log(err); }} }); });})();
const hydraBot = require('hydra-bot');hydraBot.initServer({ جلسة: 'جلسة'، // اسم الرمز المميز الذي سيتم إنشاؤه، وسيتم إنشاء مجلد يحتوي على جميع معلومات العميل pathNameToken: 'token'، // مسار واسم المجلد الذي سيتم حفظ الرموز المميزة للعميل فيه printQRInTerminal: true، // ستتم طباعة رمز QR على الجهاز إذا كان صحيحًا updateLog: صحيح، // يتم تحديث معلومات السجلات تلقائيًا في الوحدة الطرفية timeAutoClose: 60000, // إذا لم تقرأ رمز QR افتراضيًا لمدة 60 ثانية، فسيتم إغلاق متصفح العميل تلقائيًا لحفظ الذاكرة، وإذا كنت تريد تعطيله، فاضبط 0 أو خطأ mkdirFolderToken: '', // مسار مجلد الرمز المميز، فقط داخل المشروع puppeteerOptions: {headless: true, // ابدأ المشروع والمتصفح مفتوح أم لا!args: [], // وسيطات إضافية لتمريرها إلى مثيل المتصفح. بإضافة أي معلمة، ستستبدل الوسائط الافتراضية للمشروع القابل للتنفيذ: 'useChrome'، // المتصفح الذي سيتم استخدامه للمشروع، يمكنك تحديد مسار، إذا لم تقم بتمرير أي معلمات، فسيتم فتح المتصفح المثبت. },});
const hydraBot = require('hydra-bot');hydraBot.initWs({ خادم المضيف: "http://localhost"، المنفذ: "8080"، url: '', // أشر إلى عنوان URL لتلقي رد اتصال! المصادقة: صحيح، // اطلب المصادقة في المسارات pathNameToken: 'token'، // مسار واسم المجلد الذي سيتم حفظ الرموز المميزة للعميل فيه printQRInTerminal: true، // ستتم طباعة رمز QR على الجهاز إذا كان صحيحًا updateLog: صحيح، // يتم تحديث معلومات السجلات تلقائيًا في الوحدة الطرفية timeAutoClose: 60000, // إذا لم تقرأ رمز QR افتراضيًا لمدة 60 ثانية، فسيتم إغلاق متصفح العميل تلقائيًا لحفظ الذاكرة، وإذا كنت تريد تعطيله، فاضبط 0 أو خطأ mkdirFolderToken: '', // مسار مجلد الرمز المميز، فقط داخل المشروع puppeteerOptions: {headless: true, // ابدأ المشروع والمتصفح مفتوح أم لا!args: [], // وسيطات إضافية لتمريرها إلى مثيل المتصفح. بإضافة أي معلمة، ستستبدل الوسائط الافتراضية للمشروع القابل للتنفيذ: '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 | إظهار المستخدم عن طريق رقم التعريف | 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": "user"، "user_pass": "user"}
إذا كنت تريد تلقي رد اتصال على عنوان url محدد، فقم بتمرير معلمة url في مسار الاتصال.
يكتب | الطريق إلى المتصفح | وصف | جسم |
---|---|---|---|
بريد | /connect | ابدأ الاتصال بالواتس اب | { "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 | تحقق مما إذا كان رمز الاستجابة السريعة نشطًا | EMPTY |
يحصل | /screenshot | احصل على لقطة شاشة | EMPTY |
يجب عليك تسجيل الدخول لاستخدام هذه الوظائف!
to
تكون <phone Number>@c.us
أو <phone Number>-<groupId>@g.us
أو <phone Number><groupId>@g.us
يمكنك إرسال الرسائل باستخدام وظيفة واحدة فقط!
// إرسال رسالة نصية في انتظار العميل .sendMessage({to: '[email protected]', // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: 'رسالة مرسلة بواسطة hydra-bot'، // message textoptions: { type: 'sendText'، // نوع الشحن }, }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال الملفات في انتظار العميل .sendMessage({to: '[email protected]', // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: './file.pdf', // يمكنك استخدام دليل أو استخدام urloptions: { type: ' sendFile', // اسم ملف نوع الشحن: 'اسم الملف', // ضع اسم الملف هنا}, }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال ملف انتظار صوتي للعميل .sendMessage({to: '[email protected]', // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: './file.mp3'، // يمكنك استخدام دليل أو استخدام urloptions: { type: ' sendAudio', // نوع الشحن}, }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال ملف صوتي base64await client .sendMessage({to: '[email protected]'، // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: base64MP3، // يمكنك استخدام دليل أو استخدام urloptions: { type: 'sendAudioBase64'، // الشحن يكتب}، }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال رسالة مصورة في انتظار العميل .sendMessage({to: '[email protected]', // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: './file.jpg', // يمكنك استخدام دليل أو استخدام urloptions: { type: ' "sendImage"، // تسمية توضيحية لنوع الشحن: "نص الصورة"، // نص الصورة}، }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال الصورة Base64await client .sendMessage({to: '[email protected]'، // يمكنك تمرير رقم جهة الاتصال أو رقم المجموعة: base64IMG، // يمكنك استخدام دليل أو استخدام urloptions: { type: 'sendImageFromBase64'، // الشحن اكتب التسمية التوضيحية: "نص الصورة"، // نص الصورة}، }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });
// يرسل رسالة نصية إلى عميل الدردشة المحدد .sendText('[email protected]'، 'رسالة مرسلة بواسطة hydra-bot') .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// يرسل الملف من عميل المسار .sendFile('[email protected]', './file.pdf', { اسم الملف: 'اسم الملف' }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال ملف صوتي ينتظر العميل .sendAudio('[email protected]', './file.mp3') .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال الصوت base64await client .sendAudioBase64('[email protected]'، base64MP3) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال رسالة مصورة في انتظار العميل .sendImage('[email protected]', './file.jpg', { تسمية توضيحية: 'نص الصورة' }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });// إرسال الصورة base64await client .sendImageFromBase64('[email protected]', base64IMG, { التسمية التوضيحية: 'نص الصورة' }) .then((result) => {console.log(result); // نتيجة الرسالة }) .catch((خطأ) => {console.log(error); // خطأ في الرسالة });
// الحصول على معلومات الجهاز في انتظار Client.getHost();
// يُرجع قائمة جهات الاتصالconst Contacts = aw