A
A
andrey_levushkin2018-12-15 20:03:57
PHP
andrey_levushkin, 2018-12-15 20:03:57

Why is the script being executed multiple times?

This code should send back a message with the text from the file if it receives a certain phrase as an incoming message.
Example: "test" was sent to the bot - the bot gave out information from the 1234.txt file.
In other cases, it simply ignores the incoming message.
Everything works, but for some reason a message with information from the file is sent several times, instead of one. I even made a check ($check) to see if the function to send text from a file has already been executed. It still sends multiple times...

<?php 
date_default_timezone_set('UTC+3');
$b = date("W");
  if (!isset($_REQUEST)) { 
    return; 
} 

//Строка для подтверждения адреса сервера из настроек Callback API 
$confirmation_token = 'личный_код'; 

//Ключ доступа сообщества 
$token = 'токен сообщества'; 
/*Закончили настройку бота*/

/**Отправка данных из файла**/
function ost_dz($user_id)
{
  $text1 = file_get_contents('1234.txt');
  $request_params = array( 
    'message' => $text1, 
    'user_ids' => $user_id, 
    'access_token' => 'token сообщества', 
    'v' => '5.85' 
    ); 
  $get_params = http_build_query($request_params); 
  file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); 
  $status=1;
  return $status;
}
/**Отправка данных из файла завершена**/


$check=0;
//Получаем и декодируем уведомление 
$data = json_decode(file_get_contents('php://input')); 


//Проверяем, что находится в поле "type" 
switch ($data->type) { 
//Если это уведомление для подтверждения адреса... 
  case 'confirmation': 
    //...отправляем строку для подтверждения 
    echo $confirmation_token; 
  break; 

//Если это уведомление о новом сообщении... 
  case 'message_new': 
    //...получаем id его автора 
    $user_id = $data->object->from_id;
    // Получаем текст сообщения
    $text = $data->object->text;

//Проверяем полученный текст на наличие фразы test
    if (strpos($text, 'test') !== false)
    {
      if ($check == 0)
      {
          $check = ost_dz($user_id);
      }
    }
  break;
//Возвращаем "ok" серверу Callback API 

echo('ok'); 

break; 

} 
?>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
T
tempick, 2018-12-15
@tempick

So the script outputs something other than "ok". Check what your script's response is.
In general, take out echo 'ok' outside the switch. Perhaps that's the point.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question