Ce projet a été développé pour aider la communauté qui utilise WhatsApp comme moyen d'implémenter une API rapidement et efficacement, pour les entreprises et bien plus encore ! Merci de faire partie de cette famille.
Vous pouvez utiliser ce projet de deux manières, la première consiste à utiliser les services Web à l'aide d'un ensemble d'opérations bien définies, les méthodes POST, GET, PUT et DELETE, la deuxième option consiste à utiliser le bot sous forme brute, sans utiliser de Web. Services.
Avez-vous un doute ? Besoin d'aide ? Rejoignez notre groupe WhatsApp et posez vos questions avec d'autres personnes !
Utilisez la version stable :
> npm i --save hydra-bot
ou pour les sorties nocturnes :
> npm i --save https://github.com/jonalan7/Hydra-bot/releases/download/nightly/hydra-nightly.tgz
Administrateur du terminal :
> administrateur du fil
Installez le fil Ubuntu :
> curl -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 fil> fil
Le service sera démarré sur localhost sur le port 8080
const hydraBot = require('hydra-bot');(async() => { // démarre le service Web const WS = wait hydraBot.initWs();})();
Si vous souhaitez travailler en mode libre, en utilisant uniquement le bot, séchez les informations nécessaires !
const hydraBot = require('hydra-bot');const mime = require('mime-types');const fs = require('fs');(async () => { laisser le client ; // démarre le service de robot const ev = attendre hydraBot.initServer(); // retour à l'interface WhatsApp actuelle ev.on('interfaceChange', (change) => {console.log('interfaceChange: ', change); }); // renvoie les paramètres qrcode ev.on('qrcode', (qrcode) => {console.log('qrcode: ', qrcode); }); // renvoie les informations de connexion ev.on('connection', async (conn) => {// informations sur le navigateur !if (conn.statusFind === 'browser') { console.log('info Browser : ', conn.text);}/ / Était connecté à WhatsApp chatif (conn.connect) { client = conn.client; // client de classe d'hydra-bot const getMe = wait client.getHost(); getMe.id._serialized; // numéro d'hôte console.log('Host Number: ', hostNumber); // envoie un message texte wait client.sendMessage({ à: hostNumber, // vous pouvez transmettre le numéro de contact ou le numéro de groupe body : "salut, je suis Hydra Bot", // options de texte du message : {type : 'sendText', // type d'expédition },}).then((result) => { console.log(result); // message résultat}).catch((erreur) => { console.log(erreur); // message d'erreur});} }); // retourne recevoir de nouveaux messages ev.on('newMessage', async (newMsg) => {// quand est reçuif (!newMsg.result.fromMe) { // message reçu! console.log('NewMessageReceived: ', newMsg.result); // télécharger les fichiers if (newMsg.result.isMedia) {const buffer = wait client.decryptFile(newMsg.result);// À ce stade, vous pouvez faire ce que vous voulez avec le tampon// Vous voudrez probablement l'écrire dans un fileconst fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile(fileName, buffer, (err) => { if (err) {console.log(err }}); }}// quand est-il envoyé (!!newMsg.result.fromMe) { // Message envoyé console.log('NewMessageSent: ', newMsg.result);} }); // renvoie le statut de chaque message ev.on('newOnAck', async (event) => {console.log('id Message : ', event.result.id._serialized); // message idconsole.log('Status Message : ', event.result .ack); // -7 = MD_DOWNGRADE, -6 = INACTIF, -5 = CONTENT_UNUPLOADABLE, -4 = CONTENT_TOO_BIG, -3 = CONTENT_GONE, -2 = EXPIRÉ, -1 = ÉCHEC, 0 = HORLOGE, 1 = ENVOYÉ, 2 = REÇU, 3 = LIRE, 4 = PLAYEDconsole.log('From Message:', event.result.from); messageconsole.log('Au message : ', event.result.to); // au message });})();
Puppeteer s'occupe du téléchargement des fichiers. Le décryptage est effectué le plus rapidement possible (dépassant les méthodes natives). Prend en charge les gros fichiers !
const hydraBot = require('hydra-bot');const fs = require('fs');const mime = require('mime-types');(async () => { laisser le client ; // démarre le service de robot const ev = attendre hydraBot.initServer(); // renvoie les informations de connexion ev.on('connection', async (conn) => {// A été connecté à WhatsApp chatif (conn.connect) { client = conn.client;} }); ev.on('newMessage', async (newMsg) => {// quand est reçuif (!newMsg.result.fromMe) { // message reçu! console.log('NewMessageReceived: ', newMsg.result); // télécharger les fichiers if (newMsg.result.isMedia) {const buffer = wait client.decryptFile(newMsg.result);// À ce stade, vous pouvez faire ce que vous voulez avec le tampon// Vous voudrez probablement l'écrire dans un fileconst fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile(fileName, tampon, (err) => { if (err) {console.log(err }}); });})();
const hydraBot = require('hydra-bot');hydraBot.initServer({ session : 'session', // Nom du token à générer, un dossier avec toutes les informations client sera créé pathNameToken : 'token', // Le chemin et le nom du dossier dans lequel les jetons client seront enregistrés printQRInTerminal: true, // Le QR CODE sera imprimé sur le terminal si vrai updateLog : true, // Les informations des journaux sont mises à jour automatiquement dans le terminal timeAutoClose : 60000, // Si vous ne lisez pas le QR CODE par défaut 60 secondes, il fermera automatiquement le navigateur du client pour économiser de la mémoire, si vous souhaitez le désactiver, définissez 0 ou false mkdirFolderToken : '', // Chemin du dossier du jeton, uniquement à l'intérieur du projet puppeteerOptions : {headless : true, // Démarrez le projet avec le navigateur ouvert ou non !args : [], // Arguments supplémentaires à transmettre à l'instance du navigateur. en ajoutant n'importe quel paramètre, vous remplacerez les arguments par défaut du projectexecutablePath : 'useChrome', // Le navigateur qui sera utilisé pour le projet, vous pouvez spécifier un chemin, si vous ne transmettez aucun paramètre, il ouvrira le navigateur installé. },});
const hydraBot = require('hydra-bot');hydraBot.initWs({ serveur hôte : 'http://localhost', port : '8080', url : '', // pointez une URL pour recevoir un rappel ! authentification : true, // demande une authentification dans les routes pathNameToken : 'token', // Le chemin et le nom du dossier dans lequel les jetons client seront enregistrés printQRInTerminal: true, // Le QR CODE sera imprimé sur le terminal si vrai updateLog : true, // Les informations des journaux sont mises à jour automatiquement dans le terminal timeAutoClose : 60000, // Si vous ne lisez pas le QR CODE par défaut 60 secondes, il fermera automatiquement le navigateur du client pour économiser de la mémoire, si vous souhaitez le désactiver, définissez 0 ou false mkdirFolderToken : '', // Chemin du dossier du jeton, uniquement à l'intérieur du projet puppeteerOptions : {headless : true, // Démarrez le projet avec le navigateur ouvert ou non !args : [], // Arguments supplémentaires à transmettre à l'instance du navigateur. en ajoutant n'importe quel paramètre, vous remplacerez les arguments par défaut du projectexecutablePath : 'useChrome', // Le navigateur qui sera utilisé pour le projet, vous pouvez spécifier un chemin, si vous ne transmettez aucun paramètre, il ouvrira le navigateur installé. },});
Pour démarrer l'interface d'administration utilisez :
> administrateur du fil
Liste des commandes dans le terminal :
Commande | Description |
---|---|
/create | Créer un utilisateur |
/delete | Supprimer un utilisateur |
/selectid | Afficher l'utilisateur par identifiant |
/selectname | Sélectionnez l'utilisateur par son nom |
/getall | Lister tous les utilisateurs |
/deactivate | Désactiver l'utilisateur |
/activate | Activer l'utilisateur |
/changename | Changer le nom d'utilisateur |
/password | Changer le mot de passe utilisateur |
/cls | Effacer l'écran/le terminal |
/help | Liste toutes les commandes d'administration dans le terminal |
/exit | Gestionnaire de sortie |
REST API
Headers
, pour pouvoir y accéder, créer un administrateur{ "Content-Type": "application/json", "admin": "admin", "admin_pass": "admin"}
Taper | Itinéraire vers le navigateur | Description | Corps |
---|---|---|---|
POSTE | /create_user | Créer un utilisateur | {"name":"USE","password":"USER PASSWORD"} |
DEL | /delete_user/ID_USE | Supprimer un utilisateur | EMPTY |
OBTENIR | /get_user_by_id/ID_USE | Afficher l'utilisateur par ID | EMPTY |
OBTENIR | /get_all_users | Lister tous les utilisateurs | EMPTY |
METTRE | /deactivate_user | Désactiver l'utilisateur | {"id":"USER ID"} |
METTRE | /activate_user | Activer l'utilisateur | {"id":"USER ID"} |
METTRE | /change_name | Changer le nom d'utilisateur | {"id":"USER ID","name":"NEW USERNAME"} |
METTRE | /change_password | Changer le mot de passe utilisateur | {"id":"USER ID","password":"NEW SECURE PASSWORD"} |
Remarque : Les paramètres peuvent être modifiés pendant le développement !
Headers
d'utilisateur (par défaut, nom d'utilisateur = 'utilisateur', mot de passe = 'utilisateur').Les entêtes doivent être paramétrés comme :
{ "Content-Type": "application/json", "user": "user", "user_pass": "user"}
si vous souhaitez recevoir un rappel sur une URL spécifique, transmettez le paramètre url dans la route de connexion.
Taper | Itinéraire vers le navigateur | Description | Corps |
---|---|---|---|
POSTE | /connect | Démarrer la connexion avec Whatsapp | { "url": "http://localhost:8080/webhooktest" } |
POSTE | /sendtext | Envoyer un SMS à un numéro | { "to": "contact number", "body": "message"} |
POSTE | /sendFile | Envoyer le fichier à un numéro | { "to": "contact number", "file_path": "https://docs.marklogic.com/guide/node-dev.pdf", "file_name": "node.js" } |
POSTE | /sendAudio | Envoyer du son | { "to": "contact number", "url_mp3": "https://cdn.freesound.org/previews/620/620094_4935038-lq.mp3", "file_name": "node.js" } |
POSTE | /sendImage | Envoyer un message image | { "to": "contact number", "url_img": "https://i.pinimg.com/564x/a9/b1/18/a9b118761788b1ab260aae2835c468cd.jpg" } |
POSTE | /disconnect | Déconnexion du serveur | VIDE |
POSTE | /check_user | Vérifiez si l'utilisateur saisi existe | VIDE |
Taper | Itinéraire vers le navigateur | Description | Corps |
---|---|---|---|
OBTENIR | /get_all_contacts | Récupérer des contacts | EMPTY |
OBTENIR | /check_connect | vérifier si le client est connecté | EMPTY |
OBTENIR | /last_qrcode | Vérifiez si le QR-Code est actif | EMPTY |
OBTENIR | /screenshot | Obtenir une capture d'écran | EMPTY |
Vous devez être connecté pour utiliser ces fonctions !
to
peut être <phone Number>@c.us
ou <phone Number>-<groupId>@g.us
ou <phone Number><groupId>@g.us
vous ne pouvez envoyer des messages qu'en utilisant une seule fonction !
// envoie un message texte attend le client .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupebody : 'Un message envoyé par hydra-bot', // options de texte du message : { type : 'sendText', // type d'expédition}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// envoyer le client d'attente de fichiers .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupe : './file.pdf', // vous pouvez utiliser un répertoire ou utiliser une urloptions : { tapez : ' sendFile', // type d'expédition nom de fichier : 'filename', // mettez le nom du fichier ici}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// envoyer le fichier audioawait client .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupe : './file.mp3', // vous pouvez utiliser un répertoire ou utiliser une urloptions : { tapez : ' sendAudio', // type d'expédition}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer le fichier audio au client base64await .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupebody : base64MP3, // vous pouvez utiliser un répertoire ou utiliser une urloptions : { type : 'sendAudioBase64', // expédition taper}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer un message imageattendre le client .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupe : './file.jpg', // vous pouvez utiliser un répertoire ou utiliser une urloptions : { tapez : ' sendImage', // légende du type d'expédition : 'texte de l'image', // texte de l'image}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer l'image au client Base64await .sendMessage({to : '[email protected]', // vous pouvez transmettre le numéro de contact ou le numéro de groupe body : base64IMG, // vous pouvez utiliser un répertoire ou utiliser une urloptions : { type : 'sendImageFromBase64', // expédition tapez la légende : 'texte de l'image', // texte de l'image}, }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });
// Envoie un message texte au client chatawait donné .sendText('[email protected]', 'Un message envoyé par hydra-bot') .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoie le fichier depuis le client pathawait .sendFile('[email protected]', './file.pdf', { nom de fichier : 'nom de fichier' }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer un fichier audio au client d'attente .sendAudio('[email protected]', './file.mp3') .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer l'audio au client base64await .sendAudioBase64('[email protected]', base64MP3) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer un message imageattendre le client .sendImage('[email protected]', './file.jpg', { légende : 'texte de l'image' }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });// Envoyer l'image au client base64await .sendImageFromBase64('[email protected]', base64IMG, {légende : 'texte de l'image' }) .then((result) => {console.log(result); // résultat du message }) .catch((erreur) => {console.log(erreur); // message d'erreur });
// Récupère les informations sur le périphérique en attente client.getHost();
// renvoie une liste de contactsconst contacts = aw