Этот проект был разработан, чтобы помочь сообществу, которое использует WhatsApp как способ быстро и эффективно внедрить API для компаний и многое другое! Спасибо, что вы являетесь частью этой семьи.
Вы можете использовать этот проект двумя способами: первый — использование веб-сервисов с использованием набора четко определенных операций, методов POST, GET, PUT и DELETE, второй вариант — использование бота в «сыром» виде, без использования веб-интерфейса. Услуги.
У вас есть сомнения? Нужна помощь? Присоединяйтесь к нашей группе WhatsApp и задавайте свои вопросы другим людям!
Используйте стабильную версию:
> npm i --save гидра-бот
или для ночных выпусков:
> npm i --save https://github.com/jonalan7/Hydra-bot/releases/download/nightly/hydra-nightly.tgz
Администратор терминала:
>администратор пряжи
Установите пряжу Ubuntu:
> завиток -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 update && sudo apt install Yarn> Yarn
Служба будет запущена на локальном хосте по порту 8080.
const hydraBot = require('hydra-bot');(async () => { // запускаем веб-сервис const WS = ожидание HydraBot.initWs();})();
Если вы хотите работать в бесплатном режиме, используя только бота, просушите необходимую информацию!
const hydraBot = require('hydra-bot');const mime = require('mime-types');const fs = require('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);}/ / Подключился к WhatsAppchatif (conn.connect) { client = conn.client // клиент класса от гидра-бота const getMe = await client.getHost(); getMe.id._serialized; // номер хоста console.log('Host Number: ', hostNumber); // отправляем текстовое сообщение await client.sendMessage({ to: hostNumber, // вы можете передать контактный номер или номер группы body: "привет, я бот гидра", // параметры текста сообщения: {type: 'sendText', // тип доставки },}).then((result) => { console.log(result); // сообщение result}).catch((error) => { console.log(error); // ошибка сообщения});} }); // возвращаем получение новых сообщений 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);// На этом этапе вы можете делать с буфером все, что захотите // Скорее всего, вы захотите записать его в файл. , 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 = require('hydra-bot');const fs = require('fs');const mime = require('mime-types');(async () => { пусть клиент; // запускаем сервис бота const ev = ожидание HydraBot.initServer(); // возвращаем информацию о соединении ev.on('connection', async (conn) => {// Был подключен к WhatsAppchatif (conn.connect) { client = conn.client;} }); 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);// На данный момент вы можете делать с буфером все, что захотите // Скорее всего, вы захотите записать его в файл. , буфер, (ошибка) => { if (ошибка) {console.log(err }}); });})();
const гидраБот = require('гидра-бот');hydraBot.initServer({ session: 'session', // Имя сгенерированного токена, будет создана папка со всей информацией о клиенте pathNameToken: 'token', // Путь и имя папки, в которой будут сохранены клиентские токены printQRInTerminal: true, // QR-код будет напечатан на терминале, если true updateLog: true, // Информация журнала автоматически обновляется в терминале timeAutoClose: 60000, // Если вы не читаете QR-код по умолчанию 60 секунд, он автоматически закроет браузер клиента для экономии памяти, если вы хотите отключить его, установите 0 или false mkdirFolderToken: '', // Путь к папке токена, только внутри проекта puppeteerOptions: {headless: true, // Запускаем проект с открытым браузером или нет!args: [], // Дополнительные аргументы для передачи экземпляру браузера. добавив любой параметр, вы замените аргументы по умолчанию для проектаexecutablePath: 'useChrome', // Браузер, который будет использоваться для проекта, вы можете указать путь, если вы не передадите никаких параметров, откроется установленный браузер. },});
const hydraBot = require('hydra-bot');hydraBot.initWs({ хост-сервер: 'http://localhost', порт: '8080', url: '', // указываем URL-адрес для обратного вызова! аутентификация: true, // запрашиваем аутентификацию в маршрутах pathNameToken: 'token', // Путь и имя папки, в которой будут сохранены клиентские токены printQRInTerminal: true, // QR-код будет напечатан на терминале, если true updateLog: true, // Информация журналов автоматически обновляется в терминале timeAutoClose: 60000, // Если вы не читаете QR-КОД по умолчанию 60 секунд, он автоматически закроет браузер клиента для экономии памяти, если вы хотите отключить его, установите 0 или false mkdirFolderToken: '', // Путь к папке токена, только внутри проекта puppeteerOptions: {headless: true, // Запускаем проект с открытым браузером или нет!args: [], // Дополнительные аргументы для передачи экземпляру браузера. добавив любой параметр, вы замените аргументы по умолчанию для проектаexecutablePath: 'useChrome', // Браузер, который будет использоваться для проекта, вы можете указать путь. Если вы не передадите никаких параметров, откроется установленный браузер. },});
Для запуска интерфейса администрирования используйте:
>администратор пряжи
Список команд в терминале:
Команда | Описание |
---|---|
/create | Создать пользователя |
/delete | Удалить пользователя |
/selectid | Показать пользователя по идентификатору |
/selectname | Выбрать пользователя по имени |
/getall | Список всех пользователей |
/deactivate | Отключить пользователя |
/activate | Активировать пользователя |
/changename | Изменить имя пользователя |
/password | Изменить пароль пользователя |
/cls | Очистить экран/терминал |
/help | Список всех команд для администрирования в терминале |
/exit | Менеджер выхода |
REST API
Headers
, чтобы иметь к ним доступ, необходимо создать администратора.{ "Content-Type": "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
пользователей (по умолчанию, имя пользователя = «пользователь», пароль = «пользователь»).Заголовки должны быть параметризованы как:
{ "Content-Type": "application/json", "user": "user", "user_pass": "user"}
Если вы хотите получить обратный вызов по определенному 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-код | EMPTY |
ПОЛУЧАТЬ | /screenshot | Получить скриншот | EMPTY |
Вы должны войти в систему, чтобы использовать эти функции!
to
может быть <phone Number>@c.us
или <phone Number>-<groupId>@g.us
или <phone Number><groupId>@g.us
отправлять сообщения можно только с помощью одной функции!
// отправляем текстовое сообщение, ожидая клиента .sendMessage({to: '[email protected]', // вы можете передать контактный номер или номер группыbody: 'Сообщение, отправленное гидра-ботом', // текстовые опции сообщения: { type: 'sendText', // тип доставки}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // ошибка сообщения }); // отправляем файлы, ожидая клиента .sendMessage({to: '[email protected]', // вы можете передать контактный номер или номер группыbody: './file.pdf', // вы можете использовать каталог или URL-адрес: { type: ' sendFile', // тип доставки filename: 'filename', // поместите сюда имя файла}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // ошибка сообщения }); // отправляем файл аудиоожиданию клиента .sendMessage({to: '[email protected]', // вы можете передать контактный номер или номер группыbody: './file.mp3', // вы можете использовать каталог или URL-адрес: { type: ' sendAudio', // тип доставки}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // сообщение об ошибке }); // Отправляем аудиофайл клиенту base64await .sendMessage({to: '[email protected]', // вы можете передать контактный номер или номер группыbody: base64MP3, // вы можете использовать каталог или URL-адрес: { type: 'sendAudioBase64', // доставка тип}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // сообщение об ошибке });// Отправляем изображение-сообщение, ожидающее клиента .sendMessage({to: '[email protected]', // вы можете передать контактный номер или номер группыbody: './file.jpg', // вы можете использовать каталог или URL-адрес: { type: ' sendImage', // подпись типа доставки: 'текст изображения', // текст изображения}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // ошибка сообщения }); // Отправляем изображение клиенту Base64await .sendMessage({to: '[email protected]', // вы можете передать номер контакта или номер группыbody: base64IMG, // вы можете использовать каталог или URL-адрес: { type: 'sendImageFromBase64', // доставка введите заголовок: 'текст изображения', // текст изображения}, }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // сообщение об ошибке });
// Отправляет текстовое сообщение данному клиенту Chatawait .sendText('[email protected]', 'Сообщение, отправленное гидра-ботом') .then((result) => {console.log(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', { caption: 'текст изображения' }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // сообщение об ошибке });// Отправляем изображение клиенту base64await .sendImageFromBase64('[email protected]', base64IMG, { caption: 'текст изображения' }) .then((result) => {console.log(result); // результат сообщения }) .catch((error) => {console.log(error); // сообщение об ошибке });
// Получаем информацию об устройстве await client.getHost();
// возвращает список контактовconst contact = aw