Как сделать бота на php?

Бот - это такой электронный малый, с которым можно вести беседу, он будет самообучаться и умственно расти, как малый ребенок. Чем больше вы с ним будете общаться, тем больше он будет знать ответов. На ботов в интернете можно натолкнутся повсюду: они есть в чатах и на форумах, они могут отвечать в комментариях или служить проводниками на сайтах. Если таковых не встречали, то наверняка вспомните Кису из фильма Хоттабыч, Google Now в Андроидах или Siri в iPhone. Все это разновидности так называемых вопросно-ответных систем, используемых для разных целей и нужд.

Бот - очень полезная штука, начиная от развлечений и кончая перечнем полезных функций для владельцев сайтов: бот может быть помощником, консультантом в интернет-магазине, проводником по сайту, инициатором бесед на форумах, сотрудником службы техподдержки, секретарем, стражем и т.д.

Как создать бота самому?

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

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

Бот на php: реализация

Создав и обучив бота отвечать посетителям Вашего сайта, давайте приступим к его интеграции на сайт. Нам лишь потребуется id бота (просто наведите мышку на своего бота и вы увидите ключ наподобии):

e2ae75f7-d451-4306-572c-8fa6a69172d0

Далее я привожу несложный php код с пояснениями его работы. Код отсылает вопрос Вашему боту (вы можете использовать и чужого бота - при необходимости) и получает от него ответ.

<?php
//создаем функции, которые будут отсылать боту все необходимые данные
class XORFUNC
{
 public static function XOR_encrypt($message, $key)
 {
 $ml = strlen($message);
 $kl = strlen($key);
 $newmsg = "";

 for ($i = 0; $i < $ml; $i++) {
 $newmsg = $newmsg . ($message[$i] ^ $key[$i % $kl]);
 }

 return base64_encode($newmsg);
 }

 public static function XOR_decrypt($encrypted_message, $key)
 {
 $msg = base64_decode($encrypted_message);
 $ml = strlen($msg);
 $kl = strlen($key);
 $newmsg = "";

 for ($i = 0; $i < $ml; $i++) {
 $newmsg = $newmsg . ($msg[$i] ^ $key[$i % $kl]);
 }
 return $newmsg;
 }
}

function initme($vkid, $key, $botid)
{
$getuid = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/' . $botid . '/' . $vkid);
 $jsonparam = json_decode(base64_decode(XORFUNC::XOR_decrypt($getuid, $key)));

 return $jsonparam;
}

//настройки бота, нам понадобиться лишь один параметр - id бота, его можно узнать, просто наведя мышку на своего бота или чужого бота в сервисе.
$config['botid'] = "e8ae75f7-d931-4300-974c-8fa5a69142d5";
//остальные настройки получаем автоматически
$config['key'] = "some very-very long string without any non-latin characters due to different string representations inside of variable programming languages";

//бот различает собеседников, присваивая им различные ключи. Мы создадим файл для каждого потенциального собеседника с ботом и запишем в него это ключ.
$klush = md5($_SERVER["REMOTE_ADDR"]);
if(!file_exists($klush)) {
$fp = fopen($klush, "w"); 
$data = initme(12, $config['key'], $config['botid']);
file_put_contents($klush, $data->result->cuid);
} 
$session = file_get_contents($klush);

// Кажись все. Теперь отсылаем боту вопрос
$vopros = "Добрый день!";
$whattosend = '["' . $session . '","' . urldecode($vopros) . '"]';
$hashed = XORFUNC::XOR_encrypt(base64_encode($whattosend), $config['key']);
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
 CURLOPT_URL => 'http://iii.ru/api/2.0/json/Chat.request',
 CURLOPT_RETURNTRANSFER => true,
 CURLOPT_POST => true,
 CURLOPT_POSTFIELDS => $hashed,
));
$response = curl_exec($myCurl);
curl_close($myCurl);

//получаем ответ от бота на вопрос
$answer = json_decode(base64_decode(XORFUNC::XOR_decrypt($response, $config['key'])));
$otvet = $answer->result->text->value;
echo $otvet;
?>

Cохраним этот код в какой-нибудь bot.php и обратившись к нему в браузере: ваш_сайт.ру/bot.php, мы увидим результат его работы. Например:

Здравствуйте!

Ура! Бот работает, ведь мы ему отправили:

$vopros = "Добрый день!";

Все ответы бота у нас в текстовой переменной $otvet, которую мы можем обрабатывать на стороне своего сайта на свое усмотрение (скажем, запрещать боту говорить то, что нас не устраивает), что дает больше возможностей и привилегий.

Как пример безграничных возможностей, ограниченных последней версией php на вашем хостинге и вашей фантазией, заставим бота... заговорить человеческим голосом. Для этого в конец файла выше, вместо строк:

echo $otvet;
?>

допишем:

?>
<script src="http://code.responsivevoice.org/responsivevoice.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
responsiveVoice.OnVoiceReady = function() {
responsiveVoice.speak($('#text').html(), 'Russian Female');
};
</script>
<div id="text"><?php echo $otvet;?></div>

Теперь у нас не чат-бот, отвечающий письменно, но и говорящий человеческим языком!

Боты на php: примеры реализации

Теперь, когда мы научились управлять ботами посредством php, можем позволить себе экспериментировать с ними. Давайте пофантазируем, где и как мы можем их приспособить:

  • мы можем включать ботов на сайте для посетителей из какой-либо страны (определяя посетителя по ip);
  • говорить с посетителями лишь утром или вечером (при всем этом, бот будет помнить всех собеседников);
  • перехватывать ответы бота (фильтровать) и корректировать их в соответствии с требованиями Вашего сайта;
  • бот может рассказывать Вашим посетителям что у вас нового на сайте с момента его отсутствия;

Функционал бота ограничен лишь Вашей фантазией. Естественно, потребуется немножко покодить, но вы можете создавать множественные варианты их применения, в том числе и экстравагантные.

Бот, угадывающий мысли

Бот может быстро находить ответ на поставленный ему вопрос или угадывать смысл предложения, даже если человек еще не полностью его отправил боту. Вот как это выглядит на практике: я заставил бота считывать вопрос человека по мере его ввода в строку. Бот молниеносно схватывает суть вопроса, даже если он еще не сформулирован целиком:



Беседующие между собой боты

В другом примере, я скрестил двух ботов, заставив их бесконечно общаться друг с другом (нажмите на картинку ниже). Теперь боты без устали общаются между собой (для каждого слушателя генерируется уникальный диалог), иногда просто бессмысленно, а иногда используя такие обороты речи, что порой задумываешься: а не пора ли уже проходить тест Тьюринга?

как разговаривают боты
Разговор двух ботов (слушать онлайн)

Нажмите на картинку, чтобы послушать разговор ботов! Естественно, это общаются не люди, но вы можете заметить в этих диалогах маленькую "искру разума", как у маленьких детей.

Оцените материал:
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (16 голоса, рейтинг: 4,75 из 5)
Загрузка...

Вячеслав - типичный интернетчикВячеслав Скоблей (ака files) - типичный интернетчик. Скитаюсь интернетом, пишу на PHP, увлекаюсь созданием веб-сайтов на Wordpress, решаю многочисленные проблемы, которые до появления интернета не существовали...

Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой...

Наверняка у Вас есть вопросы, просьбы или пожелания. Не стесняйтесь спросить, я отвечаю всегда быстро...

