Пишем чат-бот на 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. Их можно менять, что будет влиять на поиск, делая его более мягким или более жестким.
Telegram-бот на Python за полчаса с aiogram
Напишем простой диалоговый Telegram-бот на Python, который в дальнейшем можно дополнить различными функциями, и задеплоим его.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка
Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:
Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.
Установка Python
Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6. Как обновиться, можете почитать здесь.
Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.
Установка pip
Установка aiogram
Установить данный фреймворк для Telegram Bot API с помощью pip:
Hello, bot!
Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:
Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help :
Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:
Запускаем Telegram бота, написанного на Python, следующим образом:
Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.
Ну вот и всё, простенький бот в Телеграмме на языке Python готов.
Docker
Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:
Каталог проекта должны при этом содержать следующие файлы:
Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:
my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.
-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.
Деплой на AWS
Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:
Загружаем его на докерхаб:
Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:
Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.
Проверяем работу нашего Telegram bot:
Заключение
Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.
Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в телеграмме есть аж целых два типа клавиатур:
Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.
В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.
Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.
Питоном по телеграму! Пишем пять простых Telegram-ботов на Python
Содержание статьи
Python для новичков
Если ты совсем не ориентируешься в Python, то отличным началом будет прочтение трех вводных статей, которые я публиковал в «Хакере» этим летом, либо посещение курса «Python для новичков», который я начну вести для читателей «Хакера» уже совсем скоро — 30 ноября.
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — строку, которая будет однозначно идентифицировать нашего бота для серверов Telegram. Зайдем в Telegram под своим аккаунтом и откроем «отца всех ботов», BotFather.
Жмем кнопку «Запустить» (или отправим / start ), в ответ BotFather пришлет нам список доступных команд:
Когда мы наконец найдем свободный и красивый адрес для нашего бота, в ответ получим сообщение, в котором после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это и есть необходимый нам токен. Сохраним ее где‑нибудь на своем компьютере, чтобы потом использовать в скрипте бота.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.
Делаем простого бота в Telegram на Python. Интеграция с Excel
«История ничему не учит, а только наказывает за незнание уроков.»
(с) В.О. Ключевский
Друг предложил мне поработать над проектом для нашей кафедры. ТЗ пока не сформулировано, но точно известно, что это будет бот в телеге. Я хоть и питонист, но с ботами дел никогда не имел, поэтому пишу эту статью, как заметку, для себя и молодых перспективных ребят, чтоб у них было от чего оттолкнуться. Постараюсь писать максимально понятным и простым языком. Профессионалам тут особо делать не чего, хотя, может и придёт какая-нибудь идея.
Краткое описание бота
Наш бот будет создан на тематику Белого движения в гражданской войне в России (1917-1922) /сегодня разговор не о политике. Это просто пример/
По команде /start бот будет приветствие и посылать стикер;
После приветствия появится клавиатура под строкой набора сообщений с двумя кнопками «Вывести случайную цитату белогвардейца» и «Литература»
Нажатие на кнопку «Литература» выдаст инлайновую клавиатуру (далее будет прояснение, для тех кто не понял что это) с названиями произведений белогвардейских авторов или о белогвардейцах.После нажатия клавиатура пропадёт (просто этим навыком, думаю, необходимо обладать), начнётся загрузка pdf файла и появится оповещение «Приятного чтения!»
Вот такой простенький бот у нас по выйдет.
Начало. Создание бота и добавление библиотек.
Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.
Время импортировать все необходимые библиотеки.
Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:
Найти в поиске телеграма @BotFather
Написать ему команду /newbot
Первым сообщение отправить имя бота, а вторым его юзернейм (который пишется с @). Он должен быть уникальный и оканчиваться на Bot или _bot
После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.
Нужно скопировать всю строку, которая на скрине закрыта красным прямоугольником
Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
(Более подробная инфа тут API)
Кодим
Раз библиотеки уже добавили, значит создаём переменную, определяющую бота с помощью API.
В начале, при написании команды /start, бот у нас выдаст приветствие. Соответственно, вставляем декоратор обработчика сообщений.
Если кто не знает что такое декораторы, то есть достаточно подробная статья, рекомендую ознакомиться.
Коротко: Декораторы — это, по сути, просто своеобразные «обёртки», которые дают нам возможность делать что-либо до и после того, что сделает декорируемая функция, не изменяя её.
Теперь наш бот понимает команду /start, но ещё ничего не делает. Создаём функцию приветственного сообщения.
Пробежимся по коду
Последней строкой отправляем стикер bot.send_sticker(message.chat.id,stic)
Приветственное сообщение и клавиатура
Время дать возможность боту коммуницировать
Далее идёт строка с текстом. ВАЖНО текст должен совпадать с названием кнопки клавиатуры, которую указывали выше.
Со спокойной душой вызываем на файл на чтение
rb = xlrd.open_workbook(‘citat/citat.xls’, formatting_info=True), указываем лист с которого считываем инфу sheet = rb.sheet_by_index(0) индексы как у массива (первый элемент нулевой).
Вышло как-то так
Для литературы будем использовать инлайновую клавиатуру.
Определяем клавиатуру inMurkup = types.InlineKeyboardMarkup(row_width=1) параметр row_width=1 говорит о том, что на одной строке будет одна кнопка. Принцип кнопок создания такой же как и у обычной клавиатуры, но появляется параметр callback_data значения которого примет бот после нажатия на кнопку и поймёт что нужно сделать (далле это всё опишем).
Последней строкой отправляем сообщение и цепляем к нему инлайновую клавиатуру.
Работа с callback_data
мы создаём переменную doc в которую «суём» pdf файл, который сохранили в папку «boo» заранее.
Теперь строкой bot.send_document(call.message.chat.id, doc) отправляем файл в чат.
После леса из наших elif удалим инлайновую клавиатуру, дабы не мешалась. Действие необязательно, но мы же с вами тренируемся, поэтому пусть код будет здесь.
Уведомление призывается заклинанием
Параметр show_alert отвечает за вид оповещения (False — простое временное уведомление, True — уведомление с кнопкой «Ок»)
1 — False, 2 — True
Завершаем эту ступень кода конструкцией проверки исключений (ошибок).
Именно этой командой и закончим наш код. Теперь бот постоянно проверяет не написал ли ему кто.
В итоге получился такой код:
Пара слов от автора
Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.
Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.
Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)
Приглашаю прочесть мои статьи:
Автор обитает тут: ВК, Инстаграм
Создание 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» (Команда от имени администратора)