Доброго времени суток! Произошла такая проблема: выдаёт ошибку
Timeout was reached
при запросе подтверждения ссылки в callback api. Код написан на PHP. Что делать в этой ситуации?
Весь код:
//Строка для подтверждения адреса сервера из настроек Callback API
$confirmationToken = '12345678';
//Ключ доступа сообщества
$token = '12345678901234567890123456789012345678901234567890';
// Secret key
$secretKey = '1234567890123456';
//Получаем и декодируем уведомление
$data = json_decode(file_get_contents('php://input'));
// проверяем secretKey
if(strcmp($data->secret, $secretKey) !== 0 && strcmp($data->type, 'confirmation') !== 0)
return;
//Проверяем, что находится в поле "type"
switch ($data->type) {
//Если это уведомление для подтверждения адреса сервера...
case 'confirmation':
//...отправляем строку для подтверждения адреса
echo $confirmationToken;
break;
//Если это уведомление о новом сообщении...
case 'message_new':
//...получаем id его автора
$userId = $data->object->user_id;
//затем с помощью users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$userId}&v=5.73"));
//и извлекаем из ответа его имя
$user_name = $userInfo->response[0]->first_name;
//С помощью messages.send и токена сообщества отправляем ответное сообщение
$request_params = array(
'message' => "{$user_name}, ваше сообщение зарегистрировано!<br>".
"Мы постараемся ответить в ближайшее время.",
'user_id' => $userId,
'access_token' => $token,
'v' => '5.73'
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?' . $get_params);
//Возвращаем "ok" серверу Callback API
echo('ok');
break;
// Если это уведомление о вступлении в группу
case 'group_join':
//...получаем id нового участника
$userId = $data->object->user_id;
//затем с помощью users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$userId}&v=5.73"));
//и извлекаем из ответа его имя
$user_name = $userInfo->response[0]->first_name;
//С помощью messages.send и токена сообщества отправляем ответное сообщение
$request_params = array(
'message' => "Добро пожаловать в наше сообщество, {$user_name}!<br>" .
"Если у Вас возникнут вопросы, то вы всегда можете обратиться к администраторам сообщества.<br>" .
"Их контакты можно найти в соответсвующем разделе группы.<br>" .
"Хорошего дня!",
'user_id' => $userId,
'access_token' => $token,
'v' => '5.73'
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?' . $get_params);
//Возвращаем "ok" серверу Callback API
echo('ok');
break;
// Если это уведомление о выходе из группы
case 'group_leave':
//...получаем id ушедшего участника
$userId = $data->object->user_id;
//затем с помощью users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$userId}&v=5.73"));
//и извлекаем из ответа его имя
$user_name = $userInfo->response[0]->first_name;
//С помощью messages.send и токена сообщества отправляем ответное сообщение
$request_params = array(
'message' => "{$user_name}, нам очень жаль прощаться с вами <br>" .
"Мы всегда будем ждать Вас в нашем уютном клубе.<br>" .
"Если возникли вопросы - свяжитесь с администратором сообщества<br>" ,
'user_id' => $userId,
'access_token' => $token,
'v' => '5.73'
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?' . $get_params);
//Возвращаем "ok" серверу Callback API
echo('ok');
break;
}
Начну с того, что у меня довольно часто возникали синтаксические ошибки в коде php из-за чего, при их исправлении, vk api начинал по несколько раз выполнять скрипт. Это очень мешало, поэтому я сделал промежуточный скрипт. Он принимает callback-вызов на себя, пересылает post-запрос на мой основной php-файл и отвечает ‘ok’, чтобы вк больше не ругался. Я точно не уверен, но казалось, что всё работало прекрасно. У меня чат-менеджер, выполняющий базовые команды по типу /kick /ban /info и т.п. Среди них есть команда, которая проходится по списку пользователей беседы и выводит в чат тех, у кого дата регистрации меньше определённого значения. Вот, собственно его код:
// ответить
$repl = $data->object->reply_message;
if ($repl) {
array_push($users, $repl->from_id);
}
// переслать
$repl = $data->object->fwd_messages;
if ($repl) {
foreach ($repl as $user) {
array_push($users, $user->from_id);
}
}
switch($cmd) {
case '/regdate':
case '+regdate':
if (empty($users)) { break; }
foreach ($users as $id) {
$numid = getUserInfo(substr($id, 1), 'id');
$str = file_get_contents("http://vk.com/foaf.php?id=$numid");
$res = preg_match('/<ya:created dc:date=".{25}"/>/', $str, $found);
if ($res !== 0) {
preg_match('/".{25}/', $found[0], $found);
$regdate = substr($found[0], 1);
// разница
$interval = date_diff((new DateTime($regdate)), (new DateTime(date('c'))));
$years = $interval->y;
$month = $interval->m;
$day = $interval->d;
date_default_timezone_set('UTC');
$date = (new DateTime($regdate))->getTimestamp();
$startTimeStamp = (new DateTime())->setTimestamp($date);
$detail = $startTimeStamp->format('m.d.Y в H:i');
send("@id$numid (Пользователь) зарегистрировался: $detailnС момента регистрации прошло " . convDays($years, $month, $day));
} else {
send("Невозможно получить информацию. Страница пользователя заблокирована.");
}
}
$executed = true;
break;
}
И тут у меня возникает проблема. ВК говорит: Error: Timeout was reached (ну и 5 повторов), хотя ‘ok’ ему отвечают при пересылке. Код выполняется 5 раз (что понятно). Я грешу на то, что код выполняется долго и из-за этого появляется ошибка. Пересылаю запрос я при помощи curl и скорее всего после отправки скрипт ждёт завершения работы того скрипта, хотя это под вопросом. Кстати, вот сама переадресация:
if (!isset($_REQUEST)) {
return;
}
$content = file_get_contents('php://input');
$data = json_decode($content);
include_once('../conf.php');
switch ($data->type) {
case 'confirmation':
echo $conf['callback_token'];
break;
default:
$url = "http://example.com/index.php";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo "ok";
break;
}
Напоследок хочу добавить, что в основном php-файле есть и другие команды, такие как /kick, /warn, отправка сообщений в беседу, получение даты регистрации конкретного человека и всё работает без нареканий, то есть технически моя конструкция работоспособна. Я не знаю, как мне быть с этим, поэтому нуждаюсь в советах старших
Перейти к содержанию
VK API Error Code – Коды ошибок Вконтакте
Код ошибки | Описание |
---|---|
1 | Произошла неизвестная ошибка. Попробуйте повторить запрос позднее. |
2 | Приложение выключено. Нужно включить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} или воспользоваться тестовым режимом (test_mode=1) |
3 | Передан неизвестный метод. Нужно проверить указано ли название вызываемого метода: https://vk.com/dev/methods. |
4 | Неверная подпись. |
5 | Авторизация пользователя не удалась. Следует убедиться, что используется верная схема авторизации. |
6 | Слишком много запросов в секунду. Нужно задать больший интервал между запросами или использовать метод execute. Узнать подробнее об ограничениях на частоту вызовов можно тут: https://vk.com/dev/api_requests. |
7 | Нет прав для выполнения этого действия. Следует проверить, получены ли необходимые права доступа при авторизации. Сделать это можно с помощью метода account.getAppPermissions. |
8 | Неверный запрос. Нужно проверить синтаксис запроса и список параметров, которые используются. |
9 | Слишком много однотипных действий. Нужно уменьшить число однотипных обращений. Для оптимизации работы можно использовать execute или JSONP. |
10 | Произошла внутренняя ошибка сервера. Попробуйте повторить запрос позже. |
11 | В тестовом режиме приложение должно быть выключено или пользователь должен быть залогинен. Следует выключить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} |
14 | Требуется ввод кода с картинки (Captcha). Процесс обработки этой ошибки подробно описан на странице. |
15 | Доступ запрещён. Следует убедиться, что используются верные идентификаторы, а также, что доступ к запрашиваемому контенту для текущего пользователя есть в полной версии сайта. |
16 | Требуется выполнение запросов по протоколу HTTPS, т.к. пользователь включил настройку, требующую работу через безопасное соединение. Во избежание возникновения этой ошибки, в Standalone-приложении можно предварительно проверять состояние этой настройки у пользователя методом account.getInfo. |
17 | Требуется валидация пользователя. Действие требует подтверждения — нужно перенаправить пользователя на служебную страницу для валидации. |
18 | Страница удалена или заблокирована. Страница пользователя была удалена или заблокирована |
20 | Данное действие запрещено для не Standalone приложений. Если ошибка появляется несмотря на то, что приложение имеет тип Standalone, следует убедиться, что при авторизации было использовано redirect_uri=https://oauth.vk.com/blank.html. Подробнее на странице: https://vk.com/dev/auth_mobile. |
21 | Данное действие разрешено только для Standalone и Open API приложений. |
23 | Метод был выключен. Ознакомиться со всеми актуальными методами ВК API, доступными в настоящий момент можно тут: https://vk.com/dev/methods. |
24 | Требуется подтверждение со стороны пользователя. |
27 | Ключ доступа сообщества недействителен. |
28 | Ключ доступа приложения недействителен. |
29 | Достигнут количественный лимит на вызов метода. Узнать подробнее об ограничениях на количество вызовов можно тут: https://vk.com/dev/data_limits |
30 | Профиль является приватным. Информация, которая запрашивается о профиле, недоступна с используемым ключом доступа |
33 | Еще не реализовано. |
100 | Один из необходимых параметров был не передан или неверен. Следует проверить список требуемых параметров и их формат на странице с описанием метода. |
101 | Неверный API ID приложения. Нужно найти приложение в списке администрируемых на странице, и указать в запросе правильный API_ID (идентификатор приложения). |
113 | Неверный идентификатор пользователя. Следует убедиться, что используется правильный идентификатор. Получить ID по короткому имени можно методом utils.resolveScreenName. |
150 | Неверный timestamp (метка времени). Актуальное значение можно получить методом utils.getServerTime. |
200 | Доступ к альбому запрещён. Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта. |
201 | Доступ к аудио запрещён. Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта. |
203 | Доступ к группе запрещён. Нужно убедиться, что текущий пользователь является участником или руководителем группы (для закрытых и частных групп и встреч). |
300 | Альбом переполнен. Перед продолжением работы нужно удалить лишние объекты из альбома или использовать другой альбом. |
500 | Действие запрещено. Вы должны включить переводы голосов в настройках приложения. Следует проверить настройки приложения: https://vk.com/editapp?id={Ваш API_ID}§ion=payments |
600 | Нет прав на выполнение данных операций с рекламным кабинетом. |
603 | Произошла ошибка при работе с рекламным кабинетом. |
3300 | Требуется рекапча. |
3301 | Требуется подтверждение телефона. |
3302 | Требуется подтверждение пароля. |
3303 | Требуется проверка приложения Otp. |
3304 | Требуется подтверждение по электронной почте. |
3305 | Требуется утвердить голоса. |
Описание:
Превышено количество запросов в сутки! Некоторые методы ВК имеют ограничение на количество запросов в сутки с одного аккаунта Решение проблемы*:
Смените аккаунт! Так же, для дальнейшего избежания этой ошибки рекомендуется увеличить интервал!
* Попробуйте проверить всю информацию при рассылке: тексты, подключенного пользователя, прикрепления, списки рассылки и прочее. Все эти факторы могут влиять на выдачу ошибок сайтом ВК и, соответственно, на корректную работоспособность программы.
Помните, что эти ошибки выдает программе сам сайт ВКонтакте и разработчик программы может не знать точную причину возникновеня ошибки, а вариант, предложеный выше может не сработать по разным причинам. В случае возникновения такой ошибки, Вы можете поискать варианты ее решения в интернете. Вы можете использовать следующий запрос в поисковой системе «Ошибка ВКонтакте № Rate limit reached как исправить» или другие подобные запросы на Ваш выбор.
Вариант(ы) решения этой проблемы относятся только к программе VK-Spam-Master. Вы можете скачать программу VK-Spam-Master чтобы получить возможность рассылать сообщения с минимальными потерями и подобными ошибками, и с максимальной поддержкой.
Выше предоставлен список возможных ошибок которые могут возникать у пользователей программы VK-Spam-Master во время использования функционала программы.
Результатом появления таких ошибок может быть все что угодно. К примеру, некоторые ошибки возникают из-за невнимательности пользователей. Как пример можно привести то, что пользователь не выбрал аккаунт ВКонтакте, неправильно ввел список групп для рассылки, не указал текст рассылки, и прочее.
Так же, есть ошибки, появление которых зависит по большей мере от самого сайта ВКонтакте. Например, ошибка, которая требует ввести капчу, ошибки, которые означают достижение пользователем лимитов в рассылке, или ошибка о запрете определенного действия.
На страницах этих ошибок (предоставленых выше) описаны способы их возникновения и возможные варианты их решения, если таковые имеются
Шпион VK за диалогами, лайками и комментариями, друзьями и подписчиками, стеной и онлайном любого пользователя.
Не работает шпион, пишет про ошибку #29, что делать?
Некоторые пользователи иногда сталкиваются с ошибкой #29, которую выдает им шпион. Давайте разберемся что это за ошибка, когда появляется и как от нее избавиться.
Когда ошибка появляется?
Ни для кого не секрет, что шпион использует данные с vk.com для формирования статистики, которую вы, собственно, и смотрите. К сожалению, VK.COM ограничивает колличество запросов со стороны пользователя и шпиона к своим методам. Если вы активно пользовались всеми шпионами, или добавили ОЧЕНЬ много целей, или забыли закрыть вкладку с включенным шпионом за диалогами — у вас может появится подобная ошибка.
В чем смысл ошибки?
Данная ошибка временно запрещает конкретно ВАМ (пользователю) получать информацию с сайта ВК, а значит перестают работать почти все шпионы, которые от этих данных зависимы.
Как избавиться?
Данная ошибка работает как временный бан. Обычно ВК запрещает вызывать определенные методы на время от 4 до 48 часов. Ускорить время бана вы не сможете, а вот увеличить время бана — сможете!
Поможет вам следующее:
‐ Нажмите «Выйти» на сайте шпиона, а потом вновь войдите.
‐ Удалите все ненужные цели из шпиона за друзьями (потом их можно будет добавить).
‐ Закройте все вкладки со шпионом, которые у вас могут быть открыты.
‐ По возможности не заходите на сайт шпиона в течение 8-24 часов.
Как проверить что все хорошо?
Мы сделали специальную страницу, где можно убедиться, что все работает..
Если все в порядке — вы увидите Ваш VK ID, Ваше имя и колличество друзей в ВК.
Ошибка vk_api.exceptions.ApiError: [29] Rate limit reached
Хотел попробовать сделать программу для автоматической смены статуса аккаунта в вк. Во время запуска программы выдает ошибку:
vk_api.exceptions.ApiError: [29] Rate limit reached
Ошибка связана со строкой vk.status.set(text = info) . Если ее изменить на vk.status.set(info) , то появляется эта ошибка:
TypeError: call() takes 1 positional argument but 2 were given
Не могу понять в чем проблема. В документации ничего не нашел на эту тему
Модератор: immortal
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз -
Поблагодарили:
2008 раз
Re: [Модуль] VK Bot
Pr0gra2Mer писал(а): ↑
Чт сен 20, 2018 1:50 pm
У меня доступ к серверу только по логину и паролю + проброска на 81 порт…
http://login:password@domen.dlinkddns.c … ck_api.php
в CallBack API пишет Недопустимый адрес…
или Сервер вернул неправильный ответ: Timeout was reachedи ThisComputer.vk_answer_id должен быть с id или просто цифры?
Версия API какую выбирать?
Ещё раз прочтите первое сообщение, и укажите без логина и пароля, но с портом. ID — просто цифры.
-
workpage
- Сообщения: 427
- Зарегистрирован: Чт авг 24, 2017 9:38 am
-
Благодарил (а):
51 раз -
Поблагодарили:
86 раз - Контактная информация:
Re: [Модуль] VK Bot
Сообщение
workpage » Чт сен 27, 2018 10:17 pm
Жду версии без открытии порта. Безопасность, она такая. Любит подставить по жизни.
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз -
Поблагодарили:
2008 раз
Re: [Модуль] VK Bot
Сообщение
nick7zmail » Пт сен 28, 2018 6:29 am
Да я пробовал тут пару выходных немного покапаться…че то у них протокол так замудрёно описан — капец…пример бы — я лучше в пхп коде разберусь чем в горе описательного текста =D.
-
Руслан
- Сообщения: 193
- Зарегистрирован: Чт дек 17, 2015 10:08 am
- Откуда: Уфа
-
Благодарил (а):
36 раз -
Поблагодарили:
14 раз
Re: [Модуль] VK Bot
Сообщение
Руслан » Пт сен 28, 2018 12:57 pm
не сочтите за наглость, попытаюсь объяснить, на сколько я понял метод User Long Poll API.
1. получаем APi ключ, со включенной опцией User Long Poll и версией 5.85
2. потом делаем запрос методом «messages.getLongPollServer»
Код: Выделить всё
https://api.vk.com/method/messages.getLongPollServer?lp_version=3&group_id=**********&access_token=**********************************************************************&v=5.85
3. получаем ответ
Код: Выделить всё
{
"response": {
"key": "****************************************",
"server": "imv4.vk.com/**********",
"ts": *********************
}
}
4. далее используя key, server и ts
Код: Выделить всё
https://{$server}?act=a_check&key={$key}&ts={$ts}&wait=25&mode=2&version=3
получаем и парсим сообщения.
Последний раз редактировалось Руслан Пт сен 28, 2018 8:21 pm, всего редактировалось 1 раз.
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз -
Поблагодарили:
2008 раз
Re: [Модуль] VK Bot
Сообщение
nick7zmail » Пт сен 28, 2018 2:28 pm
Это я всё делал. Тут проблема в том, что сообщения не парсить надо, а ловить какой то callback функцией, которую будет вызывать сервер. Для этого к нему подконнектиться, и ждать пока этот callback прилетит при новом сообщении…при чем в каком виде он прилетает я пока не понял…точнее он пока вообще не хочет прилетать. Может я что не так делаю. Я хз.
-
Руслан
- Сообщения: 193
- Зарегистрирован: Чт дек 17, 2015 10:08 am
- Откуда: Уфа
-
Благодарил (а):
36 раз -
Поблагодарили:
14 раз
Re: [Модуль] VK Bot
Сообщение
Руслан » Пт сен 28, 2018 8:41 pm
nick7zmail писал(а): ↑
Пт сен 28, 2018 2:28 pm
Для этого к нему подконнектиться, и ждать пока этот callback прилетит при новом сообщении..
а вот так
Длина массива updates может быть равна 0 (это означает, что за время wait новых событий не произошло).
не получится ? по моему с этим массивом тока можно работать используя «Флаги сообщений» периодически запрашивая, в цикле.
Про метод messages.getLongPollHistory написано, что позволяет синхронизировать сообщения. Если прочитано сообщение, то можно обновить new_pts и больше это сообщение не придет в запросе.
-
artemon25
- Сообщения: 112
- Зарегистрирован: Чт авг 25, 2016 10:33 pm
-
Благодарил (а):
15 раз -
Поблагодарили:
6 раз
Re: [Модуль] VK Bot
Сообщение
artemon25 » Чт фев 14, 2019 11:12 pm
правильно я понимаю что через din.dns работать не будет так как есть пароль и логин нужен открытый доступ на мжд
-
artemon25
- Сообщения: 112
- Зарегистрирован: Чт авг 25, 2016 10:33 pm
-
Благодарил (а):
15 раз -
Поблагодарили:
6 раз
Re: [Модуль] VK Bot
Сообщение
artemon25 » Пт фев 15, 2019 9:18 am
nick7zmail писал(а): ↑
Пт фев 15, 2019 6:46 am
Будет. Я же объяснял принцип действия в 1ом сообщении.
тогда наверное я что то сделал не так я создал бота и получил ключ редоктировал конфиг
define(‘CALLBACK_API_CONFIRMATION_TOKEN’, ‘ответ сервера’); ЧТО ЗДЕСЬ НАДО ПИСАТЬ?
define(‘VK_API_ACCESS_TOKEN’, ‘6786f3919d97540f05440fb67c04ec7609117bff675c3347be8103e’); //Ключ доступа сообщества
define(‘BOT_LOGS_DIRECTORY’, ‘C:_majordomohtdocscmsdebmes’); ПУТЬ НА ВИНДОВС ТОКОЙ ДОЛЖЕН БЫТЬ?
свойство создал ид вписал приходит Сервер вернул неправильный ответ
ПОХОЖЕ В КОНФИГЕ ЧТО ТО НАДО ДОПИСАТЬ
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз -
Поблагодарили:
2008 раз
Re: [Модуль] VK Bot
Сообщение
nick7zmail » Пт фев 15, 2019 9:29 am
nick7zmail писал(а): ↑
Сб сен 01, 2018 9:19 pm
Далее необходимо получить апи-ключ. Расписывать не буду, всё уже расписано за меня https://vk.com/dev/access_token (раздел Ключ доступа сообщества, самое простое — через настройки сообщества). Лично я выбрал все доступные опции при получении ключа, но можно ограничиться возможностями сообщений и прикрепления файлов. Далее залазим в настройки сообщества — Работа с API. Нас интересуют Ключи доступа (его мы получили ранее) и Callback API, а именно ответ который должен отправить сервер. Так же стоит поставить галочку в типах событий хотя бы на входящее сообщения.
туда надо вписать ответ, который должен вернуть сервер. Строка так и называется в настройках сообщества.