Информационная безопасность
0,0
рейтинг
27 февраля 2015 в 14:46

Разработка → Разговорный бот для Вконтакте на PHP

Интро. Лирика


Как-то в один прекрасный день меня осенила мысль о том, что было бы неплохо, если бы такие повседневные задачи как постинг и поддержание активности аккаунта в какой-либо социальной сети выполнял не человек, а простой разговорный бот. Тем более при «ботнете» в несколько сотен аккаунтов выполнять задачу с помощью одного человека нецелесообразно и почти невозможно. Поэтому возникла идея написать разговорного бота средствами, которые лучше всего мне были известны. Я решил сделать бота на PHP.

База ответов


Начать, как вы уже догадались, нужно было с поиска баз для ответов бота и элементарного технического задания, которое помогло бы сделать все быстро и с минимальным количеством костылей (у меня без костылей не получилось).

Немного раньше я познакомился с одним интересным проектом от компании «Наносемантика», которая занимается подобными задачами и создает, вроде, комерческих ботов-саппортов и прочее. Этот проект — iii.ru. На сайте проекта можно создать бота и получить его flash-версию для вставки на сайте. API у них не было, пришлось декомпилировать swf.

Закриптовано?!


Первое, что пришло ко мне в голову, когда я открыл декомпилированный код SWF файла — где теперь найти точку вывода ответов и каким образом это все перевернуть в сторону своей задумки. Удивлению не было предела, когда я увидел, что все запросы и ответы шифруются с помощью XOR + Base64, а ключ для расшифровки был в начале кода. Зачем тогда криптовать?

Техническая часть вопроса


Основные задачи, которые должен был выполнять мой бот — получать последние сообщения с «Вконтакте», отсылать их на сервер, получать ответ, отправлять ответ человеку, который общается с ботом.

Было создано следующие файлы:
— index.php (работает как клиент, обновляющий с помощью jquery файл с подгрузкой пришедших сообщений и последующим ответом)
— autoload.php (собственно, тот файл, который принимает и отвечает)
— showmeid.php (файл, который создает новый ID чата, если собеседник впервые общается с ботом)
— config.php (коннект к базе данных с клиентами бота)
— classes.php (классы для работы с ботом)

Установка


1. Импортируйте dump.sql в свою базу данных
2. Получите «долгоиграющий» access token для работы с VK API с помощью ссылки — получить token
3. Переименуйте config.sample.php в config.php предварительно изменив данные для коннекта к базе данных
4. Пользуйтесь запустив index.php

Итак, прошу знакомиться — Лариса Чернышова

А также исходники на GitHub.

UPD: Если бот не отвечает — значит блокируется отправка сообщения просьбой ввести капчу.

