Написал чат бота и после того как ему задаёшь вопрос он отвечает но постоянно повторяет сообщение после отправки. Потом отключил его, но сегодня посмотрел запросы и увидел что даже когда робот не подключен группа генерирует запросы на которые бот должен был бы среагировать. Я уже голову сломал чтобы понять в чём проблема и где ошибка в коде бота или в настройках сообщества! Подскажи пожалуйста может вместе сможем найти ответ.
Вот такие запросы генерирует сообщество
вот часть кода бота Если вдруг ошибка там.
$rand = mt_rand(0000000000, 9999999999);
//Функции
function vk_send($method, $request) {
$get_params = http_build_query($request);
json_decode(file_get_contents(VK_API_ENDPOINT.$method.$get_params.'&access_token='.VK_API_TOKEN.'&v='.VK_API_VERSION));
}
function vk_print($user, $group_id) {
$req = VK_API_ENDPOINT.'messages.setActivity?user_id='.$user.'&type=typing&peer_id='.$user.'&group_id='.$group_id.'&access_token='.VK_API_TOKEN.'&v='.VK_API_VERSION;
json_decode(file_get_contents($req));
}
// ----------------------------------------------------------------------------------------------------------------------------------------------------
if (!isset($_REQUEST)) {
return;
}
// Получаем и декодируем уведомление
$data = json_decode(file_get_contents('php://input'));
// Проверяем secretKey
if (strcmp($data->secret, VK_API_SECRETKEY) !== 0 && strcmp($data->type, 'confirmation') !== 0) {
return;
}
// Используя switch проверим, что находится в поле «type» (какое событие сработало и в зависимости от этого сформируем ответ).
// Проверяем, что находится в поле "type"
switch ($data->type) {
// Запрос для подтверждения адреса сервера (посылает ВК)
case 'confirmation':
// Отправляем строку для подтверждения адреса
echo VK_API_CONFIRMATIONTOKEN;
break;
//--------------------------------------------------------------------------------------------------
// Поиск нужного слова в сообщении
case 'message_new':
$userId = $data->object->peer_id;
if (stripos($data->object->text,'сколько') !== false && stripos($data->object->text,'семейная') !== false ||
stripos($data->object->text,'Сколько') !== false && stripos($data->object->text,'семейная') !== false
) {
//Если сообщение не первое то не будет здороваться
if ($data->object->conversation_message_id > 1) {
//Задержка
sleep(3);
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
'random_id' => $rand,
'user_id' => $userId,
'message' => "Стоимость"
);
//Отправление сообщения
vk_print($userId, '35320184');
sleep(12);
vk_send('messages.send?', $request_params);
}else{
// через users.get получаем данные об авторе
$request = VK_API_ENDPOINT.'users.get?user_ids='.$userId.'&access_token='.VK_API_TOKEN.'&v='.VK_API_VERSION;
$response = file_get_contents($request);
$response = json_decode($response,true);
// Вытаскиваем имя отправителя
$user_name = $response['response'][0]['first_name'];
//Задержка
sleep(3);
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
'random_id' => $rand,
'user_id' => $userId,
'message' => "Здравствуйте, ".$user_name.".",
);
//Отправление сообщения
vk_print($userId, '35320184');
vk_send('messages.send?', $request_params);
}
}elseif (stripos($data->object->text,'сколько') !== false && stripos($data->object->text,'свадебная') !== false ||
stripos($data->object->text,'сколько') !== false && stripos($data->object->text,'свадьбы') !== false
) {
if ($data->object->conversation_message_id > 1) {
//Задержка
sleep(3);
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
'random_id' => $rand,
'user_id' => $userId,
'message' => "Стоимость",
'dont_parse_links' => 0,
'disable_mentions' => 0
);
//Отправление сообщения
vk_print($userId, '35320184');
vk_send('messages.send?', $request_params);
}else{
// через users.get получаем данные об авторе
$request = VK_API_ENDPOINT.'users.get?user_ids='.$userId.'&access_token='.VK_API_TOKEN.'&v='.VK_API_VERSION;
$response = file_get_contents($request);
$response = json_decode($response,true);
// Вытаскиваем имя отправителя
$user_name = $response['response'][0]['first_name'];
//Задержка
sleep(3);
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
'random_id' => $rand,
'user_id' => $userId,
'message' => "Здравствуйте, ".$user_name.,
);
//Отправление сообщения
vk_print($userId, '35320184');
vk_send('messages.send?', $request_params);
}
}
// header('HTTP/1.1 200 OK');
echo 'ok';
break;
Как-то так:
class MessageSend
{
public function send ($msg, $user_id, $access_token)
{
$request_params = array (
"peer_id" => $user_id,
"random_id" => "0",
"message" => $msg,
"access_token" => $access_token,
"v" => "5.103");
$get_params = http_build_query($request_params);
file_get_contents("https://api.vk.com/method/messages.send?".$get_params);
}
}
$ms = new MessageSend();
$root = json_decode(file_get_contents("php://input"));
$message = $data->message->text;
switch ($root->type) {
case "confirmation":
echo "000000";
break;
case "message_new":
echo ("ok");
switch ($message) {
case "привет":
sleep (2); //Задержка
$ms->send("Hello", "141435963", $access_token); //Отправляем сообщение
break;
case "мир":
sleep (2); //Задержка
$ms->send("World", "141435963", $access_token); //Отправляем сообщение
break;
}
break;
}
В данном примере ВК в первую очередь получает сообщение что все "ок", а потом уже выполняет условия. Тем самым можно спокойно юзать sleep
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть кнопка в игре "Купить"При нажатии на неё через Ajax отправляются данные о юзере (Id, имя) и обрабатываются далее php скриптом (снимается баланс,...
Вообщем у меня есть код, который добавляет Теги из ArticleController - в таблицу Tag значения(поле алиас уникальное), и сохраняется в промежуточную таблицу...
В БД есть таблица нотификаций, из которой нужно раз в месяц удалять устаревшие записи