Боты в Telegram стали неотъемлемой частью этого мессенджера: каждый день сотни тысяч людей пользуются ими, и неспроста. Telegram-боты легки в использовании для пользователей, а разработчики могут быстро и комфортно их создавать благодаря развивающемуся API Telegram, который старается становиться лучше с каждым днём.
Идеей Telegram-ботов является автоматизация задач и расширение функционала мессенджера. Боты могут выступать как в роли простых помощников, выполняя команды, так и в роли сложных систем с полноценной бизнес-логикой. От рассылки новостей до сложных игровых механик — возможности ботостроения практически безграничны.
На Node.js можно реализовать практически любой функционал для Telegram-бота, благодаря экосистеме библиотек и фреймворков. Node.js, как платформа с асинхронной обработкой запросов, идеально подходит для построения ботов, которые должны работать в режиме реального времени и взаимодействовать с тысячами пользователей одновременно. Вот некоторые возможности, которые можно реализовать:
-
Базовый функционал:
- Ответы на команды.
- Инлайн-боты.
- Кнопки.
-
Интеграции с внешними сервисами:
- API и базы данных.
- Webhook.
-
Уведомления:
- Рассылка уведомлений по расписанию, или при наступлении определённых событий.
- Автоматическая отправка новостей из источников через каждые N секунд.
-
Аналитика:
- Сборка различной статистики.
Создание Telegram-бота
Сперва нужно создать бота внутри Telegram. Воспользуйтесь официальным ботом BotFather, чтобы зарегистрировать бота. Используйте кнопку «Запустить» (а если вы уже пользовались ботом, то отправьте команду /start), в ответе бота найдите и выберите команду /newbot. BotFather предложит указать имя бота, а затем его username. При этом нужно, чтобы в конце было слово bot. Например, если у вашего бота название Tetris, то username должен быть таким:
- TetrisBot
- Tetris_bot
- Tetrisbot
- Tetris_Bot
Если всё указано верно, то бот будет создан. BotFather также выдаст вам уникальный токен бота, который нельзя никому показывать.

Разработка
Мы создадим бота, который будет отправлять различные викторины, в виде опросов Telegram. Тематикой вопросов будут школьные предметы. В боте будет две команды, одна для отправки вопросов, а другая для выбора тем вопросов.
Перед началом разработки нужно, чтобы на вашем ПК были установлены Node.js и npm. Скачать Node.js можно с официального сайта, а npm установится автоматически вместе с Node.js. Если же вы используете Linux, то установить npm можно, воспользовавшись инструкцией.
Если Node.js установлен, можно приступать к разработке бота. Сперва создайте на GitHub новый приватный репозиторий и в пункте Add .gitignore выберите Node.

Теперь клонируйте этот репозиторий себе на ПК используя консоль. Если вы хотите, чтобы проект находился на рабочем столе, то введите:
Затем введите:
Вместо ссылки на мой репозиторий, используйте свою.
Далее, после клонирования, не закрывая консоль, введите:
Вместо School-Quiz используйте реальное название папки вашего проекта, которая клонировалась с GitHub.
Для инициализации проекта выполните команду:
Вам предложат ввести имя пакета, версию, описание, главный файл по умолчанию, тест команду, Git репозиторий, ключевые слова, автора и лицензию. Вы можете оставить значения по умолчанию, нажимая «Enter».

Теперь установим библиотеку, с помощью которой и будем писать код для бота. Введите в консоль (убедившись, что находитесь в папке с проектом) команду:
После завершения процесса установки можно приступать к написанию кода. Откройте файл package.json и найдите строку scripts, внутрь неё над командой test, введите:
Это необходимо для того, чтобы можно было запускать проект вводя в консоль npm start, а не node и имя файла.
Теперь создайте файле index.js и внутри него напишите следующее:
Теперь создайте папку внутри проекта под названием questions, а внутри этой папки нужно создать три JSON-файла:
english.json
history.json
math.json
Внутри этих JSON-файлов находятся заголовок вопроса, варианты ответов, номер правильного ответа, а также пояснение, которое будет отправляться, если пользователь ответил неверно.
Дополнение
Недавно в Telegram добавили внутреннюю валюту Telegram Stars, а также предоставили обновление для API, с помощью которого можно добавить донат в вашем боте в Stars. Добавим команду donate внутрь файла index.js, при отправке которой бот будет присылать счёт для оплаты.
Также добавим ещё одну команду — support. С её помощью большое количество пользователей вашего бота смогут написать обращение к вам, при этом у вас не будет множества лишних чатов с различными людьми! Пользователи смогут отправлять текст, фото и видео, а бот будет пересылать эти обращения администратору (в данном случае вам). Эту команду также расположите внутри файла index.js.
В начале файла добавьте:
Благодаря этому ID бот будет понимать, кому нужно переслать сообщение от пользователей. Чтобы узнать свой ID, можно воспользоваться ботом Get My ID, в котором достаточно отправить команду /start.
Далее в конце файла добавьте:
Развертывание на сервере
Теперь, чтобы бот мог работать на постоянной основе, необходимо загрузить и запустить его на сервере. Для развёртывания я буду использовать сервис Timeweb Cloud.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Загрузка на GitHub
Перед запуском бота на сервере, необходимо загрузить файлы проекта на GitHub.
Вводите эти команды в консоль последовательно.
Добавляем все изменения в текущей директории к следующему коммиту:
Создаем коммит с сообщением «first commit», фиксируя все изменения, добавленные командой git add:
Отправляем изменения на GitHub:
Настройка сервера
Если вы ещё не являетесь клиентом Timeweb Cloud, предварительно нужно зарегистрироваться.
Для начала нужно создать новый проект. При создании вы можете указать иконку, название, описание, а также пользователей.