За подробностями и вопросами — добро пожаловать ко мне в блог
Alex Novak @xjukebox
карма
24,5
рейтинг 0,0
Информационная безопасность
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (40)

  • –2
    Социальные сети созданы для людей, а не для ботов. Но кого это волнует, правильно?

    Да, и еще, постинг через API, скорее, наоборот будет указывать на «нечеловеческую» природу аккаунта, но утверждать что у ВК за алгоритмы не возмусь.
    • +1
      Шаблоны, шаблоны повсюду.
      Социальные сети созданы для общения. А кто там будет общаться человек, кот, киборг или еще кто-то — это не важно, имхо.
      • +2
        Ага, а е-почта — для передачи сообщений. А спам там или важные новости- пофигу.
    • 0
      В любом случае бот эмулирует поведение человека для того, чтобы собеседник чувствовал, что общается с человеком.
      Администрация Вконтакте — это последнее о чем я думал. :)
      Если API позволяет что-то делать, то почему бы это не сделать? :)
      • +3
        Социальные сети созданы для общения.

        Для коммуникации ботов даже прикладные протоколы не нужны, правда ведь? А вот человеку, думается мне, тяжело будет сидеть и в уме декодировать байты с сокета.

        Да, значение слова «социальный» ни на какие мысли не наталкивает?

        В любом случае бот эмулирует поведение человека для того, чтобы собеседник чувствовал, что общается с человеком.


        Лол, вы нарушили правило 1.1 платформы разработчиков. Не говоря уже о нескольких подпунктах 6.3 пользовательского соглашения.

        Я понимаю, что их никто не читает, но от участия в человеческой многоножке это не освобождает.

        И да, пусть я зануда, но не отрицаю того факта, что функционал вашего бота никому не вредит, по большому счету. Вот только все мы прекрасно понимаем для чего они используются на самом деле. Отсюда и подобная реакция.
    • +1
      Но ведь клиенты под те же iOS/Android используют VK API, не?
      • 0
        Используют, вот только по токену можно понять официальное приложение или нет.
  • +2
    Если допилить общение в группах, то был бы полезный бот-автоFAQер, а то одни и те же вопросы задалбывают.
    • +1
      Это делается еще проще.
      API VK позволяет многие вещи делать.
      • +4
        Так допилите и переходите на светлую сторону силы )
  • 0
    image
    • +1
      Да, есть такая проблема.
      Почему-то внезапно начала по три раза отвечать на сообщения.
    • +1
      Должно было быть как то так — Я не могут ответить на этот вопрос, мне нужно уточнить в офис (с)
  • –1
    В свое время я посадил фёрби (такой электронный чебурашка), напротив «кота повторюшки», и мои дочери завороженно наблюдали за их общением. (идея не моя, я лишь повторил эксперимент).
    А вам, в код бота нужно еще добавить таймауты, иначе тысячи ботов, общающихся между собой со скоростью света, повалят вконтакт.
  • 0
    Насколько я понимаю на гитхабе просто тонкий клиент, и вся логика находится на iii.ru?
    Если так, то я бы не стал делится «догоиграющим» токеном с пермишинами на диалоги.
    • 0
      Совершенно верно.
      Но долгоиграющие токены нужны при большом количестве анкет, чтобы не менять их каждый раз, когда время жизни токена заканчивается.
      • 0
        Выкладывайте всего бота. Зачем скрывать всю логику?
        • 0
          Так это не его бот. Он просто написал гейт к существующему (чужому) проекту.
        • 0
          Логика элементарна. Следующая статья будет о логике.
          А пока все есть в документации на iii.ru и форумах
  • +2
    Сдулся бот. Недолго музыка играла. Недолго фраер танцевал.
    • +1
      image
      Она пытается…
  • +1
    github.com/iillexial/vk-chat-bot тоже такой фигней страдал, правда у меня намного проще, стоял на кроне
    • –2
      Очень понравилась ваша реализация. Форкнул.
  • 0
    А в чём смысл этого?
    • –3
      Эмулировать активность аккаунтов. Добавить паттерны ответов для ботов-саппортов. Собственно это и все.
  • +1
    У школьников каникулы?
  • –3
    Классная тема, коллеги! Молодцы! Ну и раз уже пошла такая пьянка про боты и ВКонтакте, вот мои пять копеек: эту группу ведёт мой бот. Автоматически. Скоро напишу об этом статью, а пока что можно почитать тут. Спасибо!
    • 0
      Ведение группы по существующей базе — это же простая задача, зачем выносить в отдельную статью?

      Просто сам писал такое, посты случайно выбирались из БД, сам скрипт запускался по крону.

      Или у вас что-то новое?)
      • 0
        Ха, так ведь сайт, с которого робот помещает новости в группу, составляет не человек. А робот. Робот парсит интернет, собирает новости и публикует их и на сайт, и в паблик. А вы думали, что сайт составляет редактор, а робот только зеркалирует.
        • 0
          А что, парсер сложно написать?
          • 0
            Где я такое сказал?
        • 0
          Так и парсер ведь не такая уж и проблема написать. К тому же, если у некоторых источников есть RSS-лента, так вообще сказка получается.

          Я видел только паблик. Теперь увидел и сайт. И не сказал бы, что его человек ведет. Видно, что парсится
  • 0
    Все прелестно, просьба только немного поправить или добавить в конфиг адрес сайта, на котором будет висеть бот, а то у меня Евгений отвечал что он Лариса. Продублировал в гитхабе на всякий случай
    • 0
      А что не так? Вдруг Евгений определился наконец.
      Как сестра Вачовски
      • 0
        Евгений уже разобрался с гендерной самоидентификацией, но теперь проблема куда серьезнее — он считает себя роботом, хоть и Евгением
  • 0
    А что за отправка данных на bot.mew.su?
    • 0
      Отправляет написанный текст и получает ответ.
      Желательно добавить туда домен на котором хостится ваш бот.
      • 0
        Дык там по всему коду, хардкодом отсылка на этот сайт.
  • 0
    Ларису заблокировали
  • +1
    Обернул все в класс gist.github.com/misterx/48fb01a574936aa19b63, запускается с консоли.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.