Este projeto foi desenvolvido para ajudar a comunidade que utiliza o Whatsapp como forma de implementar uma API de forma rápida e eficaz, para empresas e muito mais! Obrigado por fazer parte desta família.
Você pode utilizar este projeto de duas maneiras, a primeira é utilizando Web Services utilizando um conjunto de operações bem definidas, os métodos POST, GET, PUT e DELETE, a segunda opção é utilizar o bot em forma bruta, sem utilizar um Web Serviços.
Você tem alguma dúvida? Precisar de ajuda? Entre no nosso grupo de Whatsapp e tire suas dúvidas com outras pessoas!
Use a versão estável:
> npm i --save hydra-bot
ou para lançamentos noturnos:
> npm i --save https://github.com/jonalan7/Hydra-bot/releases/download/nightly/hydra-nightly.tgz
Administrador de terminal:
> administrador de fio
Instale o Yar 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 fio> fio
O serviço será iniciado em localhost na porta 8080
const hydraBot = require('hydra-bot');(async () => { //inicia o serviço web const WS = aguarda hydraBot.initWs();})();
Se quiser trabalhar no modo livre, usando apenas o bot, seque as informações necessárias!
const hydraBot = require('hydra-bot');const mime = require('mime-types');const fs = require('fs');(async () => { deixe cliente; //inicia o serviço do bot const ev = aguarda hydraBot.initServer(); //retorna à interface atual do Whatsapp ev.on('interfaceChange', (mudança) => {console.log('interfaceChange: ', mudança); }); //retorna parâmetros qrcode ev.on('qrcode', (qrcode) => {console.log('qrcode: ', qrcode); }); //retorna informações de conexão ev.on('connection', async (conn) => {// informações do navegador!if (conn.statusFind === 'browser') { console.log('info Browser: ', conn.text);}/ / Estava conectado ao chat do Whatsapp (conn.connect) { client = conn.client; // classe cliente do hydra-bot const getMe = await client.getHost(); getMe.id._serialized; // número host console.log('Host Number: ', hostNumber); // envia uma mensagem de texto await client.sendMessage({ to: hostNumber, // você pode passar o número de contato ou número do grupo body: "oi, sou Hydra bot", // opções de texto da mensagem: {type: 'sendText', // tipo de envio },}).then((result) => { console.log(result); // mensagem resultado}).catch((error) => { console.log(error); // mensagem de erro});} }); //retorna receber novas mensagens ev.on('newMessage', async (newMsg) => {// quando é recebidoif (!newMsg.result.fromMe) { // mensagem recebida! console.log('NewMessageReceived: ', newMsg.result); // baixar arquivos if (newMsg.result.isMedia) {const buffer = await client.decryptFile(newMsg.result);// Neste ponto, você pode fazer o que quiser com o buffer // Provavelmente você deseja gravá-lo em um arquivo const fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile( fileName, buffer, (err) => { if (err) {console.log(err }});// quando é sentif (!!newMsg.result.fromMe) { // Mensagem enviada console.log('NewMessageSent: ', newMsg.result);} }); //retorna o status de cada mensagem ev.on('newOnAck', async (event) => {console.log('id Mensagem: ', event.result.id._serialized); // mensagem idconsole.log('Mensagem de status: ', event.result .ack); // -7 = MD_DOWNGRADE, -6 = INATIVO, -5 = CONTENT_UNUPLOADABLE, -4 = CONTENT_TOO_BIG, -3 = CONTENT_GONE, -2 = EXPIRED, -1 = FAILED, 0 = CLOCK, 1 = ENVIADO, 2 = RECEBIDO, 3 = LER, 4 = PLAYEDconsole.log('From Message: ', event.result.from); messageconsole.log('Para mensagem: ', event.result.to); });})();
O Puppeteer cuida do download do arquivo. A descriptografia está sendo feita o mais rápido possível (ultrapassa os métodos nativos). Suporta arquivos grandes!
const hydraBot = require('hydra-bot');const fs = require('fs');const mime = require('mime-types');(async () => { deixe cliente; //inicia o serviço do bot const ev = aguarda hydraBot.initServer(); //retorna informações de conexão ev.on('connection', async (conn) => {// Foi conectado ao chat do WhatsApp (conn.connect) { client = conn.client;} }); ev.on('newMessage', async (newMsg) => {// quando é recebidoif (!newMsg.result.fromMe) { // mensagem recebida! console.log('NewMessageReceived: ', newMsg.result); // baixar arquivos if (newMsg.result.isMedia) {const buffer = await client.decryptFile(newMsg.result);// Neste ponto, você pode fazer o que quiser com o buffer // Provavelmente você deseja gravá-lo em um arquivo const fileName = `some-file-name.${mime.extension( newMsg.result.mimetype )}`;fs.writeFile( nome do arquivo, buffer, (err) => { if (err) {console.log(err }}); });})();
const hydraBot = require('hydra-bot');hydraBot.initServer({ session: 'session', // Nome do token a ser gerado, será criada uma pasta com todas as informações do cliente pathNameToken: 'token', // O caminho e o nome da pasta onde os tokens do cliente serão salvos printQRInTerminal: true, // O QR CODE será impresso no terminal se verdadeiro updatesLog: true, // Registra atualizações de informações automaticamente no terminal timeAutoClose: 60000, // Se você não ler o QR CODE por padrão 60 segundos, ele fechará automaticamente o navegador do cliente para economizar memória, se quiser desativá-lo, defina 0 ou falso mkdirFolderToken: '', // Caminho da pasta do token, somente dentro do projeto puppeteerOptions: {headless: true, // Inicia o projeto com o navegador aberto ou não!args: [], // Argumentos adicionais para passar para a instância do navegador. adicionando qualquer parâmetro você substituirá os argumentos padrão do projectexecutablePath: 'useChrome', // O navegador que será usado para o projeto, você pode especificar um caminho, se não passar nenhum parâmetro abrirá o navegador instalado. },});
const hydraBot = require('hydra-bot');hydraBot.initWs({ servidorhost: 'http://localhost', porta: '8080', url: '', // aponta uma URL para receber um retorno de chamada! autenticação: true, // solicita autenticação em rotas pathNameToken: 'token', // O caminho e o nome da pasta onde os tokens do cliente serão salvos printQRInTerminal: true, // O QR CODE será impresso no terminal se verdadeiro updatesLog: true, // Registra atualizações de informações automaticamente no terminal timeAutoClose: 60000, // Se você não ler o QR CODE por padrão 60 segundos, ele fechará automaticamente o navegador do cliente para economizar memória, se quiser desativá-lo, defina 0 ou falso mkdirFolderToken: '', // Caminho da pasta do token, somente dentro do projeto puppeteerOptions: {headless: true, // Inicia o projeto com o navegador aberto ou não!args: [], // Argumentos adicionais para passar para a instância do navegador. adicionando qualquer parâmetro você substituirá os argumentos padrão do projectexecutablePath: 'useChrome', // O navegador que será usado para o projeto, você pode especificar um caminho, se não passar nenhum parâmetro abrirá o navegador instalado. },});
Para iniciar a interface de administração use:
> administrador de fio
Lista de comandos no terminal:
Comando | Descrição |
---|---|
/create | Criar usuário |
/delete | Excluir usuário |
/selectid | Mostrar usuário por ID |
/selectname | Selecione o usuário pelo nome |
/getall | Listar todos os usuários |
/deactivate | Desativar usuário |
/activate | Ativar usuário |
/changename | Alterar nome de usuário |
/password | Alterar senha do usuário |
/cls | Limpar tela/terminal |
/help | Liste todos os comandos para administração no terminal |
/exit | Gerenciador de saída |
REST API
Headers
, para poder acessá-los, para criar um administrador{ "Tipo de conteúdo": "aplicativo/json", "admin": "admin", "admin_pass": "admin"}
Tipo | Rotear para o navegador | Descrição | Corpo |
---|---|---|---|
PUBLICAR | /create_user | Criar usuário | {"name":"USE","password":"USER PASSWORD"} |
DEL | /delete_user/ID_USE | Excluir usuário | EMPTY |
PEGAR | /get_user_by_id/ID_USE | Mostrar usuário por ID | EMPTY |
PEGAR | /get_all_users | Listar todos os usuários | EMPTY |
COLOCAR | /deactivate_user | Desabilitar usuário | {"id":"USER ID"} |
COLOCAR | /activate_user | Ativar usuário | {"id":"USER ID"} |
COLOCAR | /change_name | Alterar nome de usuário | {"id":"USER ID","name":"NEW USERNAME"} |
COLOCAR | /change_password | Alterar senha do usuário | {"id":"USER ID","password":"NEW SECURE PASSWORD"} |
Nota: Os parâmetros podem ser alterados durante o desenvolvimento!
Headers
de usuário (padrão, nome de usuário = 'usuário', senha = 'usuário').Os cabeçalhos devem ser parametrizados como:
{ "Tipo de conteúdo": "aplicativo/json", "usuário": "usuário", "user_pass": "usuário"}
se você deseja receber um retorno de chamada em uma url específica, passe o parâmetro url na rota de conexão.
Tipo | Rotear para o navegador | Descrição | Corpo |
---|---|---|---|
PUBLICAR | /connect | Iniciar conexão com Whatsapp | { "url": "http://localhost:8080/webhooktest" } |
PUBLICAR | /sendtext | Envie uma mensagem de texto para um número | { "to": "contact number", "body": "message"} |
PUBLICAR | /sendFile | Enviar arquivo para um número | { "to": "contact number", "file_path": "https://docs.marklogic.com/guide/node-dev.pdf", "file_name": "node.js" } |
PUBLICAR | /sendAudio | Enviar áudio | { "to": "contact number", "url_mp3": "https://cdn.freesound.org/previews/620/620094_4935038-lq.mp3", "file_name": "node.js" } |
PUBLICAR | /sendImage | Enviar mensagem de imagem | { "to": "contact number", "url_img": "https://i.pinimg.com/564x/a9/b1/18/a9b118761788b1ab260aae2835c468cd.jpg" } |
PUBLICAR | /disconnect | Desconectando do servidor | VAZIO |
PUBLICAR | /check_user | Verifique se o usuário inserido existe | VAZIO |
Tipo | Rotear para o navegador | Descrição | Corpo |
---|---|---|---|
PEGAR | /get_all_contacts | Recuperar contatos | EMPTY |
PEGAR | /check_connect | verifique se o cliente está conectado | EMPTY |
PEGAR | /last_qrcode | Verifique se o QR-Code está ativo | EMPTY |
PEGAR | /screenshot | Obter captura de tela | EMPTY |
Você deve estar logado para usar essas funções!
to
ser <phone Number>@c.us
ou <phone Number>-<groupId>@g.us
ou <phone Number><groupId>@g.us
você pode enviar mensagens usando apenas uma função!
//envia mensagem de textoaguarda cliente .sendMessage({to: '[email protected]', // você pode passar o número de contato ou número do grupobody: 'Uma mensagem enviada por hydra-bot', // mensagem textooptions: { type: 'sendText', // tipo de envio}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// envia arquivos aguardando cliente .sendMessage({to: '[email protected]', // você pode passar o número de contato ou número do grupobody: './file.pdf', // você pode usar um diretório ou urloptions: { type: ' sendFile', // tipo de envio filename: 'filename', // coloque o nome do arquivo aqui}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });//envia arquivo audioawait cliente .sendMessage({to: '[email protected]', // você pode passar o número de contato ou número do grupo: './file.mp3', // você pode usar um diretório ou urloptions: { type: ' sendAudio', // tipo de envio}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia arquivo de áudio cliente base64await .sendMessage({to: '[email protected]', // você pode passar o número de contato ou número do grupo: base64MP3, // você pode usar um diretório ou urloptions: { type: 'sendAudioBase64', // envio tipo}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia imagem mensagemawait cliente .sendMessage({to: '[email protected]', // você pode passar o número do contato ou número do grupobody: './file.jpg', // você pode usar um diretório ou urloptions: { type: ' sendImage', // legenda do tipo de envio: 'texto da imagem', // texto da imagem}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia imagem cliente Base64await .sendMessage({to: '[email protected]', // você pode passar o número de contato ou número do grupo: base64IMG, // você pode usar um diretório ou usar urloptions: { type: 'sendImageFromBase64', // envio digite legenda: 'texto da imagem', // texto da imagem}, }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });
// Envia uma mensagem de texto para determinado cliente chatawait .sendText('[email protected]', 'Uma mensagem enviada por hydra-bot') .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia arquivo do cliente pathawait .sendFile('[email protected]', './file.pdf', { nome do arquivo: 'nome do arquivo' }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });//Envia arquivo de áudioawait cliente .sendAudio('[email protected]', './file.mp3') .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia áudio para cliente base64await .sendAudioBase64('[email protected]', base64MP3) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia imagem mensagemawait cliente .sendImage('[email protected]', './file.jpg', { caption: 'texto da imagem' }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });// Envia imagem cliente base64await .sendImageFromBase64('[email protected]', base64IMG, { caption: 'texto da imagem' }) .then((result) => {console.log(result); // resultado da mensagem }) .catch((error) => {console.log(error); // mensagem de erro });
// Obtém informações do dispositivoawait client.getHost();
// retorna uma lista de contatosconst contatos = aw