@andrey_levushkin

Почему скрипт выполняется несколько раз?

Данный код должен отправлять в ответ сообщение с текстом из файла, если получит определённую фразу в качестве входящего сообщения.
Пример: Боту отправили "test" - бот выдал информацию из файла 1234.txt
В остальных же случаях он просто игнорирует входящее сообщение.
Всё работает, но почему-то сообщение с информацией из файла отправляется несколько раз, вместо одного. Я даже сделал проверку ($check) на то, была ли уже выполнена функция отправки текста из файла. Всё равно отправляет по несколько раз...
<?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; 

} 
?>
  • Вопрос задан
  • 322 просмотра
Пригласить эксперта
Ответы на вопрос 1
@tempick
Значит, скрипт выводит что-то отличное от "ok". Проверьте, какой ответ вашего скрипта.
А вообще, echo 'ok' вынесите за пределы switch. Возможно, дело именно в этом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы