Всем снова привет и с наступающим!
Похоже, я теперь буду постоянным участником конкурсов зеннолаба =)
У меня для вас опять шаблон, которым я пользуюсь на постоянке и с его помощью получаю не хилые результаты.
Я Более чем уверен, что каждый "зенновод" найдёт применение этому автоответчику или каким-то отдельным частям =)
Техническое воплощение не на 10 из 10, знаю, но со своими обязанностями он хорошо справляется и если его функционала не хватает - можно его легко переделать под любые ваши узкие задачи.
В шаблоне есть C# кубик "Ответ", его постарался максимально понятно прокомментировать, т.к. возможно он не каждому будет понятен.
Так же в шаблоне в кубиках с запросами к базе фигурирует такая строчка
Она получает все настройки для коннекта к MySQL серверу, чтоб в каждом запросе не писать ip, порт, логин, пароль и бд, достаточно в поле коннекта к базе написать mysql
Посмотреть как именно она работает - можно в общем коде. Я часто пользуюсь подобными облегчениями кода, удобно.
Итак по шаблону
[-Для чего нужен-]
Сильно поможет при спам рассылках, чтоб не кидать ссылки или фотки с ссылками в лоб
Для дорвейных страниц
Для "завлекательных" страниц, чтоб не палить ссылки в статусах и прочих местах - можно провоцировать постами или фотками писать в личку, а там уже автоответчиком уводить трафик в нужное место)
[-Требования для шаблона-]
Писался шаблон в зенопостере версии 5.17, последние правки шаблона делались в 7 версии.
MySQL запросы писались и вся работа велась на MySQL 8.0
[-Функционал шаблона-]
[-Почему умный?-]
1) У автоответчика есть чёрный список. Если он кому-то ответил максимально допустимое кол-во раз, он ему больше не будет отвечать.
2) Автоответчик отвечает последовательно.
То есть диалог будет выглядеть примерно так:
- Собеседник
- Автоответ 1
- Собеседник
- Автоответ 2
- Собеседник
- Автоответ 3
При хорошем продумывании целевого диалога большая часть клиентов даже не понимают, что им отвечает автоответчик.
3) Так же автоответчик старается быть максимально похожим на реального человека, устанавливая онлайн статусы, показывая в диалогах, что он "печатает" или "записывает голосовое"
Вот примеры нескольких диалогов с одного из аккаунтов, в голосовом сообщении просто "Спасибо" =)
4) Продуманные голосовые сообщения в разы увеличивают доверие
[-Структура базы-]
3 таблицы
vk_autoresponce - в ней сохраняются все собеседники которые получили автоответ. Эта таблица заполняется сама шаблоном, в процессе автоответов, считайте это ЧЁРНЫЙ СПИСОК
Поля: id, ts, user, project, count
vk_posts - в этой таблице хранятся сообщения и аттачи для конкретных аккаунтов и проектов
Поля: login, msg*, attach*, type*, project
msg - само сообщение (поддерживается Spintax рандомизация {1|2})
attach - прикрепление к сообщению (фото, видео, аудио, файлы и т.д) Только сам аттач, вида photo522123311_451232022, спинтакс тоже поддерживается.
type - как будет показываться вашему собеседнику
typing - вы печатаете
audiomessage - записываете голосовое сообщение
vk_users - а в этой хранятся сами аккаунты, на которых будем включать автоответчик
Поля: id, login, password, hash, proxy, answers, status, last_activity, projects, owner
login - номер телефона или е-мэйл аккаунта. Обязательное поле
password - пароль от аккаунта. Обязательное поле
hash - access_token. Можно не заполнять, шаблон сам получит.
proxy - Или без прокси, тогда ничего не заполнять или socks5, тогда заполнять в виде login:pass@ip:port
status - good . Обязательное поле. Если статус будет другой - шаблон не возьмёт аккаунт в работу.
projects - название проекта на латинице, без символов и знаков препинания, желательно одним словом
[-Детали работы шаблона-]
ВНИМАНИЕ! Почти все коды в этой статье пришлось редактировать, чтоб форум не считал их за SQL инъекции, по этому актуальный код смотреть внутри шаблона!
Получаем свободный аккаунт для текущего проекта. У всех свободных аккаунтов статус "good"
Сразу после получение аккаунта меняем на нём статус на "working", чтоб другие потоки не забрали этот аккаунт в работу
Методом account.getProfileInfo проверяем аккаунт на авторизацию, если авторизация спала - будет error в json, если ошибки нету - значит авторизованы.
После того, как убедились, что авторизация успешна - устанавливаем аккаунту статус онлайн на 5 минут
После установке статуса, get-запросом получаем LongPoll сервер, через который и будем получать новые сообщения
В ответ мы получаем сам сервер, ключ и timestamp для следующего запроса (чтоб сервер знал, с какого момента для нас сообщения будут считаться новыми)
Далее мы подключаемся к полученному серверу используя полученный ключ и указываем, что мы ждём 25 секунд.
Если в течении 25 секунд произойдёт активность любого собеседника - мы получим ответ от Long Poll сервера ВК и уже проверим что там за активность и стоит ли на неё отвечать
Если активности не будет, то шаблон заного сделает запрос в ожидании сообщения.
После получения нового сообщения проверяем, есть ли id нашего собеседника в базе для текущего проекта
Если нету - добавляем
Проверяем сколько уже сообщений отправили собеседнику
Если отправлено меньше, чем мы указали, то помечаем все сообщения в диалоге прочитанными
Получаем массив сообщений, аттачей и типов для текущего аккаунта и текущего проекта
Устанавливаем в диалоге статус "печатает" или "записывает голосовое сообщение" в зависимости от необходимого типа
Отвечаем собеседнику
После ответа обновляем кол-во отвеченных сообщений и время последнего ответа для нашего собеседника в текущем проекте
Работаем в этом цикле проверки новых сообщений и ответа на них, пока не закончится указанное для работы время
После завершения таймера работы автоответчика записываем в базу, сколько у этого аккаунта в текущем проекте ответов и когда он последний раз был активен
Если у аккаунта невалидный access_token - устанавливаем соответствующий статус
Если аккаунт ловит бан - меняем его статус на забаненный
Если шаблон завершает работу с непонятной для него ошибкой (это не бан и не кривой токен) - то устанавливаем аккаунту статус "bad_end", такие аккаунты лучше проверять руками, если всё ок, то менять их статус в базе на good
[-Инструкция по настройке-]
1) Установить MySql 8.0
2) Запустить MySQL 8.0 Command Line Client (Пуск -> MySQL -> MySQL Server 8.0 -> MySQL 8.0 Command Line Client)
3) Ввести команду "use mysql"
4) Ввести команду "UPDATE user SET Host=% WHERE User=root AND Host=localhost;" (если планируется доступ к базе или управление с других компьютеров)
5) Ввести команду "FLUSH PRIVILEGES;" (если выполнили команду из пункта 4)
6) Ввести команду "CREATE DATABASE zp;" (zp - название базы данных, которую потом вписывать в настройках шаблона)
7) Ввести команду "use zp;"
Ввести команду "source <путь_до_файла_zp_struct.sql>;"
* Все команды в конце имеют ";" Будьте внимательны!
** Для удобства работы с базой лучше установить программу Navicat или её аналоги
*** В этой инструкции тоже пришлось удалить часть кода, инструкция с точными командами в прикреплении
Более подробно о настройке в видео:
Очень надеюсь, что вам понравилась статья и шаблон и рассчитываю на ваш голос!
Всех с наступающим! И хороших вам профитов! =)
Похоже, я теперь буду постоянным участником конкурсов зеннолаба =)
У меня для вас опять шаблон, которым я пользуюсь на постоянке и с его помощью получаю не хилые результаты.
Я Более чем уверен, что каждый "зенновод" найдёт применение этому автоответчику или каким-то отдельным частям =)
Техническое воплощение не на 10 из 10, знаю, но со своими обязанностями он хорошо справляется и если его функционала не хватает - можно его легко переделать под любые ваши узкие задачи.
В шаблоне есть C# кубик "Ответ", его постарался максимально понятно прокомментировать, т.к. возможно он не каждому будет понятен.
Так же в шаблоне в кубиках с запросами к базе фигурирует такая строчка
C#:
string mysql = MySQL.GetMySQL(project);
Посмотреть как именно она работает - можно в общем коде. Я часто пользуюсь подобными облегчениями кода, удобно.
Итак по шаблону
[-Для чего нужен-]
Сильно поможет при спам рассылках, чтоб не кидать ссылки или фотки с ссылками в лоб
Для дорвейных страниц
Для "завлекательных" страниц, чтоб не палить ссылки в статусах и прочих местах - можно провоцировать постами или фотками писать в личку, а там уже автоответчиком уводить трафик в нужное место)
[-Требования для шаблона-]
Писался шаблон в зенопостере версии 5.17, последние правки шаблона делались в 7 версии.
MySQL запросы писались и вся работа велась на MySQL 8.0
[-Функционал шаблона-]
- Шаблон работает только с MySQL базой (в базе все автоответы, список id кому уже ответили, сообщения для автоответчика).
- Поддерживает прокси
- Работает на API кроме получения токена
- Автоматически получает и обновляет токен для аккаунта
- Ждёт указанное кол-во минут новые сообщения и отвечает на них
- Отвечает до 5 последовательных сообщений
- Может к ответам прикреплять вложения (фото, видео, аудио, документы и т.д)
- Настройка сколько автоответов отправлять каждому собеседнику (от 1 до 5)
- Разделение аккаунтов по проектам (на каждый проект можно указать сколько угодно аккаунтов и использовать их многопотоке)
- Возможен многопоток в формате 1 копия шаблона = 1 проект = многопоток внутри проекта
- Пауза между проверками новых сообщений (ждёт новые сообщения в течении 25 секунд, если не пришло - пауза)
- Перед ответом в диалоге помечает сообщения прочитанными
- Поддерживается рандомизация сообщений (Spintax)
- При отправке сообщения собеседнику показывает, что вы печатаете
- При отправке аудио возможна установка статуса "записывает голосовое сообщение"
- При блокировке аккаунта устанавливает в базе статус "BANNED"
- При истечении срока действия токена - получает его заного
- Выводит из комы зависшие в "работе" аккаунты (у которых в базе статус "working" но по какой-то причине шаблон до конца не доработал и не вернул статус на свободный)
[-Почему умный?-]
1) У автоответчика есть чёрный список. Если он кому-то ответил максимально допустимое кол-во раз, он ему больше не будет отвечать.
2) Автоответчик отвечает последовательно.
То есть диалог будет выглядеть примерно так:
- Собеседник
- Автоответ 1
- Собеседник
- Автоответ 2
- Собеседник
- Автоответ 3
При хорошем продумывании целевого диалога большая часть клиентов даже не понимают, что им отвечает автоответчик.
3) Так же автоответчик старается быть максимально похожим на реального человека, устанавливая онлайн статусы, показывая в диалогах, что он "печатает" или "записывает голосовое"
Вот примеры нескольких диалогов с одного из аккаунтов, в голосовом сообщении просто "Спасибо" =)
4) Продуманные голосовые сообщения в разы увеличивают доверие
[-Структура базы-]
3 таблицы
vk_autoresponce - в ней сохраняются все собеседники которые получили автоответ. Эта таблица заполняется сама шаблоном, в процессе автоответов, считайте это ЧЁРНЫЙ СПИСОК
Поля: id, ts, user, project, count
vk_posts - в этой таблице хранятся сообщения и аттачи для конкретных аккаунтов и проектов
Поля: login, msg*, attach*, type*, project
msg - само сообщение (поддерживается Spintax рандомизация {1|2})
attach - прикрепление к сообщению (фото, видео, аудио, файлы и т.д) Только сам аттач, вида photo522123311_451232022, спинтакс тоже поддерживается.
type - как будет показываться вашему собеседнику
typing - вы печатаете
audiomessage - записываете голосовое сообщение
vk_users - а в этой хранятся сами аккаунты, на которых будем включать автоответчик
Поля: id, login, password, hash, proxy, answers, status, last_activity, projects, owner
login - номер телефона или е-мэйл аккаунта. Обязательное поле
password - пароль от аккаунта. Обязательное поле
hash - access_token. Можно не заполнять, шаблон сам получит.
proxy - Или без прокси, тогда ничего не заполнять или socks5, тогда заполнять в виде login:pass@ip:port
status - good . Обязательное поле. Если статус будет другой - шаблон не возьмёт аккаунт в работу.
projects - название проекта на латинице, без символов и знаков препинания, желательно одним словом
[-Детали работы шаблона-]
ВНИМАНИЕ! Почти все коды в этой статье пришлось редактировать, чтоб форум не считал их за SQL инъекции, по этому актуальный код смотреть внутри шаблона!
Получаем свободный аккаунт для текущего проекта. У всех свободных аккаунтов статус "good"
C#:
SELECT * FROM `vk_users` WHERE `status`=good AND projects LIKE %имя_проекта% LIMIT 0,1;
Сразу после получение аккаунта меняем на нём статус на "working", чтоб другие потоки не забрали этот аккаунт в работу
C#:
UPDATE vk_users SET status=working, last_activity=t WHERE login=login AND projects LIKE %имя_проекта%;
Методом account.getProfileInfo проверяем аккаунт на авторизацию, если авторизация спала - будет error в json, если ошибки нету - значит авторизованы.
После того, как убедились, что авторизация успешна - устанавливаем аккаунту статус онлайн на 5 минут
C#:
https://api.vk.com/method/account.setOnline?voip=0&access_token=access_token&v=5.60
После установке статуса, get-запросом получаем LongPoll сервер, через который и будем получать новые сообщения
C#:
https://api.vk.com/method/messages.getLongPollServer?lp_version=3&need_pts=1&access_token={-Variable.access_token-}&v=5.65
Далее мы подключаемся к полученному серверу используя полученный ключ и указываем, что мы ждём 25 секунд.
C#:
https://{-Variable.server-}?act=a_check&key={-Variable.key-}&ts={-Variable.ts-}&wait=25&mode=2&version=3
Если в течении 25 секунд произойдёт активность любого собеседника - мы получим ответ от Long Poll сервера ВК и уже проверим что там за активность и стоит ли на неё отвечать
Если активности не будет, то шаблон заного сделает запрос в ожидании сообщения.
После получения нового сообщения проверяем, есть ли id нашего собеседника в базе для текущего проекта
C#:
SELECT EXISTS(SELECT user FROM vk_autoresponce WHERE user = user_id AND `project`=имя_проекта);
Если нету - добавляем
C#:
INSERT INTO vk_autoresponce(user, project) VALUES(user_id, имя_проекта);
Проверяем сколько уже сообщений отправили собеседнику
C#:
SELECT count FROM `vk_autoresponce` WHERE `user`=user_id AND `project`=имя_проекта LIMIT 0,1;
Если отправлено меньше, чем мы указали, то помечаем все сообщения в диалоге прочитанными
C#:
https://api.vk.com/method/messages.markAsRead?message_ids={id}&access_token="+access_token+"&v=5.65;
Получаем массив сообщений, аттачей и типов для текущего аккаунта и текущего проекта
C#:
SELECT * FROM `vk_posts` WHERE `login`=login AND `project`=имя_проекта;
Устанавливаем в диалоге статус "печатает" или "записывает голосовое сообщение" в зависимости от необходимого типа
C#:
https://api.vk.com/method/messages.setActivity?user_id={id}&type={type}&access_token="+access_token+"&v=5.65;
Отвечаем собеседнику
C#:
https://api.vk.com/method/messages.send?user_id={id}&random_id={random}&message={msg}&attachment={att}&access_token="+access_token+"&v=5.65
После ответа обновляем кол-во отвеченных сообщений и время последнего ответа для нашего собеседника в текущем проекте
C#:
UPDATE vk_autoresponce SET count=msgs, ts=timestamp WHERE user=user_id AND `project`=имя_проекта;
Работаем в этом цикле проверки новых сообщений и ответа на них, пока не закончится указанное для работы время
После завершения таймера работы автоответчика записываем в базу, сколько у этого аккаунта в текущем проекте ответов и когда он последний раз был активен
C#:
UPDATE vk_users SET status=good, last_activity=timestamp, answers=answers WHERE login=login AND projects LIKE %имя_проекта%;
Если у аккаунта невалидный access_token - устанавливаем соответствующий статус
C#:
UPDATE vk_users SET status=BAD_ACCESS_TOKEN WHERE login=login AND projects LIKE %имя_проекта%;
Если аккаунт ловит бан - меняем его статус на забаненный
C#:
UPDATE vk_users SET status=BANNED WHERE login=login AND projects LIKE %имя_проекта%;
Если шаблон завершает работу с непонятной для него ошибкой (это не бан и не кривой токен) - то устанавливаем аккаунту статус "bad_end", такие аккаунты лучше проверять руками, если всё ок, то менять их статус в базе на good
C#:
UPDATE vk_users SET status=bad_end WHERE login=login AND projects LIKE %имя_проекта%;
[-Инструкция по настройке-]
1) Установить MySql 8.0
2) Запустить MySQL 8.0 Command Line Client (Пуск -> MySQL -> MySQL Server 8.0 -> MySQL 8.0 Command Line Client)
3) Ввести команду "use mysql"
4) Ввести команду "UPDATE user SET Host=% WHERE User=root AND Host=localhost;" (если планируется доступ к базе или управление с других компьютеров)
5) Ввести команду "FLUSH PRIVILEGES;" (если выполнили команду из пункта 4)
6) Ввести команду "CREATE DATABASE zp;" (zp - название базы данных, которую потом вписывать в настройках шаблона)
7) Ввести команду "use zp;"
Ввести команду "source <путь_до_файла_zp_struct.sql>;"* Все команды в конце имеют ";" Будьте внимательны!
** Для удобства работы с базой лучше установить программу Navicat или её аналоги
*** В этой инструкции тоже пришлось удалить часть кода, инструкция с точными командами в прикреплении
Более подробно о настройке в видео:
Очень надеюсь, что вам понравилась статья и шаблон и рассчитываю на ваш голос!
Всех с наступающим! И хороших вам профитов! =)
- Номер конкурса статей
- Двенадцатый конкурс статей
- Тема статьи
- Соц. сети
Вложения
Последнее редактирование модератором:





