Comments 21
спасибо, посмеялся :)
что это у тебя там в пупочке?
Отличный пост для моего сегодняшнего утра (: Спасибо, и весело, и увлекательно.
Занимаюсь сейчас похожей темой.
Расскажите, а как Вы организовали обмен данными и обработку диалогов с vk?
Расскажите, а как Вы организовали обмен данными и обработку диалогов с vk?
Все реализовано на базе стандартного vk api. Бот работает как обычное standalone приложение, с «долгоиграющим» токеном. Про обработку сообщений — наверно лучше на примере:
Ну и ссылки на эти два волшебных api-метода:
messages.getLongPollServer
messages.getLongPollHistory
Надеюсь, это вам поможет.
function loop() {
$this->debug("started message loop.");
$ts = $this->longpollsettings['ts']; //при запуске вызывается метод, получающий адрес сервера
while ($data = json_decode(file_get_contents("http://{$this->longpollsettings['server']}?act=a_check&key={$this->longpollsettings['key']}&ts=$ts&wait=20&mode=2"), true)) {//если есть обновления
if (rand(41, 49) == 42)
$this->lazyChecks(); //иногда выполняются проверки, например - вывод песни в статус, если она закончила играть, или ответ на комментарии в паблике (да, бот еще умеет отвечать на комментарии)
$ts = $data['ts'];
$up = $data['updates'];
if (count($up)) {
foreach ($up as $u) {
switch ($u[0]) {
case 4:// 4 - код события - "новое сообщение"
$this->receiveMessage($u[1], $u[2], $u[3], $u[4], $u[5], $u[6], $u[7]); // сама обработка сообщения
break;
default:
break;
}
}
}
if ($data['failed']) // если подключение не удалось, получаем новый адрес сервера
$this->loadLPServerSettings();
}
}
Ну и ссылки на эти два волшебных api-метода:
messages.getLongPollServer
messages.getLongPollHistory
Надеюсь, это вам поможет.
clever people think alike :)
думал, может быть есть какой-то другой способ, ан-нет.
Скажите, а Вы полученную таким образом базу сообщений как-либо дополнительно обрабатываете вручную или нет?
думал, может быть есть какой-то другой способ, ан-нет.
Скажите, а Вы полученную таким образом базу сообщений как-либо дополнительно обрабатываете вручную или нет?
Полученное сообщение перерабатывается в список масок (все слова в предложении, больше двух символов и не состоящие из цифр) и отдается prolog-скрипту. Он выполняет свою работу и отдает список ответов. А далее пришедшее сообщение сохраняется в базе знаний вместе с ответом на него. Человек исключен из этого процесса :). Правда пару раз бывало, что писали иностранцы, на своем родном языке. Приходилось вручную чистить базу.
Разговорный троль на php+prolog
Это гениальная идея: провести тест Тьюринга ВКонтакте… интересно, много ли пользователей ВК смогут пройти тест на адекватность речи и сколько нужно времени среднему посетителю сайта, чтобы распознать в собеседнике робота:-)
Учитывая контингент, и основную цель общения («го вирт», «кидай фотки») — некоторые с ним общались долго. И переставали только после того, как в диалоге проскакивало сообщение от бота «я парень». А один даже завел с ботом роман в стиле «я так и знал, что ты парень, но мне без разницы… мне нравится как ты пишешь!» — и это продолжалось НЕДЕЛЮ, пришлось его добавить в черный список бота. А вот девушки в основном быстро определяли «плохой стиль общения» и переставали писать, или добавляли в чс. А идея со статистикой классная, запишу на будущее, спасибо.
Я проводил такой эксперимет. Делал когда-то чат-бота для вконтакте.
Люди очень долго не могли понять, что с ними разговаривает бот.
А многие даже не представляют, что такое возможно в принципе.
Люди очень долго не могли понять, что с ними разговаривает бот.
А многие даже не представляют, что такое возможно в принципе.
Тоже когда-то давно сделал чат-бота xu.su
Хотел сделать его самообучающимся — не вышло, заспамили базу =)
Хотел сделать его самообучающимся — не вышло, заспамили базу =)
А он всегда онлайн? Или ручками запускаете?
Если не сложно, скиньте в ЛС поиграться.
Если не сложно, скиньте в ЛС поиграться.
Прикольно получился бот. Почитал дилоги, поржал наотлично.
П.С. виноград (с)
П.С. виноград (с)
Sign up to leave a comment.
Разговорный бот на php+prolog