Cтраничный бот VK говорилка — идеальный способ собрать трафик для дейтинга. Ранее мы уже писали, как создать чат-бота с помощью сторонних сервисов.
Кроме того, мы создавали аналогичный бот-говорилку для Telegram своими руками, без использования сторонних сервисов. Сегодня же мы адаптируем упомянутую выше говорилку под VK.
А заодно рассмотрим основные особенности процесса создания ботов для этой соцсети.
*Спойлер: готовый исходный код — в конце статьи.
Источник
Работа с VK отличается следующими моментами:
Вся эта информация вам понадобится, если вы захотите выйти за рамки предложенного в статье решения. Впрочем, перейдем к делу!
Писать код мы будем на python, а в качестве сервера использовать бесплатную платформу pythonanywhere. Импровизированной базой данных будет выступать обычный txt-файл. Для нашего бота этого более чем достаточно.
Итак:
Жмем сюда
Ждем прогрузки сервера
Сервер готов к работе
Процесс загрузки модуля для работы с API-интерфейсом VK
Процесс загрузки модуля для перебора словаря
Процесс загрузки модуля для работы метрики Левенштейна
Загрузка скрипта на сервер
Ответ
Возможный вариант фраз-шаблонов словаря
Загрузка словаря на сервер
Оба файла должны быть загружены. Если какого-то нет — загрузите заново.
Бот работает — дальнейшая реалистичность зависит лишь от качества и глубины заполнения словаря.
После «общения» с ботом появился файл с логами
Ссылка на скачивание словаря
Кроме того, мы создавали аналогичный бот-говорилку для Telegram своими руками, без использования сторонних сервисов. Сегодня же мы адаптируем упомянутую выше говорилку под VK.
А заодно рассмотрим основные особенности процесса создания ботов для этой соцсети.
*Спойлер: готовый исходный код — в конце статьи.
Какие задачи решает бот
Бот-говорилка помогает решать такие задачи:- Прогрев потенциальных клиентов дейтинг-сервисов путем «общения» с ними.
- Логирование вопросов собеседников для дальнейшего «обучения» бота.
- Коммуникация с подписчиками групп и с клиентами в пабликах-витринах.
- FAQ для магазинов и прочих площадок.
- Повышение траста аккаунтов при фарме за счет активности в ЛС.
Источник
Принцип работы бота
Несмотря на то, что основной алгоритм работы бота построен на использовании довольно сложного уравнения Левенштейна, общая логика его работы проста:- Он «слушает» личные сообщения привязанного к нему профиля с помощью Longpoll, обрабатывая события в реальном времени.
- При появлении нового сообщения он сравнивает его по расстоянию Левенштейна со словарем.
- Исходя из содержимого словаря подбирается фраза, наиболее похожая на сообщение пользователя.
- В ответ присылается сообщение, закрепленное в качестве ответа на ранее выбранную из словаря фразу.
- Параллельно с этим сообщение пользователя и ответ бота записываются в лог, чтобы в дальнейшем можно было обучить бота ответам на фразы, которые он еще «не знает» (которых нет в словаре).
- При получении вопроса-триггера бот делает вид, что ему неудобно общаться в VK, и предлагает продолжить общение на дейтинг-сайте.
Пара слов про ботов для VK
Прежде чем перейти к написанию кода, давайте остановимся на особенностях создания ботов для VK.Работа с VK отличается следующими моментами:
- Абсолютно другой API-интерфейс.
- Несколько способов обработки событий в реальном времени — BotsLongPoll API для ботов (групп), UserLongPoll API для страниц (в том числе страничных ботов), потоковый Streaming API, CallBack API для инициации сервером. И все они могут использоваться для работы ботов.
- При работе с VK существуют токены с разными уровнями доступа. И если в Telegram токен вам выдает FatherBot, и ошибиться невозможно, то в случае с VK очень легко получить не тот токен.
- Наличие незадекларированных инструментов — методов и функций, которые отсутствуют в официальной документации, но которые можно использовать (иногда их использование противоречит правилам VK).
Вся эта информация вам понадобится, если вы захотите выйти за рамки предложенного в статье решения. Впрочем, перейдем к делу!
Пошаговая инструкция, как создать страничный бот для дейтинга VK
Для начала нам нужно получить токен. Имейте в виду, что токен предоставит полный доступ к странице! Или к паблику, если речь будет идти о токенах для сообществ. Настоятельно рекомендуем использовать для тестов ненужную страницу. В особенности если вы воспользуетесь дешевым или бесплатным сервером.Писать код мы будем на python, а в качестве сервера использовать бесплатную платформу pythonanywhere. Импровизированной базой данных будет выступать обычный txt-файл. Для нашего бота этого более чем достаточно.
Итак:
- Регистрируемся на pythonanywhere.
- Запускаем Bash-консоль. Ждем, пока сервер загрузится и настроится.

