Не просто "привет, мир": ваш первый живой чат-бот на JavaScript
Чат-боты перестали быть игрушкой для гиков. Сегодня это рабочий инструмент: от техподдержки до продажи пиццы. И если вы думаете, что для создания бота нужно знать C++ или Python, — спешу обрадовать. Создание чат-бота на JavaScript — это реально, быстро и невероятно увлекательно.
В этой статье мы не будем рассматривать сухую теорию. Мы возьмём и соберём полноценного telegram bot javascript, который будет отвечать на вопросы, запоминать пользователей и даже шутить. А потом я покажу, как легко превратить его в чат-бот для сайта.
Готовы? Тогда открывайте любимый редактор, ставьте Node.js, и погнали!
Что нам понадобится?
- Node.js (версия 16+) — среда выполнения. Скачать можно с официального сайта.
- Любой редактор кода — VS Code, WebStorm или даже Блокнот (но я не рекомендую).
- Терпение и чашка кофе — остальное сделает JavaScript.
В качестве платформы для тестов возьмём Telegram — у него простой API и куча документации. Позже вы сможете адаптировать код для Discord, Slack или своего сайта.
Шаг 1. Регистрируем бота и получаем токен
Прежде чем писать код, нам нужно "родить" бота. Делается это через главного бота Telegram — @BotFather.
- Откройте Telegram и найдите BotFather.
- Напишите команду
/newbot. - Придумайте имя (например, MyFirstJBot) и юзернейм (обязательно заканчивается на
bot, например my_first_js_bot). - Получите токен — длинную строку вида
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Это пароль вашего бота.
Сохраните токен в надёжном месте. Если потеряете — придётся создавать нового бота.
Шаг 2. Настройка проекта и установка зависимостей
Создадим папку для проекта и инициализируем npm:
mkdir my-telegram-bot
cd my-telegram-bot
npm init -y
Теперь установим библиотеку node-telegram-bot-api — это самый популярный пакет для создания чат-бота на node.js:
npm install node-telegram-bot-api
Готово. Теперь создайте файл bot.js и откройте его в редакторе.
Шаг 3. Пишем "скелет" бота
Начнём с самого простого — бот будет отвечать на команду /start и повторять за пользователем любое сообщение.
const TelegramBot = require('node-telegram-bot-api');
const token = 'ВАШ_ТОКЕН_СЮДА';
const bot = new TelegramBot(token, { polling: true });
bot.onText(/\/start/, (msg) => {
const chatId = msg.chat.id;
bot.sendMessage(chatId, `Привет, ${msg.from.first_name}! Я — твой первый чат-бот на JavaScript. Чем могу помочь?`);
});
bot.on('message', (msg) => {
const chatId = msg.chat.id;
const text = msg.text;
// Игнорируем команды, чтобы не дублировать ответ
if (text.startsWith('/')) return;
bot.sendMessage(chatId, `Ты написал: "${text}". А я — эхо-бот!`);
});
Запускаем:
node bot.js
Напишите боту в Telegram — он ответит. Поздравляю! Вы только что создали чат-бота на JavaScript. Да, пока он глупый, но это только начало.
Шаг 4. Добавляем логику: простой FAQ-бот
Эхо-боты быстро надоедают. Давайте сделаем так, чтобы бот отвечал на конкретные вопросы. Это уже похоже на реальный чат-бот для сайта.
Создадим простую базу знаний в виде объекта:
const faq = {
'как дела': 'Отлично! А у тебя?',
'что ты умеешь': 'Я могу отвечать на простые вопросы и рассказывать анекдоты.',
'расскажи анекдот': 'Идёт медведь по лесу, видит — машина горит. Сел в неё и сгорел. Вот такой вот анекдот!',
'кто тебя создал': 'Меня создал разработчик, который изучает JavaScript. Он молодец!',
};
bot.on('message', (msg) => {
const chatId = msg.chat.id;
const text = msg.text?.toLowerCase().trim();
if (!text || text.startsWith('/')) return;
// Ищем точное совпадение или частичное совпадение
let answer = faq[text];
if (!answer) {
// Если точного ответа нет, ищем по ключевым словам
for (const key in faq) {
if (text.includes(key)) {
answer = faq[key];
break;
}
}
}
if (answer) {
bot.sendMessage(chatId, answer);
} else {
bot.sendMessage(chatId, 'Я пока не знаю, что ответить. Но я учусь!');
}
});
Теперь напишите боту "расскажи анекдот" — он выдаст шутку. А если написать "как дела, бот?", он найдёт ключевое слово "как дела" и ответит. Вот так работает создание чат-бота javascript с элементарной логикой.
Шаг 5. Запоминаем пользователей (простое хранилище)
Настоящий telegram bot javascript должен помнить, кто с ним общался. Добавим простейшую "память" — будем сохранять имена пользователей в JSON-файл.
const fs = require('fs');
const path = require('path');
const USERS_FILE = path.join(__dirname, 'users.json');
// Загружаем пользователей из файла (если есть)
let users = {};
if (fs.existsSync(USERS_FILE)) {
users = JSON.parse(fs.readFileSync(USERS_FILE, 'utf-8'));
}
function saveUsers() {
fs.writeFileSync(USERS_FILE, JSON.stringify(users, null, 2));
}
bot.onText(/\/start/, (msg) => {
const chatId = msg.chat.id;
const userId = msg.from.id;
const userName = msg.from.first_name;
// Запоминаем пользователя
if (!users[userId]) {
users[userId] = {
name: userName,
firstSeen: new Date().toISOString(),
};
saveUsers();
bot.sendMessage(chatId, `Новый пользователь! Привет, ${userName}!`);
} else {
bot.sendMessage(chatId, `С возвращением, ${users[userId].name}!`);
}
});
bot.onText(/\/stats