Создание простого чат-бота в VK на Python 3
Статья рассчитана для начинающих программистов. Метод работы программы очень прост и любой, кто умеет разбираться в синтаксисе Питона и немного знающий ООП сможет его реализовать для своих нужд. Но в принципе даже не зная никаких принципов ООП, думаю можно научиться добавлять простые функции или хотя бы в крайнем случае использовать готовые исходники из GitHub.
Что есть в этой статье?
Создание основы бота. После этого его можно будет запрограммировать как-угодно. Автоматизировать какую-то рутину или использовать как собеседник.
Улучшенная (слегка усложненная версия бота). Я решил сначала представить простой процедурный код бота, а затем слегка усложнить его, добавив функции, значительно улучшающие работу бота.
Добавление функции передачи погоды. Научим бота говорить нам погоду.
Создание бота в ВК
Начнем мы с создания бота, а именно группу в ВК.
Для это нужно зайти в «группы» → «создать сообщество».
Выберите любой тип сообщества и введите название, тематику группы.
На открывшейся странице настроек, выберите «Работа с API»
Далее, необходимо создать API-ключ.
Затем выберите нужные вам параметры с доступом для вашего API-ключа.
Скорее всего, вам придётся подтверждать действие в ВК с помощью мобильного телефона. Затем скопируйте полученный API-ключ где-нибудь в файл. Он нам еще понадобится.
Затем нужно разрешить сообщения. Для этого переходим в «сообщения» и включаем их.
Приступим к программной части бота
Мы не будем реализовывать его через запросы к ВК, а если быть точнее, просто используем библиотеку VkLongPool, которая сделает это за нас.
Для этого необходима библиотека vk_api. Установим его через pip:
python -m pip install vk_api
Но лично я работаю с виртуальным окружением Anaconda. С этим зачастую возникают проблемы при первой работе. Обычно проблема в том, что система не распознают команду «python». А решается эта проблема путем добавления его в PATH.
Приступим к самому коду:
Импортируем нужные модули:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
def write_msg(user_id, message): vk.method('messages.send', ) # API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) # Основной цикл for event in longpoll.listen(): # Если пришло новое сообщение if event.type == VkEventType.MESSAGE_NEW: # Если оно имеет метку для меня( то есть бота) if event.to_me: # Сообщение от пользователя request = event.text # Каменная логика ответа if request == "привет": write_msg(event.user_id, "Хай") elif request == "пока": write_msg(event.user_id, "Пока((") else: write_msg(event.user_id, "Не поняла вашего ответа. ")
Функция write_msg получает id пользователя ВК , которому оно отправит сообщение и собственно само сообщение .
def write_msg(user_id, message): vk.method('messages.send', )
Авторизовавшись как сообщество и настроив longpool:
# API-ключ созданный ранее token = "6a9c267cd469388709a9e9acaddbe0aa81a0abbf12239b3e597a31729ffbddb9c88e80a443554c918b8f7" # Авторизуемся как сообщество vk = vk_api.VkApi(token=token) # Работа с сообщениями longpoll = VkLongPoll(vk) Войдем в основной цикл: # Основной цикл for event in longpoll.listen():
В нем мы циклически будем проверять на наличие event-ов. А получить тип event-а сможем с помощью event.type.
После этого получив сообщение от пользователя сможем отправить ему соответствующее письмо с помощью уже созданной функции write_msg.
Итак, мы создали очень простого бота в ВК с такой же простой реализацией. А логику бота можно программировать как душе угодно.
Теперь приступим к более реальному программированию
Создадим класс VkBot в файле vk_bot.py, который будет служить нам ботом.
class VkBot: def __init__(self, user_id): print("Создан объект бота!") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["ПРИВЕТ", "ПОГОДА", "ВРЕМЯ", "ПОКА"]
И добавим туда метод с помощью которого можно получить имя пользователя через vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
Это делается с помощью beatifulsoup4.
Устанавливаем если его нет:
python -m pip install bs4
На него есть достаточное количество статей, которые стоит изучить. С помощью него же создадим еще несколько методов:
# Получение времени: def _get_time(self): request = requests.get("https://my-calend.ru/date-and-time-today") b = bs4.BeautifulSoup(request.text, "html.parser") return self._clean_all_tag_from_str(str(b.select(".page")[0].findAll("h2")[1])).split()[1] # Получение погоды def _get_weather(city: str = "санкт-петербург") -> list: request = requests.get("https://sinoptik.com.ru/погода-" + city) b = bs4.BeautifulSoup(request.text, "html.parser") p3 = b.select('.temperature .p3') weather1 = p3[0].getText() p4 = b.select('.temperature .p4') weather2 = p4[0].getText() p5 = b.select('.temperature .p5') weather3 = p5[0].getText() p6 = b.select('.temperature .p6') weather4 = p6[0].getText() result = '' result = result + ('Утром :' + weather1 + ' ' + weather2) + '\n' result = result + ('Днём :' + weather3 + ' ' + weather4) + '\n' temp = b.select('.rSide .description') weather = temp[0].getText() result = result + weather.strip() return result # Метод для очистки от ненужных тэгов @staticmethod def _clean_all_tag_from_str(string_line): """ Очистка строки stringLine от тэгов и их содержимых :param string_line: Очищаемая строка :return: очищенная строка """ result = "" not_skip = True for i in list(string_line): if not_skip: if i == "
Измените параметр _get_weather на нужный город, в последствии этот метод можно будет вызывать с указанием города, а по умолчанию будет ваше указанное значение.
С помощью этих методов мы сможем получить время и погоду. Эти методы вырезаны из моего основного проекта бота. Следует организовать их в отдельных пакетах и классах, применяя наследование. Но ради примера работы, я решил вместить все это в один класс бота, что конечно плохо.
Создадим основной метод new_message, который будет обрабатывать сообщение пользователя и возвращать ответ:
def new_message(self, message): # Привет if message.upper() == self._COMMANDS[0]: return f"Привет-привет, !" # Погода elif message.upper() == self._COMMANDS[1]: return self._get_weather() # Время elif message.upper() == self._COMMANDS[2]: return self._get_time() # Пока elif message.upper() == self._COMMANDS[3]: return f"Пока-пока, !" else: return "Не понимаю о чем вы. "
Теперь вернемся к запускаемому файлу:
Импортируем класс нашего бота:
from vk_bot import VkBot
Изменим основной наш цикл:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: ', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
То есть теперь мы будем передавать полученное сообщение объекту бота, который вернет нам нужный ответ.
Это усложнение программы просто необходимо, если вы хотите дальше улучшить функционал бота:
Создайте отдельные пакеты и классы для каждой функции _get_time и _get_weather. Организуйте наследование с общего класса. И каждую новую функцию определяйте в отдельных классах, лучше всего, конечно, еще и разделить на пакеты.
Добавьте словарь с ключом идентификатора пользователя и значением объекта бота. Таким образом, не придется каждый раз в цикле создавать объект бота. К тому же, это обеспечит пользование несколькими пользователями сразу в сложных конструкциях.
Таким образом, выбрав хорошую архитектуру кода, вы сможете создать многофункционального бота.
К примеру, я научил своего бота проигрывать музыку на компьютере, открывать сайты сидя с телефона. Присылать рецепты блюд на завтрак, обед, ужин.
Вы же можете редактировать бота под себя.
Буду рад вашим идеям. По любым вопросам пишите.
Как создать бота ВКонтакте: гайд для старта на платформе
Привет! Меня зовут Семён, я деврел платформы ботов ВКонтакте. Расскажу о том, как с ней работать, какие есть возможности и перспективы для разработчиков. В этой статье вы найдёте краткий пошаговый мануал: от поиска идеи для вашего чат-бота до проектирования его бизнес-возможностей. К каждому этапу будут ссылки на полезные материалы и источники, где можно узнать больше и погрузиться в технологию.
Статья будет дополняться по мере развития платформы — свежими ссылками на документацию, обзорами и интересными кейсами.
Начинаем с идеи
Первый шаг при создании бота — продумать идею и сценарии использования. Для этого полезно уже на старте знать, что умеет платформа. Вариантов масса:
- автоматизация вашей службы поддержки;
- помощь в работе бизнеса (оформление заказов и доставки в вашем магазине, общение с клиентами);
- внедрение социальных механик (знакомства, поиск единомышленников, опросы);
- рекламные проекты или, например, текстовые квесты.
Чем больше нюансов вы учтёте до того, как погрузитесь в написание бота, тем проще будет в реализации. Здесь нет исключений и неважных мелочей: подумайте над целями, потенциальной аудиторией, продвижением, разными сценариями — всё это упростит и ускорит работу в дальнейшем.
Готовим сообщество для бота
Сообщество — это точка входа для пользователей, которые будут общаться с вашим ботом. Если у вас уже есть такая страница, проверьте, включены ли сообщения («Управление сообществом» → «Сообщения»). Так пользователи смогут писать боту, когда он будет готов.
Если сообщества ещё нет, его нужно создать.
- Как открыть сообщество ВКонтакте — подробная инструкция по всем шагам запуска и возможностям сообществ.
Выбираем сценарий для получения обновлений
Чтобы реагировать на какие-либо события, ваш скрипт бота должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll.
Как начать использовать Callback API
Подключите свой сервер в настройках сообщества («Управление сообществом» → «Настройки» → «Работа с API»). А затем выберите типы событий, данные о которых требуется получать: например, новые комментарии и фотографии.
- Документация Callback API — подробно о подключении, удалении сервера, настройках через API, типах событий, поддержке в SDK + пример использования.
Long Poll API
Этот подход позволяет работать с событиями из вашего сообщества в режиме реального времени. В отличие от Callback API, очередь из событий хранится на стороне ВКонтакте — мы не будем присылать отдельное уведомление для каждого события. Чтобы использовать Bots Long Poll API, откройте раздел «Управление сообществом», на вкладке «Работа с API» перейдите к «Long Poll API» и выберите «Включён».
- Документация Long Poll API — инструкция по подключению, настройке через API, информация о формате данных и ошибках, а также поддержке в SDK.
Изучаем стартовую документацию и правила платформы
- Техническая документация платформы — основной инструмент для разработки чат-бота;
- Правила платформы — обязательные требования к функциональности и сценарию бота;
- Знакомство с API ВКонтакте — если вы ещё не работали с нашим сервисом API, узнайте, с чего начать;
- ВКонтакте API — сообщество с актуальной информацией об обновлениях и дополнениях API.
Получаем ключ доступа
Ключ доступа потребуется для получения обновлений в Long Poll, а также для работы с API. Вы можете сгенерировать несколько ключей с разными правами доступа. Важно помнить, что ключи нельзя размещать публично. Для получения ключа требуется лишь открыть раздел «Управление сообществом» (или «Управление страницей», если у вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».
Получить ключ доступа можно, используя Authorization Code Flow — двухэтапный вариант с дополнительной аутентификацией вашего сервера.
- Документация Authorization Code Flow — всё о запросе списка администрируемых сообществ, открытии диалога авторизации, правах доступа, получении code и access_token.
Если вы хотите, чтобы пользователи могли добавлять бота в беседу, требуется выдать необходимые права. Перейдите в «Управление сообществом» → «Сообщения» → «Настройки для бота» и поставьте галочку в пункте «Разрешать добавлять сообщество в беседы». После этого в сообществе появится кнопка «Пригласить в беседу», открывающая модальное окно со списком чатов.
Сейчас боты поддерживают три уровня доступа: только упоминание, доступ ко всей переписке и доступ уровня администратора. Подробнее о различиях в доступах можно узнать в документации о добавлении ботов в беседы.
Переходим к возможностям
Чат-бот общается с пользователями с помощью сообщений сообщества. Для их отправки применяется метод messages.send. Вы можете использовать любые вложения: фотографии, аудиозаписи или видео, документы, голосовые, ссылки. Сообщения отправляются с помощью запросов к API ВКонтакте.
- Сообщения от бота. API для чат-ботов, часть 2 — подробная инструкция по работе с сообщениями бота, вложениями, пользовательским контентом и другими возможностями.
Следующий шаг — подключение клавиатуры. Чтобы запустить её в сообществе, перейдите в «Управление сообществом» → «Сообщения» → «Настройки для бота» и включите «Возможности ботов». Там же можно добавить кнопку «Начать».
- Клавиатуры для ботов.API для чат-ботов, часть 3 — мануал по всем нюансам настройки и отображения клавиатур.
Боты могут отправлять специальные сообщения, используя шаблоны. Такие сообщения отличаются от обычных и внешним видом, и функциональностью. Сейчас поддерживается один шаблон — карусель. В нём несколько элементов, которые можно скроллить горизонтально.
- Карусели. API для чат-ботов, часть 4— всё об этом шаблоне сообщений, их отправке, структуре элементов и обратной совместимости.
Выбираем функции для бизнеса
- Чат-бот ВКонтакте: какую пользу он принесёт бизнесу — подробно о том, как использовать чат-ботов для повышения продаж.
Рекламный API позволяет с помощью бота отправлять пользователям промосообщения. Их важно помечать визуально и в программном интерфейсе. Чтобы получить доступ к рекламному API, бот должен соответствовать критериям платформы и пройти модерацию ВКонтакте.
- Правила монетизации ботов — о способах заработка с чат-ботами (платной подписке, предложении получать рекламную рассылку), а также критериях модерации для доступа к рекламному API.
- Заявка на модерации бота— форма.
После успешной модерации бот сможет отправлять своим собеседникам рекламные сообщения. В диалоге с таким ботом пользователь увидит предупреждение об этом.
Если вы не разработчик, но хотите обзавестись чат-ботом для своего бизнеса или любого другого проекта — это тоже возможно. Например, пригодятся сервисы-конструкторы: они помогают создать бота под ваши задачи и предлагают простой, удобный интерфейс для работы. А если функциональности конструктора будет недостаточно, всегда есть услуги аутсорс-разработчиков. Проверенные команды специалистов и конструкторы ботов можно найти на платформе «Бизнес ВКонтакте» — в разделе «Эксперты и сервисы».
- Блог компании VK
- ВКонтакте API
- Социальные сети и сообщества
Как сделать бота в ВК для группы самостоятельно
Создание ботов Вконтакте, как и в других соцсетях или мессенджерах, вписывается в бизнес-тренды последних лет. С появлением поддержки соответствующих технологий на социальных платформах чат-боты начали приобретать серьёзную популярность. Чат-боты заменяют целые колл-центры. Они подходят для выполнения рутинных операций, на которые живые специалисты могут не тратить время. В частности, эти электронные помощники могут определить тему звонка или сообщения, направив пользователя к ответственному специалисту. Чат-бот способен собирать контактные данные, принимать заказы и даже консультировать тех, кто обращается в поддержку. Он может легко справиться со спамерами и мошенниками — у него просто не будет подходящих шаблонов ответа или он сам вымотает злоумышленника.
Оптимизируйте маркетинг и увеличивайте продажи вместе с Calltouch
Уверены, многие не знали, что там можно даже создать свой интернет-магазин на странице и автоматически обрабатывать лиды из рекламной кампании. Пройдите тест и узнайте, все ли возможности ВКонтакте вы используете – эта площадка действительно хороша для бизнеса.
- Персональные помощники . Эти алгоритмы заменяют собой, с одной стороны, операторов, которые осуществляют приём обращений и консультации, а с другой стороны — рутинные действия самого клиента. Бот-помощник отлично справляется с заказом еды, бронированием рейсов на самолёт и гостиниц.
- Виджеты . В рабочих процессах специфические чат-боты помогают наладить организацию и автоматизировать многие операции. Например, некоторые компании создают обучающие курсы для своих сотрудников на основе чат-ботов. С их помощью можно настраивать рабочие рассылки, расписания и оповещения.
Всё чаще предпринимаются попытки внедрить в функционал чат-ботов искусственный интеллект. В данный момент подавляющее большинство программ-помощников работает за счёт большой семантической базы, прописанной вручную. На каждый типовой вопрос или обращение заготовлен блок типовых ответов в конечном виде. В лучшем случае они компонуются из нескольких слов по определённому алгоритму.
К решению задачи создания действительно интеллектуальных ботов подходят крупные компании со своими голосовыми помощниками: Amazon, Google, Яндекс. Те имеют доступ к базовому словарю и определяют смысловые параметры обращения на основе методов машинного обучения и нейронных сетей. Затем рациональный ответ формируется при помощи примеров из обширной обучающей выборки. Последняя может состоять из многих миллиардов поисковых запросов, текстов книг и других связных текстов.
К сожалению, подобные технологии едва доступны средним разработчикам и, тем более, любителям. По крайней мере, из-за отсутствия достаточно обширной обучающей выборки в свободном доступе. Но это далеко не единственная причина. В целом, среднестатистическому разработчику или предпринимателю, который думает, как создать бота Вк, придётся вручную конструировать логику и семантическую базу своего бота.
При подготовке материала использовались источники:
https://habr.com/ru/articles/427691/
https://habr.com/ru/companies/vk/articles/570486/