Хотели бы вы создать своего собственного чат-бота в Telegram? В этом вам поможет наше руководство!
Для начала нам нужно установить необходимое ПО. Вам потребуется Python 3 и библиотека python-telegram-bot. Не волнуйтесь, установка проста. Найдите подробную инструкцию в интернете.
Далее создадим нового бота в Telegram, воспользовавшись Telegram BotFather. Это займет всего несколько простых шагов. В конце вы получите уникальный токен, который понадобится далее.
⌨️ Пришло время основного этапа — программирования! Откройте любой текстовый редактор и начните писать код. Для начала импортируйте библиотеку Telegram и создайте экземпляр бота с использованием вашего токена.
Теперь мы создадим первую функцию для нашего бота. Когда пользователь отправит сообщение боту, мы хотим, чтобы он получил ответ с приветствием! Для этого используйте метод bot.sendMessage.
Вы только что создали своего первого чат-бота в Telegram! Проверьте его работу в личном кабинете. Но не останавливайтесь на достигнутом — это только начало! В следующей статье мы узнаем больше об Telegram Bot API.
Телеграм бот на Python / #1 – Разработка ботов с нуля. Как создать Telegram Bot?
2. Понимание Telegram Bot API
Добро пожаловать в мир чат-ботов Telegram! В этом уроке мы погрузимся в Telegram Bot API.
Telegram предоставляет API, который позволяет разработчикам создавать свои собственные чат-боты. API — это набор рекомендаций, которые рассказывают, как взаимодействовать с сервером Telegram для отправки и получения сообщений.
Чтобы начать создание чат-бота, необходимо создать учетную запись Telegram и получить ключ API. Ключ API уникален для каждого бота и необходим для доступа к API.
После создания бота и получения ключа API, можно начать создание своего чат-бота на Python.
Bot API предоставляет набор методов для отправки и получения сообщений. Например, можно использовать метод ‘sendMessage’ для отправки сообщения пользователю или метод ‘getUpdates’ для получения сообщений с сервера Telegram.
API также обеспечивает интерактивность чат-ботов с помощью встроенных кнопок клавиатуры, запросов обратного вызова и редактирования сообщений. Эти функции позволяют сделать пользовательский интерфейс более привлекательным.
Кроме этого, Bot API предоставляет возможность использовать фильтры и обработчики, чтобы обрабатывать входящие сообщения. Фильтры позволяют боту определить, на какие сообщения он должен отвечать, на основе таких атрибутов, как текст или идентификатор пользователя. Обработчики позволяют боту выполнять код в ответ на определенные типы сообщений.
Для использования Telegram Bot API с Python можно использовать библиотеку ‘python-telegram-bot’. Она обеспечивает простой интерфейс для доступа к Bot API, а также реализацию обработки сообщений и фильтров.
Понимание Telegram Bot API является ключевым для создания успешных и интерактивных чат-ботов. Продолжайте изучение и обучение, и вы возможно создадите потрясающий чат-бот!
3. Добавление интерактивности с помощью Python
Приветствую тебя на третьем уроке! Мы уже научились создавать базового чат-бота в Telegram и разобрались с Telegram Bot API. Теперь пришло время добавить немного интерактивности, используя язык программирования Python!
Уроки Python / Делаем чат бот Telegram (часть 1)
Перейдем к тому, что мы понимаем под словом «интерактивность». В контексте чат-бота это означает, что нам нужно сделать его более привлекательным и динамичным, позволяя пользователям вводить информацию и получать ответы.
Одним из способов сделать это является создание «команд». Команды — это ключевые слова, начинающиеся с «/». Пользователь может ввести команду в окно чата, чтобы получить определенный ответ от бота. Например, если мы создадим команду «/joke», то бот ответит забавной шуткой.
Для этого мы будем использовать Python. С помощью него мы можем создавать обработчики команд, которые будут прослушивать команды и инициировать ответ. Например, мы можем написать функцию, которая будет вызываться при вводе пользователем команды «/joke», и получать шутку через API, чтобы отправить ее пользователю.
Но дело не только в командах! Python также позволяет создавать интерактивные меню и кнопки. Мы можем использовать формат разметки Telegram, чтобы создать пользовательскую клавиатуру, которая будет появляться при вводе определенной команды. На клавиатуре могут быть параметры, которые пользователь может выбрать, чтобы отправить ответ обратно боту.
В целом, добавление интерактивности с помощью Python — отличный способ сделать нашего чат-бота более привлекательным и динамичным. Используя команды и различные форматы ответов, мы можем создать диалог, который заставит пользователей возвращаться снова и снова!
4. Расширенная обработка сообщений и фильтры
Введение
На прошлых уроках мы создали базового чат-бота для Telegram, используя Python, который мог автоматически отвечать на сообщения пользователей. Однако, по мере того, как мы разрабатываем более сложные чат-боты, нам нужна более эффективная обработка и фильтрация сообщений, с помощью расширенной обработки и фильтров.
Обработка нескольких сообщений
Иногда пользователи отправляют несколько сообщений подряд, перед тем, как мы успеваем ответить, но нам нужно обработать только последнее сообщение. Для этого мы используем декоратор message_handler из библиотеки telebot, который автоматически обрабатывает новые входящие сообщения. С помощью него мы можем проигнорировать старые сообщения и обрабатывать только последнее сообщение от пользователя.
Фильтрация сообщений
Пишем чат-бот на Python + PostgreSQL и Telegram
Пошаговое руководство написания чат-бота на языке Python.
- Установим Python и библиотеки;
- Получим вопросы и ответы из БД PostgreSQL;
- Подключим морфологию;
- Подключим чат-бот к каналу Telegram.
Colaboratory от Google
Изучение Python можно начать используя сервис Colaboratory от Google, или просто Colab. Сервис позволяет писать и выполнять код Python в браузере, не требуя собственного сервера.
Пример кода. Вопросы и ответы для чат-бота подгрузим с https://drive.google.com из текстового файла
# Однократно после запуска виртуальной машины устанавливаем библиотеки pymorphy2 и numpy !pip install pymorphy2 numpy # —————————- # подключим библиотеки import csv import pymorphy2 import re morph = pymorphy2.MorphAnalyzer(lang=’ru’) # Массив вопросов questions=[] # Массив ответов answer=[] # Подключаем файл с Google диска, содержащий вопросы/ответы # Есть ли жизнь на марсе;Есть with open(«/content/drive/MyDrive/robo-bot/question.txt», «r») as f_obj: reader = csv.reader(f_obj) for row in reader: r=s.split(‘;’) questions.append(r[0]) answer.append(r[1]) # выведем список вопросов и ответов print (questions) print (answer)
Запуск в Production
Наигравшись с кодом в Colaboratory и освоив Python развернем систему на боевом сервере Debian
Установим Python и PIP (установщик пакетов).
Так как Debian не самый новый, устанавливается версия 3.5
aptitude install python3 python3-pip # обновим пакеты если они были установлены ранее pip3 install —upgrade setuptools pip
Установим необходимые пакеты Python
# Из за устаревшей версии Debian установить psycopg2 не удалось, поставлен скомпилированный psycopg2-binary # Библиотека psycopg2 нужна для подключения к базе данных PostgreSQL # pip3 install psycopg2 pip3 install psycopg2-binary scikit-learn numpy pymorphy2
Пишем код в файле Chat_bot.py
# Импортируем библиотеки import pymorphy2 import re import psycopg2 import sklearn import numpy as np # Подключаемся к PostgreSQL conn = psycopg2.connect(dbname=’energy’, user=’mao’, password=’darin’, host=’localhost’) cursor = conn.cursor() # Настраиваем язык для библиотеки морфологии morph = pymorphy2.MorphAnalyzer(lang=’ru’) # объявляем массив кодов ответов и ответов answer_id=[] answer = dict() # получаем из PostgreSQL список ответов и проиндексируем их. # Работая с PostgreSQL обращаемся к схеме app, в которой находятся таблицы с данными cursor.execute(‘SELECT id, answer FROM app.chats_answer;’) records = cursor.fetchall() for row in records: answer[row[0]]=row[1]
Структура таблицы ответов chats_answer, формат SQL
CREATE TABLE app.chats_answer ( id SERIAL, answer VARCHAR(512), CONSTRAINT chats_answer_pkey PRIMARY KEY(id) ) WITH (oids = false); ALTER TABLE app.chats_answer OWNER TO mao;
Да, я готов об этом поговорить
Я тоже хочу спать
Продолжаем код в файле Chat_bot.py
# объявляем массив вопросов questions=[] # загрузим вопросы и коды ответов cursor.execute(‘SELECT question, answer_id FROM app.chats_question;’) records = cursor.fetchall() # посчитаем количество вопросов transform=0 for row in records: # Если текст вопроса не пустой if row[0]>»»: # Если в БД есть код ответа на вопрос if row[1]>0: phrases=row[0] # разбираем вопрос на слова words=phrases.split(‘ ‘) phrase=»» for word in words: # каждое слово из вопроса приводим в нормальную словоформу word = morph.parse(word)[0].normal_form # составляем фразу из нормализованных слов phrase = phrase + word + » » # Если длинна полученной фразы больше 0 добавляем ей в массив вопросов и массив кодов ответов if (len(phrase)>0): questions.append(phrase.strip()) answer_id.append(row[1]) transform=transform+1 # выведем на экран вопросы, ответы и коды ответов print (questions) print (answer) print (answer_id) # Закроем подключение к PostgreSQL cursor.close() conn.close()
Векторизация и трансформация
# Векторизируем вопросы в огромную матрицу # Перемножив фразы на слова из которых они состоят получим числовые значения from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import TruncatedSVD vectorizer_q = TfidfVectorizer() vectorizer_q.fit(questions) matrix_big_q = vectorizer_q.transform(questions) print («Размер матрицы: «) print (matrix_big_q.shape) # Трансформируем матрицу вопросов в меньший размер для уменьшения объема данных # Трансформировать будем в 200 мерное пространство, если вопросов больше 200 # Размерность подбирается индивидуально в зависимости от базы вопросов, которая может содержать 1 млн. или 1к вопросов и 1 # Без трансформации большая матрицу будет приводить к потерям памяти и снижению производительности if transform>200: transform=200 svd_q = TruncatedSVD(n_components=transform) svd_q.fit(matrix_big_q) # получим трансформированную матрицу matrix_small_q = svd_q.transform(matrix_big_q) print («Коэффициент уменьшения матрицы: «) print ( svd_q.explained_variance_ratio_.sum())
Функция поиска ответа
# Тело программы поиска ответов from sklearn.neighbors import BallTree from sklearn.base import BaseEstimator def softmax(x): #создание вероятностного распределения proba = np.exp(-x) return proba / sum(proba) class NeighborSampler(BaseEstimator): def __init__(self, k=5, temperature=10.0): self.k=k self.temperature = temperature def fit(self, X, y): self.tree_ = BallTree(X) self.y_ = np.array(y) def predict(self, X, random_state=None): distances, indices = self.tree_.query(X, return_distance=True, k=self.k) result = [] for distance, index in zip(distances, indices): result.append(np.random.choice(index, p=softmax(distance * self.temperature))) return self.y_[result] from sklearn.pipeline import make_pipeline ns_q = NeighborSampler() # answer_id — код ответа в массиве, который получается при поиске ближайшего ответа ns_q.fit(matrix_small_q, answer_id) pipe_q = make_pipeline(vectorizer_q, svd_q, ns_q)
Проверка из консоли
# код для проверки работы из консоли print(«Пишите ваш вопрос, слова exit или выход для выхода») request=»» while request not in [‘exit’, ‘выход’]: # получим текст от ввода request=input() # разберем фразу на слова words= re.split(‘W’,request) phrase=»» for word in words: word = morph.parse(word)[0].normal_form # морфируем слово вопроса в нормальную словоформу # Нормализуем словоформу каждого слова и соберем обратно фразу phrase = phrase + word + » » # запустим функцию и получим код ответа reply_id = int(pipe_q.predict([phrase.strip()])) # выведем текст ответа print (answer[reply_id])
Запустим и проверим
python3 Chat_bot.py
Подключим Telegram
# установим не самую последнюю версию для валидности дальнейшего кода #pip3 install PyTelegramBotAPI pip3 install PyTelegramBotAPI==3.6.7
Все просто, зарегистрируем нового бота и получим token.
В целом все готово. Вопросы в базу данных добавляются автоматически от службы тех. поддержки. Остаётся маркетологу в админ панели на YII назначать ответы вопросам. Раз в сутки cron перезапускает скрипт чат-бота, новые фразы поступают в работу.
Весь код чат бота
В теле программы есть переменные k=5 и temperature=10.0. Их можно менять, что будет влиять на поиск, делая его более мягким или более жестким.
P.S. Умышленно привожу весь код для практики. Теорию машинного обучения с картинками можно почитать, например, в другой статье.
Источник: temofeev.ru
Пишем Telegram Bot на Python
Python – язык программирования высокого уровня, который появился сравнительно недавно. Однако его простота и легкий синтаксис уже сделали язык лидером в программировании. Многие предпочитают Python для создания Telegram Bot.
Что требуется для создания бота
- Среда программирования Python.
- Если у вас установлена версия до 3.4, то следует скачать Gid и Pip. Первое – система управления версиями, второе – система управления пакетами Python. Pip позволяет устанавливать пакеты из командной строки.
- Регистрация на GitHub.com
- Регистрация на сервере Heroku.com.
Последние два позволят развернуть бот в сети.
Создаем бота
В результате вы получите токен – символьно-числовую последовательность, уникальную для каждого бота Telegram. Именно с помощью этого идентификатора отправляются запросы на сайт https://api.telegram.org.
Каждый запрос имеет вид:
Методы описаны в документации к Telegram Bot API и являются стандартными. Задача программиста при написании бота заключается в создании кода, который получает сообщения от пользователя и отправляет команду боту на выполнение действий. Запрос может выглядеть следующим образом:
Это пример отправки сообщения для клиента Telegram. Обязательно необходимо знать параметр id_chat – это идентификатор чата. Узнать его можно из ответа, который присылает сервер, который имеет вид JSON-строки:
По сути программа отправляет запросы, считывает ответы и выполняет парсинг полученной строки. В зависимости от сообщений пользователя выполняются те или иные действия.
Пишем бота для Telegram на Python
Сначала создадим программный код. Необходимо установить Python и среду разработки.
- Скачайте Python с официального сайта https://www.python.org/downloads/
- Установите, обязательно указав «Add Python to Path».
- Проверьте установку, открыв командную строку и набрав pip. Должен появится справочный материал по pip.
Откройте среду программирования IDLE. Это делается через пуск, в главном меню ищите раздел с установленным Python и выбирайте нужную команду. Отроется окно. Создайте в нем новый файл и вставьте программный код бота Telegram на Python.
import requests
import datetime
#Установка адреса бота
url = https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/
#Поиск последнего сообщения из массива чата с пользователем Telegram.
def lastUpdate(dataEnd):
res = dataEnd[‘result’]
totalUpdates = len(res) — 1
return res[totalUpdates]
#Получение идентификатора чата Telegram
def getChatID(update):
chatID = update[‘message’][‘chat’][‘id’]
return chatID
#отправка запроса sendMessage боту
def sendResp(chat, value):
settings =
resp = requests.post(url + ‘sendMessage’, data=settings)
return resp
#Get-запрос на обновление информации к боту. Результат – строка json. Метод .json позволяет развернуть ее в массив
def getUpdatesJson(request):
settings =
response = requests.get(request + ‘getUpdates’, data=settings)
return response.json()
#Главная функция
def main():
chatID = getChatID(lastUpdate(getUpdatesJson(url)))
sendResp(chatID, ‘Ваше сообщение’)
updateID = lastUpdate(getUpdatesJson(url))[‘update_id’]
#Бесконечный цикл, который отправляет запросы боту на получение обновлений
while True:
#Если обновление есть, отправляем сообщение
if updateID == lastUpdate(getUpdatesJson(url))[‘update_id’]:
sendResp(getChatID(lastUpdate(getUpdatesJson(url))), ‘проба’)
updateID += 1
sleep(1)
#Запуск главной функции
if __name__ == ‘__main__’:
main()
Python чувствителен к пробелам и табуляции, поэтому выполните Format-Untabify Region.
Запустите здесь же в среде разработки. В созданном боте Telegram должно появиться сообщение «Ваше сообщение Проба».
Разворачиваем проект на сервере
Самое сложное – заставить наш проект для Telegram работать на сервере. Мы воспользуемся бесплатным сервисом Heroku.
- Устанавливаем окружение, набирая pip install pipenv – ее надо набрать в командной строке.
- Регистрируемся на Heroku.com
- Устанавливаем интерфейс командной строки Heroku (CLI)
https://devcenter.heroku.com/articles/getting-started-with-python#set-up - В командной строке набираем Heroku и Enter
- Вводим адрес электронной почты, с которым регистрировались на сервере, и пароль, придуманный при регистрации
- Создаем папку. Ее лучше создать в папке с Python. Для примера создадим папку run
- Набираем virtualenv run , чтобы инициализировать в ней virtualenv.
- Регистрируемся на github.com и создаем свой репозиторий
- Переходим в папку run с помощью cd run
- Клонируем репозиторий git командой git clone https:/github.com/ВАШЕ_ИМЯ/ВАШ РЕПОЗИТОРИЙ . ВАШЕ_ИМЯ – имя пользователя на github
- Скопируйте скрипт в папку созданного репозитория (она появится в run)
- Зайдите в папку run/scripts , чтобы запустить файл activate.bat. Если он сработал успешно, то перед адресом в командной строке будет стоять название вашей папки. Например,
- Перейдем в папку run , затем в папку репозитория с помощью команды cd
- Установим модуль requests. Наберем pip install requests
- Чтобы создать зависимость введите pip freeze > requirements.txt
- В папке run создайте файл Procfile или Procfile.windows (для Windows) и сохраните в нем строку web: python bot.py, где bot.py – имя вашего файла с программой для бота
- В папке репозитория создайте файл __init__.py. Он будет пустым
Далее последовательно набирайте в командной строке
Вы увидите сообщение об инициализации пустого репозитория.
Внимание, после add пробел и точка! Добавляет файлы в локальный депозиторий.
Выполнение команды занимает некоторое время, необходимо подождать.
git commit -m ‘short message that describe changes to commit’
Фиксирует изменения в репозитории.
git push -u https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ
Позволит развернуть проект на github.
Затем выполните команды:
heroku create имя проекта
В результате вы получите адрес вашего проекта, например, runbot.herokuapp.com.
git push heroku master
Ждем окончания процесса компиляции проекта.
heroku ps:scale web=1
heroku open
Последняя команда откроет ваше приложение на сервере. Бот на Питоне для Телеграмма начнет свою работу.
На сайте с документацией можно посмотреть другие Telegram Bot примеры на Python.
Источник: telegramzy.ru