Жмем сюда

Ждем прогрузки сервера

Сервер готов к работе
- Апдейтим сервер для работы с VK API, введя в консоль:

Процесс загрузки модуля для работы с API-интерфейсом VK
- Устанавливаем модуль для подбора ответов по словарю — Fuzzy Wuzzy. Для этого вводим:

Процесс загрузки модуля для перебора словаря
- Устанавливаем модуль метрики Левенштейна, необходимый для корректной работы модуля Fuzzy Wuzzy. Для этого вводим:

Процесс загрузки модуля для работы метрики Левенштейна
- Создаем любым текстовым редактором файл bot.py и копируем в него следующий код:
import vk_api
import os
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType
from fuzzywuzzy import fuzz
# Создаём переменную для удобства в которой хранится наш токен от группы
token="ТОКЕН СЮДА" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.
# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)
# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})
# Загружаем список фраз и ответов в массив
mas=[]
if os.path.exists('slovar.txt'):
f=open('slovar.txt', 'r', encoding='UTF-8')
for x in f:
if(len(x.strip()) > 2):
mas.append(x.strip().lower())
f.close()
# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
# Чтобы наш бот не слышал и не отвечал на самого себя
if event.to_me:
# Для того чтобы бот читал все с маленьких букв
message = event.text.lower()
# Получаем id пользователя
id = event.user_id
if os.path.exists('slovar.txt'):
a = 0
n = 0
nn = 0
for q in mas:
if('u: ' in q):
# С помощью fuzzywuzzy получаем, насколько похожи две строки
aa=(fuzz.token_sort_ratio(q.replace('u: ',''), message))
if(aa > a and aa!= a):
a = aa
nn = n
n = n + 1
s = mas[nn + 1]
blasthack(id, s)
f=open('log.txt', 'a', encoding='UTF-8')
f.write('u: ' + message + '\n' + s +'\n')
f.close()
import os
# Достаём из неё longpoll
from vk_api.longpoll import VkLongPoll, VkEventType
from fuzzywuzzy import fuzz
# Создаём переменную для удобства в которой хранится наш токен от группы
token="ТОКЕН СЮДА" # В ковычки вставляем аккуратно наш ранее взятый из группы токен.
# Подключаем токен и longpoll
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)
# Создадим функцию для ответа на сообщения в лс группы
def blasthack(id, text):
bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})
# Загружаем список фраз и ответов в массив
mas=[]
if os.path.exists('slovar.txt'):
f=open('slovar.txt', 'r', encoding='UTF-8')
for x in f:
if(len(x.strip()) > 2):
mas.append(x.strip().lower())
f.close()
# Слушаем longpoll(Сообщения)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
# Чтобы наш бот не слышал и не отвечал на самого себя
if event.to_me:
# Для того чтобы бот читал все с маленьких букв
message = event.text.lower()
# Получаем id пользователя
id = event.user_id
if os.path.exists('slovar.txt'):
a = 0
n = 0
nn = 0
for q in mas:
if('u: ' in q):
# С помощью fuzzywuzzy получаем, насколько похожи две строки
aa=(fuzz.token_sort_ratio(q.replace('u: ',''), message))
if(aa > a and aa!= a):
a = aa
nn = n
n = n + 1
s = mas[nn + 1]
blasthack(id, s)
f=open('log.txt', 'a', encoding='UTF-8')
f.write('u: ' + message + '\n' + s +'\n')
f.close()
- Заменяем фразу “ВАШ ТОКЕН” на ранее полученный токен.
- Сохраняем файл bot.py.

Загрузка скрипта на сервер
- Создаем любым текстовым редактором файл slovar.txt и копируем в него шаблоны фраз и ответов следующей структуры:
Ответ

Возможный вариант фраз-шаблонов словаря
- Сохраняем файл slovar.txt.

Загрузка словаря на сервер
- Загружаем файлы на сервер, проверяем, что они корректно загрузились.

Оба файла должны быть загружены. Если какого-то нет — загрузите заново.
- Запускаем обработку скрипта bot.py.
- Тестируем работоспособность бота.

Бот работает — дальнейшая реалистичность зависит лишь от качества и глубины заполнения словаря.
- Обратите внимание, что создался файл log.txt — в нем хранится история переписки пользователя с ботами. С ее помощью можно обучать бота — нужно лишь подставить вопросы пользователей и ответы на них в файл slovar.txt.

После «общения» с ботом появился файл с логами
Исходный код бота-говорилки и словарь фраз:
Ссылка на скачивание исходного кодаСсылка на скачивание словаря