Чат-боты здорово экономят время: можно не заходить в соцсети каждые пять минут, а просто проверять диалоги раз в день и оформлять заказы. Рассказываю, как создать чат-бота во ВКонтакте, даже если не разбираетесь в коде.
Есть специальные сервисы для создания ботов: Robochat, BotVK, Chatgun и другие. Буду показывать процесс создания бесплатного чат-бота во ВКонтакте на примере Chatgun — интерфейс всех сервисов примерно одинаков, поэтому вы легко сделаете то же самое на другой платформе.
Предварительные приготовления для телеграм-бота
1.1 Получение токена от BotFather в телеграмме
Первым делом, нам нужно «зарегистрировать» нашего бота в Telegram.
Для этого, в поисковике телеги ищем BotFather
далее, делаем всё также, как на скриншотах:
После нажимаем на команду /newbot или же прописываем вручную.
Надо придумать уникальное имя для бота, придумываем и получаем соответствующий токен.
С чего начать?
Для начала нужно определиться с назначением бота. Затем необходимо выбрать способ его «получения». Существует несколько вариантов:
- Заказать независимой компании-разработчику. Этот вариант поможет получить бота именно с тем функционалом, который вам необходим, но потребует вложений. Впрочем, разработка бота не будет стоить слишком дорого, в отличие, например, от мобильного приложения.
- Воспользоваться конструктором. Этот вариант позволит создать бота как без вложений, так с оплатой – чаще всего по подписке. Но его функционал будет ограничен возможностями конструктора.
- Написать бота самостоятельно. Это лучший вариант, но он потребует терпения, времени и определенных знаний.
Ниже рассмотрим преимущества и недостатки этих вариантов более подробно.
Как проверить группу на ботов и удалить их
Чаще всего приходится действовать вручную, заходить на страницы подозрительных пользователей, просматривать профили и удалять из сообщества. Есть умельцы, которые пишут скрипты, программы для проверки аккаунтов по приведенным выше или другим параметрам. Если у вас или ваших знакомых достаточно знаний в программировании, то можно попробовать такой вариант.
Есть и готовые решения, например, сервис AntiDogs. Он помогает узнать, сколько “собачек” в группе, и удалить заблокированных подписчиков. Заходим на сайт memedia.ru, спускаемся в самый низ страницы и находим нужный нам подраздел.
Теперь копируем адрес сообщества ВКонтакте, вставляем его в специальное поле и нажимаем кнопку “Сканировать”.
В результате проверки получаем расклад, сколько всего подписчиков в сообществе, сколько из них живых, временно и окончательно заблокированных, а также вывод о соотношении “хороших” и “плохих” аккаунтов.
Если количество “собачек” критическое, то есть очень большое, то лучше не откладывать и заняться “уборкой”. Можно это сделать самостоятельно вручную или заплатить небольшую сумму (сейчас это 299 рублей) и использовать AntiDogs для удаления нежелательных фолловеров.
Сервис позволяет убрать всех “собачек”, а также временно или полностью заблокированных пользователей. Пользоваться им после оплаты можно неограниченное время во всех группах, в которых вы являетесь администратором.
Для тех же целей можно использовать программу VkBot. Ее нужно скачать и установить на свой компьютер, запустить, найти нужную функцию и очистить сообщество от фейковых пользователей. 90 дней утилиту можно использовать бесплатно.
Возвращаемся в manage.py и дописываем функционал
Теперь в первых строках нам необходимо проимпортить файл vk_bot. А также нам потребуется библиотека random. import random # pip install random from vk_bot import VkBot После того, как мы объявили longpoll, дописываем основной функционал. longpoll = VkLongPoll(vk) try: for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: bot = VkBot(event.user_id) if event.text.lower() == «о нас»: write_msg(event.user_id, «Немного о нашем проекте», about_us_keyboard) elif event.text.lower() == «мероприятия»: write_msg(event.user_id, «Что ты хочешь узнать?», events_keyboard) elif event.text.lower() == «приложения»: write_msg(event.user_id, «Посмотри, что есть здесь!», app_keyboard) elif event.text.lower() == «контакты»: write_msg(event.user_id, «По любым вопросам можешь обращаться к:», contacts_keyboard) elif event.text.lower() == «руководителю проекта»: write_msg(event.user_id, «У тебя есть возможность написать сообщение нашему Руководителю проекта», go_answer) elif event.text.lower() == «калькулятор»: write_msg(event.user_id, «В разработке…», calc_keyboard) # elif event.text == » «.join(re.findall(‘\\d{2}’, event.text)): # write_msg(event.user_id, «Отлично, мы здесь», calc_keyboard) elif event.text.lower() == «как попасть в команду ?»: write_msg(event.user_id, «Напиши координатору проекта — Никите\\n» «или перейди на сайт проектной деятельности,\\n» «найди проект номер 612 и подай заявку», in_team) else: write_msg(event.user_id, bot.new_message(event.text), main_keyboard) except Exception as e: print(e) Как можете заметить, в условных блоках if и elif — присутствует обработка тех сообщений, которые подразумевают под собой вывод инлайн или встроенной клавиатуры (в данном примере — выводятся только инлайн клавиатуры). Сюда также можно добавить более сложные обработки сообщений, после которых обработка будет метаться туда сюда по блокам if и elif. Таким образом бот будет работать, пока не «упадёт с ошибкой».
Другое дело обстоит с блоком else, здесь мы обращаемся как раз ко классу нашего Бота, после чего он аналогичным способом находит обработку сообщения и выводит результат. Это можно назвать вложенной обработкой, а так как вложенностей лучше избегать, то лучше использовать тот метод программирования бота, который как раз-таки реализован в телеграмм боте.
Виды ботов
По степени сложности программы боты бывают:
- Примитивные – простенькая утилита, которая способна переписываться с пользователями по односложному сценарию, рассылать спам и сообщения. Если в базе ответа на заданный вопрос пользователя нет, то чат-бот пришлет сообщения «Я вас не понимаю». Видели займоботов? Этими объявлениями пестрят все социальные сети и не только. Такие боты часто используются кредитными организациями.
- Продвинутые – это боты с искусственным интеллектом. Такие программы способны просчитывать несколько вариантов ответов на вопросы, угадывать настроение написавшего человека, и предоставить ту информацию, которая нужна пользователю.
Что такое token (или API ключ) и для чего он нужен
Ключ доступа необходим для получения обновлений (в Long Poll), кроме этого, он нужен для работы с API.
Для его получения необходимо зайти в раздел «Управление сообществом» или «Управление страницей». После этого пройти по ссылке «Работа с API» и там выбрать вкладку «Создать ключ доступа». Доступна возможность создания сразу нескольких ключей с разделением по правам доступа. Ключи нужно надежно сохранить, для того, чтобы они не попали в чужие руки. Кроме этого, доступен относительно новый способ получения ключа, с использованием авторизации с помощью Authorization Code Flow
Пишем скрипт чат-бота ВК
Для написания скрипта можно использовать множество языков программирования, но я покажу все на примере node.js.
Создаем файл index.js на компьютере и открываем его редактором кода или IDE (я использую VS Code).
Теперь нам нужно импортировать библиотеку, которую мы установим на сервер позже, и вставить токен (ключ доступа), который мы получили в прошлых шагах:
const { VK, Keyboard } = require(‘vk-io’); const vk = new VK({ token: «сюда вставляем токен» }); const { api } = vk;
Чтобы чат-бот отправлял раcписание, ему нужно его знать. Давайте создадим объект с днями и занятиями:
days = { «понедельник»: «1)Информатика/Англ.яз.\n2)Родная литература\n3)История\n4)Литература\n5)Русск.яз.\n6)Информатика и ИКТ\n7)Англ.яз./Нет урока», «вторник»: «1)Информатика и ИКТ\n2)Литература\n3)Практ. по матем.\n4)Алгебра и нач.ан.\n5)Геометрия\n6)Труд/Русск.яз.\n7)Физкультура», «среда»: «1)Физкультура\n2)Химия\n3)География\n4)Обществознание\n5)Обществознание\n6)Англ.яз.\n7)Физика», «четверг»: «1)Англ.яз./Информатика\n2)Алгебра и нач.ан.\n3)История\n4)Литература\n5)Физкультура\n6)Биология\n7)Нет урока/Англ.яз.», «пятница»: «1)Общество и чел.\n2)Физика\n3)Экономика\n4)Астрономия\n5)ОБЖ\n6)Геометрия» }
Заполните этот объект вашими данными по вышеуказанному примеру.
Теперь нам нужно, чтобы скрипт получал все сообщения, которые отправляются боту:
vk.updates.start(); vk.updates.on(‘message’, (context, next) => { //Далее весь код будем писать тут (внутри скобок) }
Проверяем, содержит ли сообщение текст и отправляется ли от имени пользователя:
if (context.text == NULL || context.isGroup == true || context.text == ‘undefined’) return
Теперь напишем условие на то, что сообщение содержит название дня недели. Также не забываем отправить сообщение с помощью «context.send» вместе с расписанием. Кроме того, добавляем инлайн-кнопку для просмотра расписания на всю неделю, условие которой мы напишем в следующем шаге:
if (Object.keys(days).indexOf(context.text.toLowerCase()) >= 0) { context.send({ message: days[context.text], keyboard: Keyboard.builder() .textButton({ label: ‘Вся неделя’, payload: { command: ‘Вся неделя’ } }) .inline() }) }
Теперь можно написать условие для просмотра расписания на всю неделю:
if (context.text.toLowerCase().includes(‘вся неделя’)){ context.send(`Расписание на всю неделю:\n \nПонедельник:\n${days[«понедельник»]}\n \nВторник:\n${days[«вторник»]}\n \nСреда:\n${days[«среда»]}\n \nЧетверг:\n${days[«четверг»]}\n \nПятница:\n${days[«пятница»]}`) }
Сохраняем файл и приступаем к его установке на сервер.