Далее, нам нужно создать облачный сервер. При создании сервера, в первом пункте перейдите во вкладку «Маркетплейс» и выберите Node.js, а версию Ubuntu поставьте самую новую. С помощью этого, когда ваш сервер начнёт работать, на нем сразу будет установлен Node.js и вам не придется устанавливать его вручную.

В регионе выберите тот, который ближе всего, где минимальный пинг.

Конфигурацию выбираете по своему усмотрению. Для запуска проекта достаточно минимальной конфигурации. Если в будущем проекту потребуется больше ресурсов, их можно будет добавить для уже работающего сервера.

В сети обязательно должен быть установлен публичный IP, а дополнительные услуги настраивайте по своему усмотрению.

В авторизации и Cloud-init ничего не меняйте. В информации о сервере введите имя сервера, его описание, а также выберите проект, который мы создали ранее.

Когда всё выбрали, нажимайте на кнопку «Заказать». Через некоторое время, сервер запустится и можно продолжить работу.
Запуск бота
После создания сервера, на вкладке «дашборд», скопируйте Root-пароль для входа и перейдите на вкладку «консоль». Введите логин пользователя «root» и нажмите «Enter». Далее, вставьте пароль, который вы скопировали и также нажмите «Enter». При вставке или написании пароля, он не будет виден! Если всё правильно указали, то вас поприветствуют.

Теперь введите команду, чтобы получить последние обновления:
Первоначально создадим новую папку, куда и поместим нашего бота. Вводите эти команды последовательно:
Вместо папки «Bot», вы можете создать папку с другим именем.
Перенесем код с GitHub на наш сервер.
Чтобы удостовериться, что Git установлен на сервере (по умолчанию он всегда установлен) выполните:
Установим глобальные настройки Git, чтобы он был настроен на ваш профиль на GitHub:
После этого, введите команду для клонирования репозитория, указав свою ссылку:
При клонировании у вас снова попросят ввести username, а затем пароль. Если у вас установлена двухфакторная аутентификация на аккаунте, то при вводе обычного пароля, вам будет выдавать ошибку о том, что пароль неверный. Чтобы вы могли клонировать репозиторий с 2FA на аккаунте, вам нужно создать личный токен доступа.
Для создания личного токена доступа на GitHub выполните следующие шаги:
-
Перейдите в настройки профиля:
Нажмите на свою аватарку в правом верхнем углу и выберите «Settings»
-
В левом меню выберите «Developer settings».
-
Создание нового токена:
- В разделе «Personal access tokens» выберите «Tokens (classic)».
- Нажмите кнопку «Generate new token».
-
Установите параметры токена:
- В поле «Note» укажите описание для токена.
- Установите срок действия токена в поле «Expiration».
- Выберите необходимые разрешения для токена в разделе «Select scopes». Например, для работы с репозиториями выберите
repo.
-
Нажмите кнопку «Generate token».
-
Скопируйте сгенерированный токен и сохраните его в безопасном месте. Учтите, что вы не сможете увидеть токен повторно после закрытия страницы.
Перейдите в вашу папку с проектом с помощью команды:
Вместо School-Quiz укажите название своего проекта. Чтобы установить пакеты вашего проекта, выполните команду:
После установки пакетов, можно запустить проект, с помощью:
В консоли появится сообщение «Бот запущен». Но есть одна проблема, если вы перезапустите сервер или закроете консоль, то бот перестает работать! Чтобы бот работал постоянно, а также автоматически запускался после перезагрузки, достаточно установить менеджера процессов pm2.
Установите pm2 командой:
Затем запустите сервер Node.js, используя pm2:
В примере используется имя «bot-quiz». Так будет называться запущенный процесс. Вы можете придумать любое другое имя.
Настройте автозапуск при запуске или перезагрузке сервера:
Сохраните все введенные изменения:

Разверните свое Node.js-приложение
на VDS/VPS Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
В данной статье мы подробно рассмотрели процесс создания Telegram-бота на платформе Node.js, начиная с регистрации бота через BotFather и заканчивая развертыванием готового решения на сервере.
