В статье расскажем, как создать телеграм-бота, а в качестве площадки для бота будем использовать облачный сервер от Timeweb Cloud.
Чтобы бот заработал, его необходимо зарегистрировать в Telegram. За регистрацию отвечает BotFather.
Шаг 1. Найдите пользователя @BotFather. В приветствии можно изучить общую документацию о ботах и API. В самом низу нажимаем кнопку «Запустить», в ответ получим список возможных команд и что они делают.
Шаг 2. Нам нужно зарегистрировать нового бота, поэтому выбираем команду:
/newbot
Шаг 3. Теперь необходимо придумать имя нашего бота. Указываем что угодно, для примера напишем:
MyBotTest
Шаг 4. Следующий шаг – необходимо придумать логин. Обратите внимание, чтобы логин заканчивался на «bot» в любом его виде, либо «*Bot», либо «_bot»:
{никнейм}Bot
Сложность этого шага заключается в том, чтобы найти свободный никнейм. Если такой логин занят, мы получим соответствующее извещение.
При успешной регистрации в ответ получим приветственное сообщение и ключ для HTTP-API. Сохраните ключ в надёжном месте.
Если потерялся сохранённый ключ, узнать его можно при помощи команды /token
. Далее выберите бота, для которого нужен новый ключ. Заново создавать бота не потребуется.
После завершения регистрации ищем бота в списке контактов. На текущий момент он ничего не умеет делать, просто прочитывает сообщения. С логикой работы разберёмся позже.
Вернёмся в @BotFather и попросим его показать наших ботов:
/mybots
В появившемся списке выберем нужного бота и посмотрим, что с ним можно сделать.
По названиям кнопок будет понятно, что можно изменить имя, описание (приветствие при первом подключении), загрузить аватар. Из этого меню можно указать список доступных команд для бота с их описанием. Сами команды работать будут только с использованием дополнительной логики, реализованной сторонними программами-клиентами.
Для запуска бота нам понадобится рабочее пространство. В нашем случае мы будем использовать облачный сервер. Подойдёт даже самая простая конфигурация, а из операционных систем порекомендуем Ubuntu или Debian. Но отметим, ввиду того, что обновления для Debian выходят с большим опозданием, скорее всего, версии нужных пакетов не будут соответствовать минимальным требованиям программ-клиентов и придётся собирать нужную версию Python из исходников.
Самые распространённые боты написаны на языке Python. Установить Python на облачный сервер можно командой:
sudo apt-get install python3 python3-pip
После установки проверить версию:
python3 -V
Одной из последних версий является 3.11, но для работы нашего примера подойдёт и 3.7.
Для установки python-клиента достаточно написать в консоли:
pip3 install python-telegram-bot
По зависимостям будут установлены дополнительные пакеты, необходимые для работы python-telegram-bot
. Чтобы не засорять систему, рекомендуется использовать виртуальное окружение. Эта возможность встроена в Python, быстро настраивается, не засоряет основную систему, а виртуальную среду со всем содержимым можно безболезненно удалить в будущем одной командой (rm -rf <имя>
).
Создадим каталог для виртуального окружения, зайдём в него и установим копию Python:
mkdir bot_env && cd bot_env
python3 -m venv venv
Активируем виртуальное окружение:
source venv/bin/activate
После успешной активации перед строкой для ввода команд появится venv
. Теперь установим клиент:
pip install python-telegram-bot
Деактивировать виртуальное окружение можно, набрав:
deactivate
Предусмотрена возможность запускать скрипты без его явной активации, в таком случае необходимо набирать полный путь, вместо python3
.
При деактивированном окружении в нашем примере набираем:
/root/bot_env/venv/bin/python3
Примеры ботов можно найти на этой странице. Для демонстрации работы используем пример echobot.py
, сохраните его в домашнюю папку (по умолчанию это /root
). Если используется виртуальное окружение, директория будет /root/bot_env
. Необходимо в 67 строке заменить слово TOKEN
на ключ, полученный при регистрации.
Загрузить пример можно сначала на свой компьютер, отредактировать файл и загрузить через файловый менеджер, например WinSCP.
Запустить пример можно, набрав в консоли:
python3 echobot.py
После успешного запуска в ответ получим:
telegram.ext._application - INFO - Application started
Наш бот echobot.py
умеет читать сообщения и отсылать ответ. Найдём в Телеграм пользователя с ником, который мы указывали при регистрации: @{никнейм}Bot
и нажмём кнопку «Запустить» или отправим команду /start
.
Если всё сделали верно, в ответ получим приветствие с вашим именем и ссылкой на профиль. При дальнейшем общении бот будет отправлять сообщения с полученным текстом.
echobot.py
– самый простой демонстрационный бот. На странице примеров python-telegram-bot
есть более сложные рабочие заготовки, которые можно сразу опробовать и применить для своих нужд с минимальными правками.
Чтобы бот автоматически запускался при загрузке системы, создадим свою службу в Systemd. Systemd доступен в новых версиях Ubuntu и в Debian версии 8.
Если не использовалось виртуальное окружение, нам потребуется полный путь к Python. Узнать, где он установлен, можно командой:
which python3
В ответ получим строку вида:
/usr/local/bin/python3
Перейдём в каталог Systemd:
/usr/lib/systemd/system/
/lib/systemd/system/
И создадим файл bot.service
:
[Unit]
Description=My Python Bot
After=network.target network-online.target
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
ExecStartPre=/bin/mkdir -p /var/run/bot
PIDFile=/var/run/bot/service.pid
ExecStart=<путь к питону> <путь к скрипту бота>
[Install]
WantedBy=multi-user.target
Возможные значения ExecStart
:
venv
: ExecStart=/usr/local/bin/python3 /root/echobot.py
venv
: ExecStart=/root/bot_env/venv/bin/python3 /root/bot_env/echobot.py
Сохраняем файл, выставляем разрешения не ниже 644, перезагружаем Systemd:
systemctl daemon-reload
Добавляем службу бота в автозагрузку:
systemctl enable bot.service
Проверить состояние службы можно командой:
systemctl status bot
В ответ получим информацию о службе. Нас интересуют 2 пунка:
Loaded: loaded
Active: inactive
Служба добавлена (loaded
), но не запущена (inactive
), запустить её можно, перезагрузив облачный сервер или выполнив команду:
systemctl start bot
Ещё раз проверяем состояние службы, значение «Active» должно стать active (running)
и быть зелёного цвета.
Представленный пример на Python представлен как самый простой. Telegram – достаточно популярный, существуют клиентские программы, написанные на разных языках: Java, PHP, NodeJS и прочее. Все имеют готовые примеры для подключения и получения сообщений, нужную логику работы реализует сам пользователь.
В сети можно найти разные готовые скрипты викторин, опросников или прочих развлечений.
Подобно голосовому меню мобильных операторов, боты могут решать большинство простых задач без привлечения человека: отвечать на заранее известные вопросы; отслеживать заказы; проводить опросы и даже бронировать места в различных заведениях.
В Интернете есть множество готовых типичных решений, которые помогут быстро начать разработку логики работы на любом понятном языке программирования. Если вы не обладаете знаниями программиста, простую логику работы можно собрать на специальных конструкторах.
Боты могут не только отвечать на заранее настроенные вопросы. Сложные клиентские программы могут использовать машинное обучение, которое анализирует введённый текст и совершает нужное действие.
Некоторые программы-клиенты поддерживают не только текстовый ввод, они принимают звонки или проигрывают музыку.
Надеемся, что информация была полезной. Попробуйте самостоятельно запустить бота, для этого потребуются только желание и 10 минут свободного времени.