- Создание Python Telegram бота и его deploy на виртуальную машину
- Шаги
- Шаг 1. Создание бота в Telegram
- Шаг 2. Напишем простейшего чат-бота и протестируем его
- Шаг 3. Выбираем виртуальную машину!
- Что вообще такое эта виртуальная машина?
- Как выбрать виртуальную машину?
- Создание виртуальной машины.
- Настройка сети.
- Подключение к виртуальной машине
- Шаг 5. Настройка беспрерывной работы нашего бота.
- Telegram bot для начинающих с выгрузкой на сервер ubuntu
- Юный падаван
- Через тернии к звездам
Создание Python Telegram бота и его deploy на виртуальную машину
Рынок чат-ботов в России растет с бешеной скоростью и ожидается ежегодный прирост на 30% в течение ближайших трех лет. В 2020 г. количество запросов на чат-боты увеличилось на 17% по сравнению с 2019 г. Большим спросом стали пользоваться голосовые боты, количество запросов на них выросло в четыре раза. В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от организаций из госсектора, образования, медицины, логистики, ретейла и e-commerce, промышленных и добывающих компаний.
Шаги
- Создаём нашего telegram бота.
- Пишем код под наши задачи и тестируем его работоспособность.
- Выбираем надежный сервис виртуальных машин.
- Переносим нашего бота на виртуальную машину для его дальнейшей работы.
- Настраиваем беспрерывную работу бота.
Шаг 1. Создание бота в Telegram
Первые три шага опишу максимально кратко, так как статей на эту тему много и обычно это не вызовет у пользователей никаких трудностей. Для создания бота нам понадобится написать BotFather.
Шаг 2. Напишем простейшего чат-бота и протестируем его
Для работы будем использовать библиотеку telebot, которую можно установить при помощи следующей команды:
$ pip install pytelegrambotapi
Для установки других библиотек, в случае того, если вы не ограничиваетесь базовым функционалом вам поможет господь Google.
Напишем простого бота, который будет присылать нам в ответ на различные Emoji их размытые PNG копии:
import telebot import PIL from PIL import Image from requests import get #Сюда подставляете свой токен bot = telebot.TeleBot('1653707062:AAHxX29RP5HY-nVb21SSD8ZRbKpxKseSyS4') @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, 'Пришли мне Emoji, который необходимо сделать размытым.) @bot.message_handler(content_types=['text']) def send_text(message): if message.text.lower() == 'нам первый смайлик': img = open('Смайлики и люди 1.png', 'rb') bot.send_document(message.chat.id, img) elif message.text.lower() == 'наш второй смайлик': img = open('Смайлики и люди 2.png', 'rb') bot.send_document(message.chat.id, img) else: bot.send_message(message.chat.id, 'Прости, но пока у меня нет этих Emoji') bot.polling() #сами смайлики прописать не могу, иначе публикация не обрабатывается на habr
Наш бот готов, теперь осталось его протестировать. Заходим по ссылке, которую прислал BotFather.
Поздравляю, наш бот теперь работает. И тут мы подходим к главной проблеме: как только мы выключим наш компьютер с запущенным кодом, бот мгновенно перестанет работать. Для решения этой проблемы нам-то и понадобится сервис предоставляющий виртуальные машины.
Шаг 3. Выбираем виртуальную машину!
Что вообще такое эта виртуальная машина?
Виртуальная машина (ВМ ) — это виртуальный компьютер, который использует выделенные ресурсы реального компьютера (процессор, диск, адаптер). Эти ресурсы хранятся в облаке и позволяют ВМ работать автономно. Простыми словами, виртуальная машина позволяет создать на одном компьютере ещё один компьютер, который будет использовать его ресурсы, но работать изолированно.
Именно виртуальная машина поможет нашему боту отвечать на все запросы и работать 24 на 7.
Как выбрать виртуальную машину?
ВМ выбирается исключительно отталкиваясь от ваших потребностей бюджета. Чем больше вам необходимо мощности и памяти, тем выше будет ее стоимость. В настоящее время есть множество хороших сервисов, предоставляющих пробный период с которым вы сможете определиться, подходит ли вам сервис.
Лично я могу рекомендовать следующие сервисы:
- Mail cloud solutions — Предоставляют 3000 р. на два месяца тестового периода. (Именно его я и буду использовать в дальнейшей работе).
- Yandex.Cloud — Представляют 2000 р. на два месяца тестового периода.
- Google Cloud Platform — Предоставляют 300$ на три месяца тестового периода.
После выбора сервиса, пройдем регистрацию и создадим новую виртуальную машину.
Создание виртуальной машины.
Я выбрал минимальные параметры, так как нашему боты не нужны какие-то большие энергоресурсы.
Настройка сети.
Для подключения будем использовать протокол SSH. Для подключения к нашей виртуальной машине, нам необходимо будет выпустить новую связку ssh-ключей.
Для этого перейдем в терминал и пропишем следующую команду:
Затем пропишем имя нашего ключа и нажмем Enter. Наш ключ создан. Для подключения нам понадобится public-key с расширением .pub. Копируем содержимое нашего файла и вставляем его в соответствующее поле «Ключ виртуальной машины».
Переходим к следующему шагу.
Подключение к виртуальной машине
Для подключения к нашей виртуальной машине пропишем следующую команду:
ssh -i ~/.ssh/ИмяВашегоКлюча ubuntu@ваш публичный IP-адрес
Например: ssh -i ~/.ssh/my_key ubuntu@22.222.222.222
В случае удачного подключения вы увидите нечто подобное:
Мы подошли к самому сложному шагу, который я надеюсь, благодаря моей статье перестанет быть столь трудным для освоения.
- Установим на наш сервер последнюю версию Python. Для этого последовательно вводите следующие команды:
$ sudo apt update $ sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev $ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz $ tar -xf Python-3.8.5.tgz $ cd Python-3.8.5 $ ./configure --enable-optimizations $ make # ~15 минут $ sudo make altinstall $ cd /home
$ python3.8 -m pip install --upgrade pip $ pip install virtualenv $ mkdir НазваниеВашегоБота $ cd НазваниеВашегоБота $ virtualenv venv $ source venv/bin/activate $ python -V $ deactivate
$ sudo apt install redis-server $ redis-cli
Проверить, запущен ли наш Redis-server, необходимо прописать «ping»
Если в ответе вы получили PONG, поздравляю, все готово к дальнейшей работе!
- Перенесем все необходимые файлы на наш виртуальный сервер. Для этого я буду использовать очень удобную программу CyberDuck
Выбираем новое подключение по SFTP, вводим IP-адрес вашей виртуальной машины, !ПРИВАТНЫЙ! ssh-ключ, логин и пароль от вашей виртуальной машины.
- Мы попадаем фактически на наш сервер, с уже установленным Python, папкой с названием нашего бота и виртуальным окружением. Остается перенести все данные нашего бота. Для этого копируем ВСЕ необходимые файлы и вставляем их на сервер.
- Поздравляю, мы на финишной прямой, остается запустить нашего бота на сервере и проверить его работоспособность.
$ cd /home/НазваниеВашегоБота/ # перейдем в папку проекта $ source venv/bin/activate # активируем окружение $ pip install -r requirements.txt # установим зависимости $ python main.py # запустим бота
Проверяем работу, если все в порядке, прописываем в терминале deactivate. Нам остается последний шаг. Настроить непрерывную работу нашего бота.
Шаг 5. Настройка беспрерывной работы нашего бота.
Пропишем следующую команду: nano /lib/systemd/system/НазваниеБота.service
[Unit] Description=Описание вашего бота After=network.target [Service] EnvironmentFile=/etc/environment ExecStart=/home/НазваниеБота/venv/bin/python main.py ExecReload=/home/НазваниеБота/venv/bin/python main.py WorkingDirectory=/home/НазваниеБота/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
Нажимаем CTRL+O → Enter → CTRL+X для сохранения. Эти настройки помогут запускать или перезапускать нашего бота.
- Последний шаг: Снова запускаем нашего бота, но уже с беспрерывной работой.
sudo systemctl enable НазваниеБота sudo systemctl start НазваниеБота
ГОТОВО! Наш бот запущен и теперь работает 24/7, независимо от того, включен наш с вами компьютер или нет. Если что-то не работает, тщательно проверьте, правильно ли вы прописали путь к файлам. Если терминал выдает ошибку авторизации, попробуйте добавить перед командой «sudo» (Команда от имени администратора)
P.S. Тема телеграм-ботов стала весьма интересной и актуальной в последнее время, поэтому буду рад услышать здравую критику по поводу моей первой на этот момент статьи. Если у вас возникнут идеи для написания новых, буду рад их выслушать.
Telegram bot для начинающих с выгрузкой на сервер ubuntu
Привет всем, хочу поделится опытом создания своего первого чат бота в телеграм. Меня вдохновила идея автоматизированного бизнеса с использованием чат ботов и голосовых ассистентов, потому что я считаю, что за этими технологиями будущее торговли товарами или продажа услуг в интернете.
Юный падаван
Так как опыта в программировании у меня не было, пришлось идти путем проб и ошибок. Я перечитал огромное количество материалов, посвященных созданию телеграм ботов и у меня сложилось впечатление, что авторы чего-то не договаривают, либо я еще совсем юный подаван. Первое с чем я столкнулся, был вопрос: на каком ПО заняться разработкой бота — Windows или Linux? Windows был мне знаком с детства, но слишком частые обновления и монопольный консерватизм Windows подтолкнули меня к Linux, к тому же, при установке Ubuntu рядом с Windows, я допустил грубую ошибку в связи со своей неопытностью, установив Ubuntu на весь жесткий диск)
Через тернии к звездам
Еще одна проблема, с которой я столкнулся, это блокировка телеграм в России, то есть запросы не отправлялись на сервер telegram bot api.
Для начала работы нужно установить vpn на Ubuntu, я решил использовать vpn windscribe — хороший и бесплатный vpn, ссылка для установки rus.windscribe.com/guides/linux#how-to
Далее нужно установить Python
sudo apt-get install python3
С ним уже в комплекте идет менеджер пакетов pip3.
Кстати, очень важная тема Виртуальная среда python . Виртуальная среда изолирует нужную версию для python и пакетов pip, так как все по умолчанию устанавливается глобально и при написании кода на python из-за различных версий пакетов может не запуститься код.
Для начала нужно установить виртуальную среду с помощью модуля venv
Для этого создадим директорию с любым название, в моем случае bots
Затем переходим в директорию bots
sudo apt-get install python3-venv
Устанавливаем виртуальную среду в каталог bots
Далее в каталоге bots создаем виртуальную среду
python3 -m venv my-project-env
Следующий шаг — активируем ее
source my-project-env/bin/activate
Итак, виртуальная среда готова, теперь установим пакет pyTelegramBotAPI в каталог bots
pip3 install pyTelegramBotAPI
Теперь приступим к написанию кода, я использовал код из рипозитория gihub pyTelegramBotAPI.
Переходим в каталог бот и создаем файл с расширением в конце .py Я использую редактор NANO, вы можете использовать любой другой редактор, на ваше усмотрение)
import telebot bot = telebot.TeleBot("TOKEN") @bot.message_handler(commands=['start', 'help']) def send_welcome(message): bot.reply_to(message, "Howdy, how are you doing?") @bot.message_handler(func=lambda message: True) def echo_all(message): bot.reply_to(message, message.text) bot.polling()
Этот код возвращает то слово или команду, которую вы отправили боту. Где TOKEN нужно вставить «TOKEN» вашего бота.
Теперь нужно включить ваш vpn, лучше включить vpn в каталоге bots
Затем запустите бота с помощью команды
После этого бот должен заработать.
Для того, чтобы бот работал автономно и вам не приходилось все время сидеть с включенным пк, его надо загрузить на удаленный сервер. Для этого я использовал Ubuntu Server, главное чтобы он был расположен в другой стране, опять же из-за блокировки телеграм в РФ, я нашел vps стоимостью 3$, его достаточно для создания обыкновенного бота.
Как развернуть удаленный сервер я расскажу в следующей статье.