58 комментарий

  1. Олег says:

    Здравствуйте. Бот еще работает? Вроде сайт iii.ru перестал работать.

    1. Вячеслав Скоблей says:

      Очень жаль, но проект iii.ru в коматозном состоянии. Очень жаль, хороший был проект, дальнейшая судьба неизвестна.

  2. v.khorolskyi says:

    Вячеслав, раньше бот работал отлично. Сейчас же на локальном хосте всё ок, а вот на сервер когда кидаю - не работает. Создаётся файл диалога, но он пуст. Бот не воспринимает ни отсылаемые ему слова, ни слова, которые написаны в коде (например, напрямую в переменную). Пробовал на разных хостингах, с разной версией PHP - всё тщетно... Возможно, у вас есть другой вариант бота, модифицированный какой-то. Может просто технология устарела.... Если есть, то прошу вас скинуть, буду очень признателен. Пожалуйста, помогите решить проблему. У вас я вижу всё работает... Спасибо, что уделили время.

    1. Вячеслав Скоблей says:

      Технология не устарела, если демо-бот работает, значит у вас должен. Проверяйте ключи, кодировку UTF-8 файлов, права на перезапись файлов диалога и т.д. и т.п. Типичные ситуации молчания бота рассмотрены здесь в комментариях.

      1. v.khorolskyi says:

        Я не знаю, как работает ваш бот, который угадывает мысли. Может мне стоит его попробовать? Скиньте, пожалуйста, код, если у вас есть такая возможность

        1. Вячеслав Скоблей says:

          Это тот же бот, что и в статье. Разница лишь в том, что ответы приходят через ajax

          1. андрей says:

            а как ответы поменять на ajax ??

  3. Doniyor says:

    Добрый вечер, в каком разделе можно найти этот чат бот, готовый с файлам или зип формате? я пока что новичок в этом сфере по этому не знаю куда код привязать

    1. v.khorolskyi says:

      Вячеслав, верите, всё перепробовал. С кодировкой проблем нет (utf-8 без bom ). Права доступа на запись тоже есть... Бот сам перестал работать около 15 месяцев назад. Может у вас есть другой код, другой пример в открытом доступе?

      1. Вячеслав Скоблей says:

        Другого нет, кроме того, что в статье.
        Обратите внимание на ветку https://seo-zona.ru/kak-sdelat-bota-na-php-2015-12-08.html#comment-10136

  4. Здравствуйте!!! С уважением к вам Александр Сазанов!
    Помогите создать бота, а то знакомый разработчик, начал мне помогать, и забросил, по семейным обстоятельствам.

    API внешнего бота

    Реализовать внешнего бота можно на любом удобном языке программирования, необходимо только получить данные от сервера Сервиса. Данные на внешний сервер передаются методом POST через следующие переменные:

    event — событие, которое произвел пользователь;
    chatid — ID чата в системе August4u;
    userid — ID сессии пользователя;
    profile — номер профайла позователя, если он зарегистрирован;
    nick — ник пользовалеля;
    mess — сообщение пользователя;
    param — битовый набор флагов, определяющих свойства пользователя (пол, личка, невидимость и т.д.)
    используется переменная param, в которой содержатся свойства пользователя.

    Всего внешний бот реагирует на три события от пользователя и на одно событие для зауска заданий по расписанию, соответственно, переменная event может принимать одно из значений:

    enter — пользователь вошел в чат;
    quit — пользователь покинул чат;
    mess — пользователь отправил сообщение;
    cmd — зауск задания по расписанию.

    Для событий enter и quit не передаются сообщения, а для события quit также еще не передается и ник пользователя. Для события cmd имя команды передается в переменной mess.

    Т.к. событие cmd инициируется не пользователем, то переменные profile, nick и param не содержат никаких значений, а переменная userid используется особым образом — в ней передается битовый набор комнат, в которых должно отображаться сообщение бота.

    Результатом работы внешнего бота должна быть строка в кодировке windows-1251, которая будет выведена в окно чата от имени бота.

    Шаблон внешнего бота на PHP

    Прмер использования задания по расписанию для вывода анекдота

    <?php
    define ('USER_SEX', 0x03);
    define ('USER_BIRTHDAY', 0x04);
    define ('USER_NEWBIE', 0x08);
    define ('USER_PRIVATE', 0x10);
    define ('USER_INVISIBLE', 0x20);
    define ('USER_ADMIN', 0x40);
    
    $Event = $_POST ['event'];
    $ChatID = intVal ($_POST ['chatid']);
    $UserID = intVal ($_POST ['userid']);
    $Profile = intVal ($_POST ['profile']);
    $Nick = $_POST ['nick'];
    $Mess = $_POST ['mess'];
    $Param = intVal ($_POST ['param']);
    
    switch ($Event) {
    case 'enter':
    break;
    case 'quit':
    break;
    case 'mess':
    break;
    case 'cmd':
    // имя задания в настройках бота anekdot
    if ($_POST ['mess'] == 'anekdot') {
    include "include/anekdot.inc.php";
    $a = get_anekdot ();
    print "$a»;
    exit;
    }
    break;
    }
    ?>

    Примерно пытался что то добавить ко второму скрипту ВОТ ПРИМЕР

    <?php$ARTICLE = array (
    'http://lolanekdot.ru/anekdoty-pro-muzha/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-muzhikov-parney/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-zhenu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-zhenschin-devushek/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-seks-pro-eto/&#039;,
    'http://lolanekdot.ru/milye-anekdoty/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-papu-mamu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-syna-dochku/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-ohotu-i-rybalku/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-armiyu-soldat-voynu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-politiku/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-rabotu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-sport/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-poruchika-rzhevskogo/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-vovochku/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-shtirlica-myullera/&#039;,
    'http://lolanekdot.ru/anekdot-pro-sherloka-holmsa-doktora-vatsona/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-zolotuyu-rybku-dzhina/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-petku-i-vasiliya-ivanovicha/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-vinni-puha-i-pyatachka/&#039;,
    'http://lolanekdot.ru/anekdoty-gospod-bog/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-teschu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-babok/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-policiyu-i-miliciyu/&#039;,
    'http://lolanekdot.ru/anekdoty-otkroyte/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-gai-i-gibdd/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-narkomanov/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-vrachey/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-uchiteley/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-shkolu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-uchenyh/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-studentov/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-sessiyu-i-ekzameny/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-chukchu/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-evreev/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-estoncev/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-moldavan/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-programmistov-i-sisadminov/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-kompyuter/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-internet/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-windows/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-futbolku-pochemu-ne-pahnet/&#039;,
    'http://lolanekdot.ru/anekdoty-pro-apteku/&#039;,
    'http://lolanekdot.ru/anekdoty-neizvestno-pro-chto/&#039;
    );
    
    function get_anekdot () {
    global $ARTICLE;
    $a = mt_rand (0, count ($ARTICLE) — 1);
    $c = get_html ($ARTICLE [$a]);
    $n = preg_match ("`.+?(\d+)`sm», $c, $r);
    if ($n) {
    $p = mt_rand (1, +$r [1]);
    if ($p > 1)
    $c = get_html ($ARTICLE [$a], $p);
    }
    $n = preg_match_all («`\s*(.+?)`sm», $c, $r);
    if ($n) {
    $an = $r [1];
    $an = $an [mt_rand (0, count ($an) — 1)];
    $an = preg_replace (««», «\n», $an);
    $an = str_replace (» «, » «, $an);
    return str_replace («\n», «», preg_replace («`\n\b`sm», » «, trim (strip_tags ($an))));
    }
    return null;
    }
    
    function get_html ( $URL, $p = 0 ) {
    $curl = curl_init ($p ? «$URL/page/$p/» : $URL);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
    $r = curl_exec ($curl);
    curl_close ($curl);
    return $r;
    }
    ?>
  5. Alex says:

    Почему то на локалхосте всё отлично, а на сервере в initme получаю

    stdClass Object ( [error] => stdClass Object ( [code] => -32000 [message] => Can't connect to MySQL server on 'imy2.local' (111) [data] => stdClass Object ( ) ) [id] => 0 )
    1. Вячеслав Скоблей says:

      Хм, к какой MySQL вы подключаетесь? Скрипт не использует MySQL.

      1. Alex says:

        В том то и дело что не к какой я не подключаюсь, тот код который приведен выше запустил на локалхосте, всё отлично работает, и его же выложил на сервер, и вот эту ошибку получаю, вот и не пойму какого черта

        1. Вячеслав Скоблей says:

          Не знаю, попробуйте выполнить какой-нибудь элементарный PHP код: echо "Hello"; phpinfo(); или что-то в этом роде. Возможно проблемы на сервере?

          1. Alex says:

            проблемы на сервере, но не пойму какие.... сервер работает нормально, остальные сайты работают, на другом сервере с php 5кой запустился скрипт нормально, на локалхосте с 7кой тоже, а на сервере с 7кой нет.... что не так не пойму xD

            1. Alex says:
              <?php
              $res = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/e8ae75f7-d931-4300-974c-8fa5a69142d5/12');
              echo $res.'-'.mb_strlen($res).PHP_EOL;

              На локалхосте получаю 1536 символов
              А на сервере получаю 192 символа
              Есть идеи что не так? )))

              1. Вячеслав Скоблей says:

                file_get_contents отключен или не работает на сервере.

                1. Alex says:

                  file_get_contents работает

                  1. Вячеслав Скоблей says:

                    с адреса http://iii.ru/api/2.0/json/Chat.init/... вы должны получать 1,5Кб - все верно.
                    Если вы не получаете ничего, вариантов два:

                      1. file_get_contents не тянет
                      2. ваш ip блокируется удаленным сервером
                    1. Alex says:

                      wget http://iii.ru/api/2.0/json/Chat.init/e8ae75f7-d931-4300-974c-8fa5a69142d5/12
                      получаю 192 байта
                      так что дело даже не в php, тоже думал о том что блочится ip, но не пойму почему в ошибке типо не может подключиться к mysql, да и вообще за что блочат то...

                    2. Alex says:

                      попросил знакомого на другом сервере тоже этот файл скачать, у него тоже 192 байта

                    3. Вячеслав Скоблей says:

                      Выложите на https://pastebin.com Может вы модифицировали код? Я же не вижу что там у вас. У других, в том числе и на этой странице - все работает, бот разговорчив.

                    4. Alex says:

                      в терминале
                      wget иссылка
                      и качает 192 байта, хотя с локалхоста и с другого сервера нормально

                    5. Alex says:

                      Вячеслав, у Вас несколько серверов? Если да то сможете на них всех попробовать скачать файл по ссылке http://iii.ru/api/2.0/json/Chat.init/e8ae75f7-d931-4300-974c-8fa5a69142d5/12 и посмотреть сколько они будут весить?

                    6. Alex says:

                      просто перейти по ссылке то скачается 1.5 кб (провайдер yota), а на другом компе (провайдер интерсвязь) скачалось 192 байта xD странно както xD

      2. Alex says:

        А зачем там

        $config['url'] = 'http://' . $_SERVER['HTTP_HOST'];

        Ведь он же не где не используется

        1. Вячеслав Скоблей says:

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

        2. Вячеслав Скоблей says:

          Может фейс-контроль не проходите :)

          1. J0seph says:

            Такая же история. Из-под локального сервера работает четко, а на внешнем - object(stdClass)#4 (2) { ["error"]=> object(stdClass)#5 (3) { ["code"]=> int(-32000) ["message"]=> string(51) "Can't connect to MySQL server on 'imy2.local' (111)" ["data"]=> object(stdClass)#6 (0) { } } ["id"]=> string(1) "0" }
            Три хостинга обошел - не работает. Если автор поможет решить проблему - договоримся о вознаграждении.
            З.Ы. Так и не нашел, где у них описан апи :-(

  6. says:

    Тоже нужен очень бот...будем плотно изучать статью, спасибо

  7. Дмитрий says:

    Доброго вам! Может подскажете код простой формы для вывода диалога на html страницу

  8. Ильгиз says:

    Здравствуйте! А на голом php можно создать робота?

    1. Вячеслав Скоблей says:

      Поставьте вопрос иначе: почему нельзя создать бота на php? Можно конечно! Для php есть какие нерешаемые задачи?

  9. Александр says:

    доступ к файлу открыл полностью - запись, исполнение и т.д. Другие php файлы работают нормально. файл bot2.php перестал прописываться как текст, просто страница грузится бесконечно долгое время, но не загружается. Переименование .htaccess результата не принесла. Жаль. Может в будущем найдется решение. Тема очень интересна.

    1. Вячеслав Скоблей says:

      Проблема не в скрипте. Попробуйте обратится к поддержке хостинга.

    2. Хуршид says:

      Как сделать бота, который будет скачивать инфу с одного интернет-ресурса и закачивать на другой?
      Например, что бы он скачивал файл с Telegram'а и закачивать на мой канал в YouTube?
      Например, я дам ему ссылку откуда надо скачать файл, и куда закачать, и чтобы он всё выполнил)

      1. Вячеслав Скоблей says:

        Прям как в русской народной сказке «По щучьему веленью» :)
        Хуршид, такая реализация требует некоторых мыслительных процессов, времени, кода и... банку кофе.

  10. Александр says:

    Кодировку сделал, но вместо бота все равно только текст http://shop-in-online.ru/design/bot1.php . Возможно я что-то упустил?

    1. Вячеслав Скоблей says:

      У вас не выполняется php код. Проблемы могут быть самые разнообразные: неправильные настройки на сервере, защита от исполнения php в папках и т.д. Попробуйте для теста переименовать файл .htaccess в корне сайта.

  11. Александр says:

    Здравтсвуйте! Решение очень актуальное. Сделал bot.php закачал, получился только текст на экране http://shop-in-online.ru/design/bot.php. Можете, что-нибудь подсказать?

    1. Вячеслав Скоблей says:

      Не забудьте сохранить файл в кодировке UTF-8 (без BOM).
      Кстати, это наиболее распространенная ошибка перед запуском бота на php

  12. says:

    Крутая тема! Спасибо за мануал!

  13. Ян says:

    Вячеслав, я вас ооочень прошу. Помогите, расскажите как это сделать? Есть сервер от hostinger и Ваш скрипт. Не пойму как совместить всё это, чтобы получился реальный бот для вк

    1. Вячеслав Скоблей says:

      Дело не в хостинге. Нужна интеграция скрипта с API VK, я в нем не особо разбираюсь. Но в моем скрипте разберется каждый, кто мало мальски понимает API соцсети.

  14. Ян says:

    Этот скрипт подойдёт для создания бота в вк?

    1. Вячеслав Скоблей says:

      Если сможете его интегрировать в API VK, то почему нет?

  15. Ян says:

    А весь этот скрипт, писать полностью, от начала до конца, в блокнот? А потом переименовать с "txt" в "php"? А куда потом всё это залить?

    1. Вячеслав Скоблей says:

      Да, именно так. Заливать на хостинг с поддержкой PHP. Поиграться можно и локально на компьютере (Open Server или Denwer)

  16. Леонид Богданович says:

    Вячеслав у меня еще такой вопрос. Бот распознает диалоги и когда подряд отвечаешь пользователям на "привет" он пишет ответы каждому новому, типа "Дубль два привет", "Еще раз привет" и т.д... Как это исправить? Я так понимаю в функции initme переменной $vkid нужно новое значение подставлять, если да то какие значения можно присваивать этой переменной, может просто рандомное число а потом это число закреплять за пользователем?

    1. Вячеслав Скоблей says:

      Значит, он не распознает собеседников, а должен. В коде вы найдете кусок кода, который за это отвечает:

      //бот различает собеседников, присваивая им различные ключи. Мы создадим файл для каждого потенциального собеседника с ботом и запишем в него это ключ.
      $klush = md5($_SERVER["REMOTE_ADDR"]);
      if(!file_exists($klush)) {
      $fp = fopen($klush, "w"); 
      $data = initme(12, $config['key'], $config['botid']);
      file_put_contents($klush, $data->result->cuid);
      } 
      $session = file_get_contents($klush);

      Таким образом, пользователь распознается по ip и в папке со скриптом должен генерироваться файл с ключем для каждого собеседника. Скорее всего файлы не создаются (либо нет прав на создание файлов в папке, либо функция определения ip у вас вызывается по другому (я использовал, как видите $_SERVER["REMOTE_ADDR"]).

      1. Леонид Богданович says:

        'REMOTE_ADDR'
        IP-адрес, с которого пользователь просматривает текущую страницу. У меня скрипт работает с локалхоста и ип постоянно 127.0.0.1 тоесть нужно просто менять название фала, и каждый файл присваивать отдельному юзверю правильно?

        1. Вячеслав Скоблей says:

          Если ip всегда одинаков (127.0.0.1) - то бот, понимает, что это один и тот же человек (собеседник).
          Можно придумать другую идентификацию, но я не знаю какую! Вы можете писать в куки ключ, но если пользователь зайдет с другого браузера - бот его не узнает. ip я использовал как универсальное решение. Даже если человек придет к боту через неделю, бот его узнает по ip и ключу, который сохранится в файле.

          1. Леонид Богданович says:

            исходя из кода $klush = md5($_SERVER["REMOTE_ADDR"]); REMOTE_ADDR влияет только на название файла($klush) в котором хранится ключ и никак не передается инфу

            1. Вячеслав Скоблей says:

              Название файла $klush - это ip юзера

              Но в файле хранится номер сессии $session - идентификатор разговора.

              Этот уникальный ключ (идентификатор разговора) читается из файла и передается боту (так бот обращается к файлу сессии и может продолжать начатый разговор):

              $session = file_get_contents($klush);

  17. Леонид Богданович says:

    Спасибо Вячеслав, я уже сам понял что дело в кодировке. ЗараБОТало!!!

  18. Леонид Богданович says:

    На локальном сервере не работает, просто белый экран. Возможно что то поменялось на iii.ru как исправить?

    1. Вячеслав Скоблей says:

      По идее должно работать. Файл, надеюсь, сохранили в кодировке UTF-8? Иначе робот не будет понимать вас по русски.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *