Часть 1: Если у вас нет времени на чтение
Данная реализация бота включает в себя наиболее часто используемые функции. Это позволит вам адаптировать исходный код под ваши задачи и потребности или использовать его в качестве основы для создания любой другой интеграции. Мы оставили комментарии рядом с каждой функцией, чтобы вам было проще понять код. В исходном коде бота вы найдете следующие функции:
- Ответ на неизвестную команду, это может быть инструкция или ваше приветственное сообщение;
- Отправка обычного сообщения;
- Отправка изображения;
- Отправка файла;
- Отправка видео;
- Отправка контакта (vCard);
- Отправка товара;
- Создание новой группы, отправка приглашения и отправка сообщения в группу;
- Получение и чтение входящих сообщений;
Часть 2: Введение
Добро пожаловать в это исчерпывающее руководство по созданию собственного бота для WhatsApp с использованием Node.js! Эта статья нацелена на то, чтобы предоставить вам знания и практические навыки для создания функционального бота для WhatsApp с нуля. Независимо от того, являетесь ли вы полным новичком в мире программирования или имеете некоторый опыт, но новичок в Node.js, это руководство для вас.
Что такое бот для WhatsApp и зачем он вам нужен?
Бот для WhatsApp - это автоматизированная программная система, разработанная для взаимодействия с пользователями через платформу WhatsApp. Он может обеспечивать мгновенную поддержку клиентов, отправлять уведомления и даже обрабатывать транзакции. В эпоху, когда вовлечение клиентов критически важно, бот для WhatsApp может значительно улучшить пользовательский опыт, оптимизировать бизнес-операции и даже увеличить продажи.
Почему Node.js?
Node.js - это открытая, кроссплатформенная среда выполнения JavaScript, которая позволяет разработчикам создавать масштабируемые сетевые приложения. Вот почему это отличный выбор для создания бота для WhatsApp:
- Асинхронное программирование. Node.js неблокирующий, что означает, что он может обрабатывать несколько соединений одновременно, что идеально подходит для чат-бота, который должен управлять несколькими взаимодействиями сразу.
- Сильная поддержка сообщества. С живым экосистемом и большим количеством свободно доступных модулей в реестре npm, вы никогда не будете одиноки, кодируя на Node.js.
- Легкость обучения. Если вы уже знакомы с JavaScript, освоение Node.js будет легким. Даже если вы не знакомы, JavaScript — один из самых простых языков программирования для изучения.
- Наша поддержка. Мы рады помогать разработчикам на этом языке программирования. Если вы отправите нам фрагмент вашего кода, где что-то не работает, нам будет проще вам помочь, подсказать или улучшить вашу работу.
По окончании этого руководства у вас будет рабочий бот для WhatsApp, способный получать и отправлять сообщения, медиафайлы и даже взаимодействовать в групповых чатах. Готовы начать своё путешествие? Давайте погрузимся!
Настройка среды разработки
Прежде чем приступить к кодированию, есть несколько вещей, которые вам нужно будет подготовить:
- Node.js и npm. Если у вас не установлены Node.js и npm (Node Package Manager) на вашем компьютере, вам нужно будет их установить. Вы можете скачать последнюю версию с официального сайта Node.js.
- Текстовый редактор. Любой текстовый редактор подойдет, но IDE, такие как Visual Studio Code или WebStorm, предлагают дополнительные функции, такие как отладка и автодополнение, которые могут упростить вашу жизнь.
- Терминал или командная строка. Здесь вы будете запускать все свои скрипты на Node.js.
Этапы установки
- Шаг 1: Установите Node.js и npm. Посетите официальный сайт Node.js и скачайте установщик для вашей операционной системы. Запустите установщик и следуйте инструкциям на экране. Это установит и Node.js, и npm.
- Шаг 2: Настройте папку вашего проекта. Создайте новую папку, где будут храниться все файлы, связанные с вашим ботом для WhatsApp. Перейдите в эту папку, используя терминал. Инициализируйте новый проект Node.js. Это создаст файл package.json, который будет содержать всю метаинформацию и зависимости вашего проекта.
- Шаг 3: Установите необходимые пакеты. Поскольку мы будем работать с API WhatsApp, нам нужно будет установить несколько пакетов для выполнения задачи.
На этом этапе у вас есть рабочая среда разработки, новый проект на Node.js и все необходимые пакеты. Теперь вы готовы начать программировать вашего бота для WhatsApp!
Подключение провайдера API WhatsApp
Whapi.Cloud — это API-шлюз, который облегчает интеграцию с WhatsApp. Это позволяет, с учетом строгих ограничений облачного API и дорогих сообщений, полностью автоматизировать любую функциональность мессенджера. В этой статье мы рассмотрим лишь несколько методов отправки, приема и обработки сообщений в WhatsApp, но возможности этого инструмента гораздо шире.
Как подключиться к Whapi.Cloud
Регистрация. Первый шаг — зарегистрироваться на сайте Whapi.Cloud и создать аккаунт. Это бесплатно и не требует ввода кредитной карты.
После регистрации у вас сразу будет доступ к тестовому каналу с небольшим ограничением. Подождите, пока он запустится (обычно это занимает около минуты). Вам потребуется подключить свой телефон для автоматизации WhatsApp. Именно с подключенного телефона будут отправляться сообщения. Большое преимущество сервиса в том, что запуститься и начать работу занимает всего пару минут.
Чтобы подключить ваш телефон, используйте QR-код, доступный при клике на ваш тестовый канал в личном кабинете. Затем откройте WhatsApp на вашем мобильном устройстве, перейдите в Настройки -> Подключенные устройства -> Подключить устройство -> Сканировать QR-код.
На втором и третьем шагах сервис попросит вас настроить канал: написать его имя для вашего удобства, установить вебхуки, изменить настройки. Все эти шаги можно пропустить, и мы вернемся к вебхукам чуть позже. После запуска, вы найдете в центральном блоке под информацией о лимитах ваш API-ключ, то есть токен. Этот токен будет использоваться для аутентификации ваших запросов к API. Обычно его добавляют в заголовки запроса как токен типа Bearer или просто как параметр запроса, в зависимости от используемого вами метода API.
Закладываем основу бота для WhatsApp
Инициализация сервера с Express
Express — это минималистичный и гибкий фреймворк веб-приложений для Node.js, который предлагает надежный набор функций для веб и мобильных приложений. Мы будем использовать его для инициализации нашего сервера.
Установка: Если вы еще не установили Express, вы можете сделать это с помощью следующей команды npm.
npm install express --save
Инициализация сервера: Создайте новый файл с именем index.js и инициализируйте сервер Express.
const express = require('express');
const app = express();
const port = 3000;
app.listen(port, () => {
console.log(`Server running on http://localhost:${port}/`);
});
Основы асинхронного программирования в Node.js
Node.js построен на базе движка JavaScript V8, который является асинхронным и событийно-ориентированным. Понимание основ асинхронного программирования, таких как колбэки, промисы и async/await, является необходимым для разработки вашего бота.
async function fetchData() {
const data = await getData();
console.log(data);
}
С этими основами, перейдем к конкретным деталям обработки сообщений в следующей главе.
Обработка входящих сообщений
В этой главе мы рассмотрим основную часть любого бота для обмена сообщениями — обработку входящих сообщений. Мы рассмотрим, как настроить вебхук, основы маршрутизации и, наконец, реализацию некоторой элементарной логики для ответа на текстовые сообщения.
Ваш бот для WhatsApp и API-шлюз должны общаться друг с другом, чтобы, когда что-то меняется в одной системе, другая система знала об этом. Например, отслеживание изменений в статусе сообщений, таких как 'отправлено', 'доставлено' и 'прочитано'.
Вот здесь на помощь приходит вебхук! Специально настроенный вебхук позволяет вашему серверу мгновенно узнавать о определенных событиях. В зависимости от ваших настроек, вы можете получать уведомления о сообщениях, их статусе, статусе канала и даже пропущенных звонках.
Мы подробно рассмотрели все нюансы работы с вебхуками в нашей базе знаний: Смотреть статью о вебхуках
Whapi.Cloud предоставляет возможность настроить вебхук для вашего бота. И можно настроить сразу несколько вебхуков для разных событий и с разными условиями. Это значительно облегчает работу программистов.
Технически, при входящем сообщении, система выполнит POST запрос с JSON телом, на настроенную ссылку вашего скрипта. JSON тело будет включать в себя всю информацию о входящем сообщении, такие как текст, номер отправителя, время отправки и т.п., что позволит вам считывать эту информацию на лету.
Перейдем к настройке этой ссылки!
Перейдем к настройке этой ссылки!
Локально или на сервере
При разработке WhatsApp бота, возможно, вы захотите протестировать его локально, прежде чем разворачивать на сервере. Самый простой способ сделать это - использовать такие инструменты, как Ngrok, который создает безопасный туннель к вашему localhost, позволяя вам предоставить доступ к локальному серверу из Интернета.
Давайте возьмем для тестирования чат-бота ссылку с Ngrok прямо сейчас. Скачайте Ngrok с официального сайта и распакуйте его. Откройте терминал и перейдите в папку, где хранится Ngrok.
Запустите ./ngrok http НОМЕР_ПОРТА, заменяя НОМЕР_ПОРТА на порт, на котором ваш сервер Express работает локально.
Теперь у вас должен быть публичный URL, который вы можете использовать как URL для вебхука.
Копируем эту ссылку в config.js файл:
botUrl: "https://84c7-151-33-282-113.ngrok-free.app/hook"
Запустите ./ngrok http НОМЕР_ПОРТА, заменяя НОМЕР_ПОРТА на порт, на котором ваш сервер Express работает локально.
Теперь у вас должен быть публичный URL, который вы можете использовать как URL для вебхука.
Копируем эту ссылку в config.js файл:
botUrl: "https://84c7-151-33-282-113.ngrok-free.app/hook"
Маршрутизация и обработка запросов
Для маршрутизации и обработки запросов мы продолжим использовать Express. URL вебхука, который мы предоставили в Whapi.Cloud, будет указывать на конкретный маршрут в нашем приложении.
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
// Handle incoming messages
});
app.listen(3000, () => {
console.log('Server started');
});
Наконец, давайте добавим некоторую базовую логику для ответа на входящие текстовые сообщения. Для простоты мы будем использовать базовую структуру if-else, хотя позже вы сможете расширить это до чего-то более сложного.
app.post('/webhook', async (req, res) => {
const message = req.body.message.text;
if (message === 'hello') {
await sendMessage('Hi there!');
} else if (message === 'help') {
await sendMessage('How can I assist you today?');
}
res.sendStatus(200);
});
Функция sendMessage будет являться заглушкой на данный момент, которую мы заменим в главе 6 реальным кодом для отправки сообщений.
Отправка сообщений в WhatsApp, используя Node JS
В этой главе мы рассмотрим все тонкости отправки текстовых и медийных сообщений. Отправка правильного типа контента в нужный момент может сделать вашего бота гораздо интереснее. Мы рассмотрим фрагменты кода, которые позволят вашему боту отправлять текстовые сообщения, медиафайлы и даже документы.
Отправка текстовых сообщений
Отправка текстовых сообщений - это самая базовая, но важная функция. Ниже представлен фрагмент кода, который демонстрирует, как отправить текстовое сообщение с использованием API Whapi.Cloud.
const request = require('request');
const options = {
method: 'POST',
url: 'https://gate.whapi.cloud/messages/text?token=YOUR_API_TOKEN',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: {typing_time: 10, to: '[email protected]', body: 'Hello, world!'},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Отправка мультимедиа, документов
WhatsApp позволяет отправлять различные типы медиа - изображения, аудио, видео. Вы можете отправить файл по URL или загрузив его в наше хранилище. Также можно отправить файлы документов, такие как PDF или текстовые файлы. Ниже пример с использованием файла, закодированного в base64.
const request = require('request');
const options = {
method: 'POST',
url: 'https://gate.whapi.cloud/messages/document?token=YOUR_API_TOKEN',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: {
to: '[email protected]',
media: 'data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K'
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
В конце статьи мы опубликуем исходный код бота, который вы можете скопировать для своих нужд.
Работа с группами WhatsApp на Node.JS
В этой главе мы рассмотрим, как взаимодействовать с группами в WhatsApp, используя API Whapi.Cloud. В частности, мы рассмотрим, как получить список всех групп, посчитать количество участников в каждой группе и обрабатывать сообщения, поступающие из групп.
Получение списка групп
Во-первых, чтобы получить список всех групп, в которых вы состоите, вы можете использовать следующий фрагмент кода:
const request = require('request');
const options = {
method: 'GET',
url: 'https://gate.whapi.cloud/groups?token=YOUR_API_TOKEN',
headers: {accept: 'application/json'}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
Ответ будет включать в себя массив с деталями группы, такими как имя, аватар чата, последнее сообщение, имя владельца, описание, участники и так далее.
Подсчет числа участников в группе WhatsApp
Теперь, когда у нас есть информация о группе, мы можем перейти к подсчету количества участников в каждой группе. Следующий фрагмент кода это демонстрирует. В этом фрагменте кода мы проходим по каждой группе и записываем имя группы и количество участников в ней. Поле участников - это массив объектов, и мы можем получить его длину, чтобы посчитать количество участников.
request(options, function (error, response, body) {
if (error) throw new Error(error);
const groups = JSON.parse(body);
groups.forEach(group => {
console.log(`Group Name: ${group.name}`);
console.log(`Number of Participants: ${group.participants.length}`);
});
});
Обработка групповых сообщений
Чтобы обработать сообщения, поступающие из групп, вы можете модифицировать обработчик вашего веб-хука следующим образом:
app.post('/webhook', (req, res) => {
const message = req.body;
if (message.from.endsWith('@g.us')) {
// This is a group message
handleGroupMessage(message);
} else if (message.type === 'text') {
// Handle Text Messages
sendTextMessage(message.from, 'You said: ' + message.body);
}
res.status(200).end();
});
function handleGroupMessage(message) {
console.log(`Received a group message from ${message.from}: ${message.body}`);
// Further logic for group messages can be implemented here.
}
В обновленном веб-хуке мы проверяем, заканчивается ли поле message.from на @g.us, который является типичным идентификатором для групповых сообщений в WhatsApp. Если это так, мы вызываем функцию handleGroupMessage для обработки сообщения.
И вот и все! Теперь у вас есть базовое представление о том, как работать с группами в WhatsApp с использованием Whapi.Cloud. Отсюда вы можете расширить функциональность в соответствии с вашими потребностями.
Устранение неполадок
В процессе тестирования и эксплуатации чат-бота для WhatsApp могут возникать различные проблемы. Вот несколько типичных ситуаций и рекомендации по их решению:
Бот не реагирует на входящие сообщения
- Убедитесь, что вы отправляете сообщения на номер, на котором запущен бот, с другого телефона. Бот не сможет реагировать на сообщения, отправленные с того же номера.
- Если бот не реагирует на сообщения с других номеров, проверьте работу вебхуков. Используйте сервисы для симуляции вебхуков, например, Webhook.site, чтобы удостовериться, по какому пути приходят callback запросы. После этого проверьте соответствует ли путь, указанному вами в конфигурации. Так же, убедитесь, что ваш сервер отвечает 200Ok.
При возникновении сложностей не стесняйтесь обращаться в нашу техническую поддержку за помощью. Можете написать в виджет веб чата на нашем сайте либо на почту [email protected]. Мы поможем вам и разберем, что именно не так с вебхуком.
Бот отправляет сообщения без остановки
Вернитесь к изначальной версии кода. В нашем скрипте реализована проверка, определяющая, является ли сообщение входящим или исходящим, чтобы предотвратить попадание в бесконечный цикл отправки сообщений.
Бесконечная отправка может произойти, если в коде отсутствует проверка на исходящее сообщение, из-за чего бот вызывает сам себя, или если присутствует цикличекая отправка сообщений в коде.
Бот работает в некоторых чатах, а в других — нет
Проверьте ваш тарифный план на Whapi.Cloud. Если вы используете триал режим или тариф "Песочница", взаимодействие ограничено определённым количеством чатов в месяц (на данный момент до 5 чатов). В таком случае бот не сможет обрабатывать сообщения в шестом чате и последующих.
Важно помнить, что многие проблемы можно предотвратить, тщательно проверяя конфигурацию и логику вашего чат-бота перед запуском. Регулярное обновление вашего кода и внимание к деталям настроек помогут избежать большинства типичных ошибок. А наша команда поддержки всегда на связи и готова помочь вам!
Деплой и использование серверов
Для того чтобы ваш чат-бот для WhatsApp был доступен 24/7, его необходимо разместить на надежной платформе хостинга. Вы можете использовать и свой сервер, однако в этой главе мы рассмотрим три самые популярные платформы — Firebase, AWS и Heroku — и пройдемся по базовым шагам деплоя вашего бота на каждой из них.
Выбор платформы зависит от ваших предпочтений, бюджета и требований к проекту. Каждая из рассмотренных платформ предлагает свои уникальные возможности и преимущества. Firebase и AWS Lambda обеспечивают мощный бэкенд без необходимости управления сервером, в то время как Heroku предлагает простоту развертывания приложений на основе Git.
Firebase
Firebase предлагает функционал Cloud Functions, который позволяет запускать ваш бот без необходимости заботиться о серверной инфраструктуре. На наш взгляд, это самый оптимальный вариант.
- Создайте проект в Firebase Console;
- Установите Firebase CLI, следуя инструкциям;
- Инициализируйте Firebase в директории вашего проекта с помощью команды firebase init;
- Разверните вашего бота, используя команду firebase deploy --only functions.
AWS (Amazon Web Services)
AWS Lambda предоставляет возможность запуска кода в ответ на триггеры из других сервисов AWS, что делает его хорошим выбором для бота.
- Зарегистрируйтесь или войдите в AWS Management Console;
- Создайте новую функцию Lambda через консоль AWS, выбрав в качестве триггера API Gateway;
- Загрузите код вашего бота в Lambda функцию;
- Настройте API Gateway для взаимодействия вашего бота с внешним миром.
Heroku
Heroku предлагает простую в использовании платформу для размещения приложений, которая может автоматически развертывать код из вашего Git репозитория.
- Создайте аккаунт на Heroku;
- Установите Heroku CLI и войдите в систему;
- Создайте новое приложение на Heroku через консоль или используя команду heroku create;
- Свяжите ваш Git репозиторий с Heroku и выполните деплой с помощью команд git push heroku master;
- Установите URL вебхука, предоставленный Heroku.
Исходный код готового простого бота для WhatsApp на Node.JS
Вот пример полного кода для создания простого бота WhatsApp с использованием Node.js и Express. Этот код включает в себя инициализацию сервера, обработку входящих сообщений через вебхук и отправку текстовых и медиа-сообщений. Вначале создадим config.js для хранения настроек конфигурации.
module.exports = {
// API endpoint URL
apiUrl: "https://gate.whapi.cloud",
// API token from your channel
token: "YOUR CHANNEL TOKEN",
// The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
group: '[email protected]',
// The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
product: '6559353560856703',
// Bot`s URL (for static file). Webhook Link to your server. At ( {server link}/hook ), when POST is requested, processing occurs
botUrl: "https://yoursite.com/hook",
// Bot's Port (for hook handler). Don't use 443 port.
port: "80"
}
Напомню, что весь исходный код этого проекта можно скачать с ГитХаба: https://github.com/Whapi-Cloud/nodejs-whatsapp-chatbot
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const fetch = require('node-fetch');
const FormData = require('form-data');
const config = require('./config.js');
process.on('unhandledRejection', err => {
console.log(err)
});
const COMMANDS = { // bot commands
TEXT: 'Simple text message',
IMAGE: 'Send image',
DOCUMENT: 'Send document',
VIDEO: 'Send video',
CONTACT: 'Send contact',
PRODUCT: 'Send product',
GROUP_CREATE: 'Create group',
GROUP_TEXT: 'Simple text message for the group',
GROUPS_IDS: 'Get the id\'s of your three groups'
}
const FILES = { // file path
IMAGE: './files/file_example_JPG_100kB.jpg',
DOCUMENT: './files/file-example_PDF_500_kB.pdf',
VIDEO: './files/file_example_MP4_480_1_5MG.mp4',
VCARD: './files/sample-vcard.txt'
}
async function sendWhapiRequest(endpoint, params= {}, method = 'POST') { // send request to endpoint with params, with POST by default
let options = {
method: method,
headers: {
Authorization: `Bearer ${config.token}`
},
};
if (!params.media) options.headers['Content-Type'] = 'application/json'; // if in params media is null - set json in headers
let url = `${config.apiUrl}/${endpoint}`;
if(params && Object.keys(params).length > 0) {
if(method === 'GET')
url += '?' + new URLSearchParams(params); // if GET method set in params, then params move to query
else
options.body = params?.media ? toFormData(params) : JSON.stringify(params); // if in params media - transform to formData, else - json
}
const response = await fetch(url, options); // send request
let json = await response.json();
console.log('Whapi response:', JSON.stringify(json, null, 2));
return json;
}
/**
* Convert object to FormData
* @param obj
* @returns {FormData}
*/
function toFormData(obj) {
const form = new FormData();
for (let key in obj) {
form.append(key, obj[key]);
}
return form;
}
async function setHook() { // request for set hook and recieve messages
if (config.botUrl) {
/** type {import('./whapi').Settings} */
const settings = {
webhooks: [
{
url: config.botUrl,
events: [
// default event for getting messages
{type: "messages", method: "post"}
],
mode: "method"
}
]
}
await sendWhapiRequest('settings', settings, 'PATCH');
}
}
async function handleNewMessages(req, res){ // handle messages
try {
/** type {import('./whapi').Message[]} */
const messages = req?.body?.messages;
for (let message of messages) {
if (message.from_me) continue;
/** type {import('./whapi').Sender} */
const sender = {
to: message.chat_id
}
let endpoint = 'messages/text';
const command = Object.keys(COMMANDS)[+message.text?.body?.trim() - 1];
switch (command) { // depending on the command, perform an action
case 'TEXT': {
sender.body = 'Simple text message';
break;
}
case 'IMAGE': {
sender.caption = 'Text under the photo.';
sender.media = fs.createReadStream(FILES.IMAGE); // read file
endpoint = 'messages/image';
break;
}
case 'DOCUMENT': {
sender.caption = 'Text under the document.';
sender.media = fs.createReadStream(FILES.DOCUMENT);
endpoint = 'messages/document';
break;
}
case 'VIDEO': {
sender.caption = 'Text under the video.';
sender.media = fs.createReadStream(FILES.VIDEO);
endpoint = 'messages/video';
break;
}
case 'CONTACT': {
sender.name = 'Whapi Test';
sender.vcard = fs.readFileSync(FILES.VCARD).toString();
endpoint = 'messages/contact';
break;
}
case 'PRODUCT': {
/* you can get real product id using endpoint https://whapi.readme.io/reference/getproducts */
endpoint = `business/products/${config.product}`;
break;
}
case 'GROUP_CREATE': {
/* Warning : you can create group only with contacts from phone contact list */
const res = await sendWhapiRequest(`groups`, {subject: 'Whapi.Cloud Test', participants: [message.chat_id.split('@')[0]]});
sender.body = res.group_id ? `Group created. Group id: ${res.group_id}` : 'Error';
break;
}
case 'GROUP_TEXT': {
/*To get group id, use /groups endpoint */
sender.to = config.group;
sender.body = 'Simple text message for the group';
break;
}
case 'GROUPS_IDS': { // get groups
const {groups} = await sendWhapiRequest('groups', {count: 3}, 'GET');
sender.body = groups && groups.reduce((prevVal, currVal, i) => {
return i === 0 ? `${currVal.id} - ${currVal.name}` : prevVal + ',\n ' + `${currVal.id} - ${currVal.name}`;
}, '') || 'No groups';
break;
}
default: { // if command not found - set text message with commands
sender.body = 'Hi. Send me a number from the list. Don\'t forget to change the actual data in the code! \n\n' +
Object.values(COMMANDS).map((text, i) => `${i + 1}. ${text}`).join('\n');
}
}
await sendWhapiRequest(endpoint, sender); // send request
}
res.send('Ok');
} catch (e) {
res.send(e.message);
}
}
// Create a new instance of express
const app = express();
app.use(bodyParser.json());
app.get('/', function (req, res) {
res.send('Bot is running');
});
app.post('/hook/messages', handleNewMessages); // route for get messages
setHook().then(() => {
const port = config.port || (config.botUrl.indexOf('https:') === 0 ? 443 : 80) // if port not set - set port 443 (if https) or 80 (if http)
app.listen(port, function () {
console.log(`Listening on port ${port}...`);
});
});
В этом примере кода:
- Мы инициализируем сервер с помощью Express и устанавливаем вебхук для обработки входящих сообщений.
- Когда получено текстовое сообщение, бот отвечает, повторяя полученный текст.
- Для отправки сообщений мы используем функции sendTextMessage и sendImageMessage.
Пожалуйста, замените YOUR_API_TOKEN на ваш реальный API-токен от Whapi.Cloud. Этот код является базовым примером и может быть дополнен другими функциями и обработчиками для создания более сложных и интерактивных ботов.
Расширение функционала
После успешного запуска и тестирования вашего чат-бота для WhatsApp, есть множество способов дальнейшего расширения его функциональности, чтобы сделать бота ещё более полезным и интерактивным для пользователей. Вот некоторые частые юзеркейсы:
- Отправка файлов по ссылке.
Отправить медиа-файл по ссылке очень просто. Главное условие, чтобы сам по себе файл был доступен напрямую по ссылке (в связи с этим не подходят Облачные сервисы по типу Google Drive или Dropbox, так как они не предоставляют прямой доступ к файлу). Используйте параметр media в любом из методов, которые позволяют отправлять медиа-файлы. Более подробнее информацию читайте в нашей статье: Эндпоинт для отправки медиафайла.
- Распределение лидов по группам.
Вам потребуется функция создания группы, а так же добавление участника в группу. Добавить участника в группу не составит труда, однако здесь есть некоторые нюансы. Мы описали подробнее в статье: "Добавление нового участника в группу"
- Интеграция с CRM.
Технически интеграция с CRM не так сильно отличается от чат-бота, с разницей лишь в том, что добавляется дополнительный ресурс с собственным API, который необходимо использовать. Добавьте функции, позволяющие пользователям бронировать услуги, заказывать товары или получать актуальную информацию из внешних источников в реальном времени.
- Опросы, как аналог кнопок у ботов.
Интерактивные кнопки в WhatsApp - очень удобный инструмент для работы с клиентами. Однако большинству пользователей WhatsApp эта функция недоступна. Мы за то, чтобы облегчить общение с пользователями, поэтому предлагаем вам удобную альтернативу - использовать опросы в качестве кнопок. Подробная статья с исходным кодом на NodeJS и как этим пользоваться.
- Увеличение вовлеченности клиентов.
Используйте сторисы, меняйте статусы вашего номера, ставьте лайки и другие эмодзи на сообщения ваших клиентов, отправляйте голосовые сообщения - увеличивайте вовлечение при работе с клиентами.
- Проверка номера на наличие WhatsApp.
Проверьте, существует ли указанный номер телефона в WhatsApp или нет. Определите, какие телефонные номера активны, а какие не могут получать сообщения WhatsApp. Интегрируйте в свое приложение, прежде чем делать рассылку! Исходный код на ГитХабе и инструкция по работе здесь.
Мы предоставляем комплексную поддержку нашим клиентам! Если у вас возникнут вопросы по работе бота, настройке платформы или вы столкнетесь с техническими трудностями, вы всегда можете рассчитывать на помощь.
Мы надеемся, что это руководство поможет вам успешно запустить чат-бота для WhatsApp. Удачи в ваших начинаниях!