Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Остаётся только дописать в начало файла одну строку:
Вот и всё, сохраняем и запускаем нашего бота:
Создание Python Telegram бота и его deploy на виртуальную машину
Кому нужны чат-боты?
Рынок чат-ботов в России растет с бешеной скоростью и ожидается ежегодный прирост на 30% в течение ближайших трех лет. В 2020 г. количество запросов на чат-боты увеличилось на 17% по сравнению с 2019 г. Большим спросом стали пользоваться голосовые боты, количество запросов на них выросло в четыре раза. В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от организаций из госсектора, образования, медицины, логистики, ретейла и e-commerce, промышленных и добывающих компаний.
Создаём нашего telegram бота.
Пишем код под наши задачи и тестируем его работоспособность.
Выбираем надежный сервис виртуальных машин.
Переносим нашего бота на виртуальную машину для его дальнейшей работы.
Настраиваем беспрерывную работу бота.
Шаг 1. Создание бота в Telegram
Первые три шага опишу максимально кратко, так как статей на эту тему много и обычно это не вызовет у пользователей никаких трудностей. Для создания бота нам понадобится написать BotFather.
Шаг 2. Напишем простейшего чат-бота и протестируем его
Для работы будем использовать библиотеку telebot, которую можно установить при помощи следующей команды:
$ pip install pytelegrambotapi
Для установки других библиотек, в случае того, если вы не ограничиваетесь базовым функционалом вам поможет господь Google.
Напишем простого бота, который будет присылать нам в ответ на различные Emoji их размытые PNG копии:
Наш бот готов, теперь осталось его протестировать. Заходим по ссылке, которую прислал BotFather.
Поздравляю, наш бот теперь работает. И тут мы подходим к главной проблеме: как только мы выключим наш компьютер с запущенным кодом, бот мгновенно перестанет работать. Для решения этой проблемы нам-то и понадобится сервис предоставляющий виртуальные машины.
Шаг 3. Выбираем виртуальную машину!
Что вообще такое эта виртуальная машина?
Виртуальная машина (ВМ ) — это виртуальный компьютер, который использует выделенные ресурсы реального компьютера (процессор, диск, адаптер). Эти ресурсы хранятся в облаке и позволяют ВМ работать автономно. Простыми словами, виртуальная машина позволяет создать на одном компьютере ещё один компьютер, который будет использовать его ресурсы, но работать изолированно.
Именно виртуальная машина поможет нашему боту отвечать на все запросы и работать 24 на 7.
Как выбрать виртуальную машину?
ВМ выбирается исключительно отталкиваясь от ваших потребностей бюджета. Чем больше вам необходимо мощности и памяти, тем выше будет ее стоимость. В настоящее время есть множество хороших сервисов, предоставляющих пробный период с которым вы сможете определиться, подходит ли вам сервис.
Лично я могу рекомендовать следующие сервисы:
Mail cloud solutions — Предоставляют 3000 р. на два месяца тестового периода. (Именно его я и буду использовать в дальнейшей работе).
Yandex.Cloud — Представляют 2000 р. на два месяца тестового периода.
Google Cloud Platform — Предоставляют 300$ на три месяца тестового периода.
После выбора сервиса, пройдем регистрацию и создадим новую виртуальную машину.
Создание виртуальной машины.
Я выбрал минимальные параметры, так как нашему боты не нужны какие-то большие энергоресурсы.
Настройка сети.
Для подключения будем использовать протокол SSH. Для подключения к нашей виртуальной машине, нам необходимо будет выпустить новую связку ssh-ключей.
Для этого перейдем в терминал и пропишем следующую команду:
Переходим к следующему шагу.
Подключение к виртуальной машине
Для подключения к нашей виртуальной машине пропишем следующую команду:
/.ssh/ИмяВашегоКлюча ubuntu@ваш публичный IP-адрес
В случае удачного подключения вы увидите нечто подобное:
Мы подошли к самому сложному шагу, который я надеюсь, благодаря моей статье перестанет быть столь трудным для освоения.
Установим на наш сервер последнюю версию Python. Для этого последовательно вводите следующие команды:
Установим и создадим виртуально окружение:
Установим и запустим Redis-server:
Проверить, запущен ли наш Redis-server, необходимо прописать «ping»
Если в ответе вы получили PONG, поздравляю, все готово к дальнейшей работе!
Перенесем все необходимые файлы на наш виртуальный сервер. Для этого я буду использовать очень удобную программу CyberDuck
Мы попадаем фактически на наш сервер, с уже установленным Python, папкой с названием нашего бота и виртуальным окружением. Остается перенести все данные нашего бота. Для этого копируем ВСЕ необходимые файлы и вставляем их на сервер.
Поздравляю, мы на финишной прямой, остается запустить нашего бота на сервере и проверить его работоспособность.
Проверяем работу, если все в порядке, прописываем в терминале deactivate. Нам остается последний шаг. Настроить непрерывную работу нашего бота.
Шаг 5. Настройка беспрерывной работы нашего бота.
Пропишем следующую команду: nano /lib/systemd/system/НазваниеБота.service
Нажимаем CTRL+O → Enter → CTRL+X для сохранения. Эти настройки помогут запускать или перезапускать нашего бота.
Последний шаг: Снова запускаем нашего бота, но уже с беспрерывной работой.
ГОТОВО! Наш бот запущен и теперь работает 24/7, независимо от того, включен наш с вами компьютер или нет. Если что-то не работает, тщательно проверьте, правильно ли вы прописали путь к файлам. Если терминал выдает ошибку авторизации, попробуйте добавить перед командой «sudo» (Команда от имени администратора)
Питоном по телеграму! Пишем пять простых Telegram-ботов на Python
Содержание статьи
Python для новичков
Если ты совсем не ориентируешься в Python, то отличным началом будет прочтение трех вводных статей, которые я публиковал в «Хакере» этим летом, либо посещение курса «Python для новичков», который я начну вести для читателей «Хакера» уже совсем скоро — 30 ноября.
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — строку, которая будет однозначно идентифицировать нашего бота для серверов Telegram. Зайдем в Telegram под своим аккаунтом и откроем «отца всех ботов», BotFather.
Жмем кнопку «Запустить» (или отправим / start ), в ответ BotFather пришлет нам список доступных команд:
Когда мы наконец найдем свободный и красивый адрес для нашего бота, в ответ получим сообщение, в котором после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это и есть необходимый нам токен. Сохраним ее где‑нибудь на своем компьютере, чтобы потом использовать в скрипте бота.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.
Как создать чат-бота для Telegram с помощью Python
Это пошаговое руководство по созданию бота для Telegram. Бот будет показывать курсы валют, разницу между курсом раньше и сейчас, а также использовать современные встроенные клавиатуры.
Время переходить к делу и узнать наконец, как создавать ботов в Telegram.
Шаг №0: немного теории об API Telegram-ботов
Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?
Ответ очень простой: для чтения сообщений отправленных пользователями и для отправки сообщений назад используется API HTML. Это требует использования URL:
Токен выглядит приблизительно так:
Если значение ‘ok’ — true, значит запрос был успешным и результат отобразится в поле ‘field’. Если false — в поле ‘description’ будет сообщение об ошибке.
Следующий вопрос: как получать пользовательские сообщения?
Второй вариант — использовать webhooks. Метод setWebhook нужно будет применить только один раз. После этого Telegram будет отправлять все обновления на конкретный URL-адрес, как только они появятся. Единственное ограничение — необходим HTTPS, но можно использовать и сертификаты, заверенные самостоятельно.
Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:
Метод с Webhook лучше подойдет в таких случаях:
Еще один вопрос: как создать зарегистрировать бота?
@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).
Существует масса библиотек, которые облегчают процесс работы с API Telegram-бота. Вот некоторые из них:
По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.
В этом руководстве будет использоваться библиотека pyTelegramBotApi.
Шаг №1: реализовать запросы курсов валют
Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2019.1
requests==2.7.0
Начать стоит с написания Python-скрипта, который будет реализовывать логику конкретных запросов курсов валют. Использовать будем PrivatBank API. URL: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5.
Создадим файл pb.py со следующим кодом:
Были реализованы три метода:
Шаг №2: создать Telegram-бота с помощью @BotFather
Необходимо подключиться к боту @BotFather, чтобы получить список чат-команд в Telegram. Далее нужно набрать команду /newbot для инструкций выбора название и имени бота. После успешного создания бота вы получите следующее сообщение:
Теперь, когда настройка закончена, можно переходить к написанию кода. Прежде чем двигаться дальше, рекомендуется почитать об API и ознакомиться с документацией библиотеки, чтобы лучше понимать то, о чем пойдет речь дальше.
Шаг №3: настроить и запустить бота
Начнем с создания файла config.py для настройки:
В этом файле указаны: токен бота и часовой пояс, в котором тот будет работать (это понадобится в будущем для определения времени обновления сообщений. API Telegram не позволяет видеть временную зону пользователя, поэтому время обновления должно отображаться с подсказкой о часовом поясе).
Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:
Шаг №4: написать обработчик команды /start
Из переменной бота возможно вызывать любые методы API Telegram-бота.
Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :
Как можно видеть, pyTelegramBotApi использует декораторы Python для запуска обработчиков разных команд Telegram. Также можно перехватывать сообщения с помощью регулярных выражений, узнавать тип содержимого в них и лямбда-функции.
Это было просто, не так ли?
Шаг №5: создать обработчик команды /help
Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.
Код выше выглядит вот так:
Шаг №6: добавить обработчик команды /exchange
Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).
Вот как работает ответ /exchange:
Шаг №7: написать обработчик для кнопок встроенной клавиатуры
Давайте реализуем метод get_ex_callback :
Все довольно просто.
Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.
Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.
Вот как будет выглядеть бот после нажатия кнопки USD:
Шаг №8: реализовать обработчик кнопки обновления
Как это работает? Очень просто:
Метод get_ex_from_iq_data разбирает JSON из callback_data :
get_edited_signature генерирует текст “Updated…”:
Вот как выглядит сообщение после обновления, если курсы валют не изменились:
И вот так — если изменились:
Шаг №9: реализовать встроенный режим
Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).
Обработчик встроенных запросов реализован.
Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:
Попробуем набрать usd, и результат мгновенно отфильтруется:
Проверим предложенный результат:
Кнопка “Update” тоже работает:
Отличная работа! Вы реализовали встроенный режим!
Выводы
Поздравляем! Теперь вы знаете, как сделать бота для Telegram, добавить встроенную клавиатуру, обновление сообщений и встроенный режим. Можете похлопать себя по спине и поднять тост за нового бота.
Пишем чат-бот на Python + PostgreSQL и Telegram
Пошаговое руководство написания чат-бота на языке Python.
Установим Python и библиотеки;
Получим вопросы и ответы из БД PostgreSQL;
Подключим чат-бот к каналу Telegram.
Colaboratory от Google
Изучение Python можно начать используя сервис Colaboratory от Google, или просто Colab. Сервис позволяет писать и выполнять код Python в браузере, не требуя собственного сервера.
Пример кода. Вопросы и ответы для чат-бота подгрузим с https://drive.google.com из текстового файла
Запуск в Production
Наигравшись с кодом в Colaboratory и освоив Python развернем систему на боевом сервере Debian
Установим Python и PIP (установщик пакетов).
Так как Debian не самый новый, устанавливается версия 3.5
Установим необходимые пакеты Python
Пишем код в файле Chat_bot.py
Структура таблицы ответов chats_answer, формат SQL
Да, я готов об этом поговорить
Структура таблицы вопросов chats_question, формат SQL. Каждый вопрос связан с кодом ответа.
Лет то тебе сколько
Поговорим о возрасте
Трейлер фильма Матрица
Продолжаем код в файле Chat_bot.py
Векторизация и трансформация
Функция поиска ответа
Проверка из консоли
Запустим и проверим
Подключим Telegram
Откроем Telegram и обратимся к боту @BOTFATHER https://t.me/botfather
Все просто, зарегистрируем нового бота и получим token.
В целом все готово. Вопросы в базу данных добавляются автоматически от службы тех. поддержки. Остаётся маркетологу в админ панели на YII назначать ответы вопросам. Раз в сутки cron перезапускает скрипт чат-бота, новые фразы поступают в работу.
Весь код чат бота
В теле программы есть переменные k=5 и temperature=10.0. Их можно менять, что будет влиять на поиск, делая его более мягким или более жестким.