Задать вопрос
@alex2k19

Проблема с api vk?

Крч, написал бота в вк который отвечает на сообщение, но проблема в том что он может отвечать на одно сообщение несколько раз, как можно пофиксить? Код ниже
if (!isset($_REQUEST))
  {
    return;
  }
$data = json_decode(file_get_contents('php://input'));

  switch ($data->type) 
  {
    case 'confirmation':

    echo $cal_string;

    header("HTTP/1.1 200 OK");

    break;
   
    case'message_new':
 
    $text = $data->object->text;
    $user_id = $data->object->from_id;
    $user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&access_token={$key}&v=5.101"));
    $user_name = $user_info->response[0]->first_name;

        $params = array(
        'message' => "Привет, $user_name!",
        'access_token' => $key,
        'user_id' => $user_id,
        'v' => '5.101',
        'random_id' =>  rand()
        );

        $get_params = http_build_query($params);

        file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);

    echo 'ok';

    header("HTTP/1.1 200");
    
    break;
  • Вопрос задан
  • 84 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
@Randewoo
Лишнее:
if (!isset($_REQUEST))
{
	return;
}

after:
<?php
$data = json_decode(file_get_contents('php://input'), true);
switch ($data['type']) 
{
	case 'confirmation': 
	{
		echo $cal_string;
		break;
	}
	case'message_new':
	{
		echo 'ok';
		fastcgi_finish_request();
		$text = $data['object']['text'];
		$user_id = $data['object']['from_id'];
		$user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&access_token={$key}&v=5.101"));
		$user_name = $user_info['response'][0]['first_name'];
		$params = [
			'message' => urlencode("Привет, $user_name!"),
			'access_token' => $key,
			'user_id' => $user_id,
			'v' => '5.101',
		];
		$get_params = http_build_query($params);
		file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
		break;
	}
}
?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы