Обработка ошибок

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.

Убедитесь, что в запросе определен обязательный параметр vehicle/vehicles.

The required option 'time_zone' is not specified in the task.

Убедитесь, что в запросе определено обязательное поле time_zone.

{subject}: maximal_stops={count}, but no penalties for extra stops. Please fill shift→penalty→stop_excess.

Убедитесь, что в запросе определены обязательные штрафы penalty.stop_excess.per_stop или penalty.stop_excess.fixed в дополнение к числу максимальных остановок.

{subject}: minimal_stops={count}, but no penalties for missing stops. Please fill shift→penalty→stop_lack.

Убедитесь, что в запросе определены обязательные штрафы penalty.stop_lack.per_stop или penalty.stop_lack.fixed в дополнение к числу минимальных остановок.

Параметр принимает недопустимое значение

Возможные ошибки:

Текст ошибки

Рекомендации

Invalid option 'time_zone' provided: '{timezone}'.

Убедитесь, что параметр options.time_zone принимает значение от -12 до 14 или является строкой, например, Europe/Moscow.

Invalid date format: {date}.

Убедитесь, что значение параметра options.date указано в формате YYYY-MM-DD.

{subject}: negative sequence_order value.

Убедитесь, что для всех заказов параметр location.sequence_order указан в виде целого неотрицательного числа.

{subject}: negative shipment volume.

Убедитесь, что для всех заказов значения параметров shipment_size.volume_cbm, shipment_size.volume.width_m, shipment_size.volume.depth_m, shipment_size.volume.height_m указаны в виде неотрицательного числа.

All vehicle IDs should be either integers or strings. Found {id1} and {id2}.

Убедитесь, что все значения vehicles.id имеют одинаковый тип данных: целое число или строка.

Ошибки, связанные с логикой запроса

Используется неуникальный идентификатор

Возможные ошибки:

Текст ошибки

Рекомендации

Balance_key='{key}' was used more than once in 'balanced_groups' option.

Убедитесь, что в запросе все идентификаторы групп vehicles.shifts.balanced_group_id уникальны.

At least two locations or depots have the same id: {id}.

Убедитесь, что в запросе идентификаторы id для складов и заказов не совпадают.

At least two locations have the same id: {location}.

Убедитесь, что все идентификаторы id в массиве locations уникальны.

At least two vehicles have the same ID {id}.

Убедитесь, что все идентификаторы id в массиве vehicles уникальны.

Указан идентификатор, который не определен

Возможные ошибки:

Текст ошибки

Рекомендации

balanced route group id '{group_id}' is not defined in 'balanced_groups' option.

Убедитесь, что все идентификаторы групп, указанные в полях vehicles.shifts.balanced_group_id, определены в options.balanced_groups.

{subject}: cannot find shift id {shift_id}, specified in '{field}'.

Убедитесь, что в запросе описаны все идентификаторы смен vehicle.shift_id, на которые есть ссылки.

Cannot find location with id={id}.

Убедитесь, что в запросе описаны все идентификаторы заказов vehicle.shift_id, на которые есть ссылки.

Указанные параметры несовместимы

Возможные ошибки:

Текст ошибки

Рекомендации

Options 'depot' or 'depots' are mutually exclusive, only one of them should be specified.

Объекты depot и depots — взаимоисключающие. Убедитесь, что в запросе используется только один из них.

{subject}: fields 'hard_window' and 'hard_time_window' are mutually exclusive, only one of them should be specified.

Поля hard_window и hard_time_window — взаимоисключающие. Убедитесь, что в запросе указано только одно из них.

{subject}: fields 'time_window' and 'time_windows' are mutually exclusive, only one of them should be specified.

Поля time_window и time_windows — взаимоисключающие. Убедитесь, что в запросе указано только одно из них.

Указанные значения параметров несовместимы

Возможные ошибки:

Текст ошибки

Рекомендации

{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.

Убедитесь, что параметры delivery_deadline, delivery_to_any, delivery_to указаны только для заказов типа pickup.

Location id {location} is used in more than one location group. Each location can be referenced by only one location group.

Убедитесь, что каждый заказ входит только в одну группу options.location_groups.

Time window starts before date from 'options'.

Убедитесь, что временные окна в запросе начинаются не раньше даты, указанной в options.

{subject}: hard time window {window1} doesn't contain {window2}.

Убедитесь, что все мягкие временные окна находятся в пределах жестких временных окон.

Ошибки, связанные с решением

Примеры ошибок, связанных с решением, и рекомендации по их устранению см. в разделе Возможные причины нераспределенных заказов.

Написать в службу поддержки