Обработка ошибок
VRP API Яндекс Маршрутизации возвращает JSON в ответ на все запросы и использует стандартные коды ответов.
В случае редких проблем на серверах Яндекса API ответит сообщением с кодом 50х.
Все ошибки, связанные с валидацией данных или бизнес-логикой, описаны в теле ответа с кодом 200 и должны обрабатываться пользователем.
Примечание
Ниже перечислены не все возможные ошибки, а отдельные примеры.
Ошибки сервиса
В редких ситуациях могут возникнуть проблемы со связью между вашим приложением и серверами Яндекса, а также кратковременные перебои в работе серверов Яндекса.
На случай проблем со связью рекомендуется настроить время ожидания для запросов и ответов в вашем клиенте. 10 секунд должно быть достаточно для сглаживания большей части возможных проблем.
При возникновении проблем на стороне серверов Яндекса вы можете получить ошибку HTTP 5xx. Обычно проблемы на стороне сервера исправляются автоматически через несколько секунд. Чтобы ваше приложение работало, но не создавало повышенной нагрузки на серверы, мы рекомендуем отправлять повторные запросы с растущей задержкой, по принципу экспоненциального затухания со случайной добавкой.
Общее правило:
delay = initial_delay * backoff_multiplier <sup >retry-1</sup> * (1 + jitter * rand(1))
, где:
initial_delay
— начальный интервал повтора;backoff_multiplier
— коэффициент экспоненциального затухания;retry
— номер попытки;jitter
— коэффициент при случайной добавке (рекомендуем значение от 0.1 до 0.3);rand(1)
— равномерно распределенная случайная величина в диапазоне от 0 до 1.
Например, для initial_delay
= 1s
, backoff_multiplier
= 2, jitter
= 0.1 получаем:
retry 1: 1s + 0.1 * rand(1)
retry 2: 2s + 0.1 * 2 * rand(1)
retry 3: 4s + 0.1 * 4 * rand(1)
retry 4: 8s + 0.1 * 8 * rand(1)
...
Когда интервал между запросами составит порядка 30–60 секунд, его можно больше не увеличивать. Количество повторных запросов не ограничено.
Ошибки, связанные со схемой запроса
Не указан обязательный параметр
Возможные ошибки:
Текст ошибки |
Рекомендации |
Error parsing JSON: either 'vehicle' or 'vehicles' is required, see request schema. |
Убедитесь, что в запросе определен обязательный параметр |
The required option 'time_zone' is not specified in the task. |
Убедитесь, что в запросе определено обязательное поле |
{subject}: maximal_stops={count}, but no penalties for extra stops. Please fill shift→penalty→stop_excess. |
Убедитесь, что в запросе определены обязательные штрафы |
{subject}: minimal_stops={count}, but no penalties for missing stops. Please fill shift→penalty→stop_lack. |
Убедитесь, что в запросе определены обязательные штрафы |
Параметр принимает недопустимое значение
Возможные ошибки:
Текст ошибки |
Рекомендации |
Invalid option 'time_zone' provided: '{timezone}'. |
Убедитесь, что параметр |
Invalid date format: {date}. |
Убедитесь, что значение параметра |
{subject}: negative sequence_order value. |
Убедитесь, что для всех заказов параметр |
{subject}: negative shipment volume. |
Убедитесь, что для всех заказов значения параметров |
All vehicle IDs should be either integers or strings. Found {id1} and {id2}. |
Убедитесь, что все значения |
Ошибки, связанные с логикой запроса
Используется неуникальный идентификатор
Возможные ошибки:
Текст ошибки |
Рекомендации |
Balance_key='{key}' was used more than once in 'balanced_groups' option. |
Убедитесь, что в запросе все идентификаторы групп |
At least two locations or depots have the same id: {id}. |
Убедитесь, что в запросе идентификаторы |
At least two locations have the same id: {location}. |
Убедитесь, что все идентификаторы |
At least two vehicles have the same ID {id}. |
Убедитесь, что все идентификаторы |
Указан идентификатор, который не определен
Возможные ошибки:
Текст ошибки |
Рекомендации |
balanced route group id '{group_id}' is not defined in 'balanced_groups' option. |
Убедитесь, что все идентификаторы групп, указанные в полях |
{subject}: cannot find shift id {shift_id}, specified in '{field}'. |
Убедитесь, что в запросе описаны все идентификаторы смен |
Cannot find location with id={id}. |
Убедитесь, что в запросе описаны все идентификаторы заказов |
Указанные параметры несовместимы
Возможные ошибки:
Текст ошибки |
Рекомендации |
Options 'depot' or 'depots' are mutually exclusive, only one of them should be specified. |
Объекты |
{subject}: fields 'hard_window' and 'hard_time_window' are mutually exclusive, only one of them should be specified. |
Поля |
{subject}: fields 'time_window' and 'time_windows' are mutually exclusive, only one of them should be specified. |
Поля |
Указанные значения параметров несовместимы
Возможные ошибки:
Текст ошибки |
Рекомендации |
{subject}: 'delivery_deadline' field defined, but only pickups can have it. {subject}: delivery_to_any field defined, but only pickups can have it. {subject}: delivery_to field defined, but only pickups can have it. |
Убедитесь, что параметры |
Location id {location} is used in more than one location group. Each location can be referenced by only one location group. |
Убедитесь, что каждый заказ входит только в одну группу |
Time window starts before date from 'options'. |
Убедитесь, что временные окна в запросе начинаются не раньше даты, указанной в |
{subject}: hard time window {window1} doesn't contain {window2}. |
Убедитесь, что все мягкие временные окна находятся в пределах жестких временных окон. |
Ошибки, связанные с решением
Примеры ошибок, связанных с решением, и рекомендации по их устранению см. в разделе Возможные причины нераспределенных заказов.