Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как создать Telegram-бота на Node.js

2693
15 минут чтения
Средний рейтинг статьи: 5

Боты в 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 также выдаст вам уникальный токен бота, который нельзя никому показывать.

Image9

Разработка

Мы создадим бота, который будет отправлять различные викторины, в виде опросов Telegram. Тематикой вопросов будут школьные предметы. В боте будет две команды, одна для отправки вопросов, а другая для выбора тем вопросов.  

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

Если Node.js установлен, можно приступать к разработке бота. Сперва создайте на GitHub новый приватный репозиторий и в пункте Add .gitignore выберите Node

Image11

Теперь клонируйте этот репозиторий себе на ПК используя консоль. Если вы хотите, чтобы проект находился на рабочем столе, то введите:

    

Затем введите:

    

Вместо ссылки на мой репозиторий, используйте свою.

Далее, после клонирования, не закрывая консоль, введите:

    

Вместо School-Quiz используйте реальное название папки вашего проекта, которая клонировалась с GitHub.

Для инициализации проекта выполните команду:

    

Вам предложат ввести имя пакета, версию, описание, главный файл по умолчанию, тест команду, Git репозиторий, ключевые слова, автора и лицензию. Вы можете оставить значения по умолчанию, нажимая «Enter».

Image6

Теперь установим библиотеку, с помощью которой и будем писать код для бота. Введите в консоль (убедившись, что находитесь в папке с проектом) команду:

    

После завершения процесса установки можно приступать к написанию кода. Откройте файл 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, предварительно нужно зарегистрироваться.

Для начала нужно создать новый проект. При создании вы можете указать иконку, название, описание, а также пользователей.

Image5

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

Screenshot 10 09 24 14:16:26

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

Image2

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

Image10

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

Image3

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

Image7

Когда всё выбрали, нажимайте на кнопку «Заказать». Через некоторое время, сервер запустится и можно продолжить работу.

Запуск бота

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

Image1

Теперь введите команду, чтобы получить последние обновления:

    

Первоначально создадим новую папку, куда и поместим нашего бота. Вводите эти команды последовательно:

    

Вместо папки «Bot», вы можете создать папку с другим именем. 

Перенесем код с GitHub на наш сервер.

Чтобы удостовериться, что Git установлен на сервере (по умолчанию он всегда установлен) выполните:

    

Установим глобальные настройки Git, чтобы он был настроен на ваш профиль на GitHub:

    

После этого, введите команду для клонирования репозитория, указав свою ссылку:

    

При клонировании у вас снова попросят ввести username, а затем пароль. Если у вас установлена двухфакторная аутентификация на аккаунте, то при вводе обычного пароля, вам будет выдавать ошибку о том, что пароль неверный. Чтобы вы могли клонировать репозиторий с 2FA на аккаунте, вам нужно создать личный токен доступа.

Для создания личного токена доступа на GitHub выполните следующие шаги: 

  1. Перейдите в настройки профиля: 

Нажмите на свою аватарку в правом верхнем углу и выберите «Settings»

  1. В левом меню выберите «Developer settings».

  2. Создание нового токена: 

    1. В разделе «Personal access tokens» выберите «Tokens (classic)».
    2. Нажмите кнопку «Generate new token». 
  3. Установите параметры токена: 

    1. В поле «Note» укажите описание для токена.
    2. Установите срок действия токена в поле «Expiration». 
    3. Выберите необходимые разрешения для токена в разделе «Select scopes». Например, для работы с репозиториями выберите repo
  4. Нажмите кнопку «Generate token». 

  5. Скопируйте сгенерированный токен и сохраните его в безопасном месте. Учтите, что вы не сможете увидеть токен повторно после закрытия страницы.

Перейдите в вашу папку с проектом с помощью  команды:

    

Вместо School-Quiz укажите название своего проекта. Чтобы установить пакеты вашего проекта, выполните команду:

    

После установки пакетов, можно запустить проект, с помощью:

    

В консоли появится сообщение «Бот запущен». Но есть одна проблема, если вы перезапустите сервер или закроете консоль, то бот перестает работать! Чтобы бот работал постоянно, а также автоматически запускался после перезагрузки, достаточно установить менеджера процессов pm2.

Установите pm2 командой:

    

Затем запустите сервер Node.js, используя pm2:

    

В примере используется имя «bot-quiz». Так будет называться запущенный процесс. Вы можете придумать любое другое имя.

Настройте автозапуск при запуске или перезагрузке сервера:

    

Сохраните все введенные изменения:

    

Image4

Разверните свое Node.js-приложение
на VDS/VPS Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

В данной статье мы подробно рассмотрели процесс создания Telegram-бота на платформе Node.js, начиная с регистрации бота через BotFather и заканчивая развертыванием готового решения на сервере.

2693
15 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server