Обзор
Партнёрская интеграция Launch Pad позволяет вашей платформе встраивать планирование маршрутов, оптимизацию маршрутов и полевые операции, не создавая и не обслуживая базовые системы. Четыре уровня интеграции варьируются от простой глубокой ссылки до полной федерации удостоверений — все основаны на публичном REST API и стандартной аутентификации OAuth 2.0.
Каждый уровень работает самостоятельно. Большинство партнёров начинают с уровня 1 (запуск одним кликом) и добавляют более высокие уровни позже, по мере изменения потребностей. В разделах ниже описывается опыт ваших конечных пользователей, что вы получаете как бизнес, полный разбор всех четырёх уровней и подробный анализ уровня 1. Раздел Технические детали далее содержит техническую спецификацию.
Портал разработчика & справочник по API
Полный справочник REST API, шаблоны аутентификации и руководства по началу работы для публичного API Launch Pad. Обращайтесь к этому ресурсу, когда начнёте оценивать любой уровень выше уровня 1, или когда вам нужны детали на уровне конечных точек, выходящие за рамки этой страницы.
Перейти на портал разработчикаЧто видят ваши пользователи
На уровне 1 Launch Pad работает как сопутствующее приложение к вашему продукту. Он открывается в новом окне браузера, при этом вся настройка выполняется в фоновом режиме, так что пользователь может сразу приступить к работе.
Нет новой регистрации
Пользователи не создают аккаунт в Launch Pad. Их удостоверение берётся из вашего продукта.
Нет повторного входа
Пользователи входят в систему автоматически при открытии Launch Pad из вашего приложения.
Нет загрузки файлов для начала работы
Нужное поле и его граница уже загружены, когда пользователь попадает в систему. Работа с границами полей — один из главных барьеров при освоении внешних аграрных инструментов; схема «ссылка, вход, загрузка файла» уничтожает большую часть ценности, которую должна давать интеграция.
Обратный путь (поначалу вручную)
Когда пользователи заканчивают работу, они скачивают файл плана маршрута из Launch Pad и загружают его в ваш продукт. Естественное место для последующей автоматизации через Webhook push или интеграцию Custom push, повторно используя API-клиент, уже созданный для уровня 1.
Что получаете вы как партнёр
Создано для бизнеса и инженерных команд, которые хотят встраивать точную маршрутизацию, не строя инфраструктуру для её поддержки.
Одна административная учётная запись
Единственный администратор — это ваша идентичность внутри Launch Pad. Этот же пользователь хранит API-ключ для вызовов сервер–сервер и может входить в Launch Pad напрямую, чтобы проверять, аудировать или поддерживать клиента.
Консолидированные расчёты
Всё использование собирается под единым партнёрским биллинговым аккаунтом. Конечные пользователи никогда не видят балансы кредитов или счета внутри Launch Pad. Вы — плательщик; цена зависит от объёма и согласовывается индивидуально.
Сводное административное представление по клиентам
Ваш администратор видит использование, планы, границы и активность каждого пользователя по всем подключённым клиентам в одном месте. Это именно та прозрачность, которая нужна для поддержки клиентов и сверки расчётов.
Четыре уровня интеграции
Каждый уровень работает самостоятельно. Большинство партнёров начинают с уровня 1 и добавляют более высокие уровни позже, по мере изменения потребностей.
Уровень 1: запуск одним кликом
Пользователи открывают Launch Pad из вашего продукта без регистрации, входа или загрузки границы поля. Нужное поле уже отображается на экране. Готовый файл плана маршрута возвращается в ваш продукт через существующий поток импорта файлов.
Вы создаёте: API-вызовы для создания пользователя, запроса ссылки для запуска, передачи границы и переадресации браузера. Ваш существующий поток импорта файлов принимает возвращённый файл.
Уровень 2: интеграция через API
Полный программный доступ к компаниям, фермерам, хозяйствам, полям, границам, планам маршрутов и маршрутам через REST API. Уведомления о событиях при ключевых действиях.
Вы создаёте: слой синхронизации между вашим продуктом и Launch Pad. Приёмник webhook (предпочтительно) или запланированный опрос для обратного пути.
Уровень 3: встроенный интерфейс
Экраны Launch Pad отображаются внутри вашего продукта в iframe. Навигация скрыта, используются цвета вашего бренда.
Вы создаёте: хост для iframe. Небольшой обмен для передачи цветов вашего бренда.
Уровень 4: федерация удостоверений
«Войти через Launch Pad» (или наоборот) с использованием стандартного OpenID Connect. Согласие конечного пользователя и привязка аккаунтов управляются Launch Pad.
Вы создаёте: клиентскую библиотеку OpenID Connect и хранилище токенов.
Как уровень 1 устраняет трения
Зачем нужен уровень 1
Уровень 1 — это разница между настоящей интеграцией и обычной гиперссылкой. С точки зрения пользователя, планирование маршрутов является частью вашего продукта: он нажимает кнопку, выполняет задачу и возвращает результат.
Чтобы это работало, уровень 1 устраняет два наиболее болезненных момента при освоении внешнего аграрного инструмента:
- Настройка аккаунта (регистрация, вход, выбор компании). Ваш бэкенд создаёт и авторизует пользователя в фоновом режиме.
- Загрузка границы поля. Ваш бэкенд отправляет границу в Launch Pad через API до открытия окна, так что пользователь попадает сразу с нужным полем на экране.
Работа с границами полей — наиболее весомый из двух барьеров. Это один из главных препятствий при освоении внешних аграрных инструментов фермерами.
Модель аккаунта
Взаимодействие на уровне 1 организовано следующим образом:
Ваша идентичность в Launch Pad — единственный администратор
Этот пользователь хранит ваш API-ключ, имеет административный доступ ко всем созданным вами организациям клиентов, а также может входить в Launch Pad напрямую для проверки, аудита или поддержки клиента. Конечные пользователи этого пользователя не видят.
Каждый клиент становится отдельной организацией внутри Launch Pad
Наполняется конечными пользователями, которых вы создаёте. Конечный пользователь видит только свою организацию и никогда не видит данные клиентов других партнёров.
Расчёты консолидированы в вашем биллинговом аккаунте
Конечные пользователи никогда не видят балансы кредитов или счета внутри Launch Pad; плательщик — вы.
Сводное административное представление по клиентам
Ваш администратор видит использование по организациям клиентов, количество планов и границ, а также активность каждого пользователя — всё в одном месте. Это именно та прозрачность, которая нужна для поддержки клиентов и сверки расчётов.
Что пользователи видят в Launch Pad
Когда пользователь открывает Launch Pad через уровень 1, некоторые опции Launch Pad неприменимы и скрыты:
- Нет смены пароля, управления email или аккаунтом, нет регистрации. У пользователя нет пароля Launch Pad; вход осуществляется через ваш продукт. На экране смены пароля отображается сообщение «Пароль управляется [Партнёром]» — так же, как Launch Pad уже обрабатывает пользователей, входящих через John Deere, Trimble или CNH.
- Нет переключателя компании. Сессия привязана к единственной организации клиента на время визита.
- Выход заменён на «Вернуться к [Партнёру]», что закрывает вкладку или отправляет пользователя обратно на указанный вами URL, вместо того чтобы оставлять его на странице входа Launch Pad.
Главное рабочее меню (Планы, Планирование маршрутов, Оборудование, Сравнить) остаётся доступным, поскольку пользователям оно нужно для работы. Скрыты только опции удостоверения, расчётов, администрирования и управления аккаунтом.
Возврат плана маршрута
Когда пользователь заканчивает план маршрута в Launch Pad, результат нужно вернуть в ваш продукт. Доступны четыре варианта, и они работают поверх любого уровня. Push-варианты значительно предпочтительнее опроса (polling).
Скачать и загрузить вручную
Пользователь нажимает «Скачать» в Launch Pad, затем загружает файл в ваш продукт.
Лучше всего когда: это самый быстрый способ начать.
Webhook Push
Launch Pad отправляет каждый готовый план на указанный вами URL, подписанный HMAC.
Лучше всего когда: вам нужна доставка в реальном времени и вы можете разместить универсальный webhook-эндпоинт.
Custom Push
Verge создаёт единоразовую интеграцию, которая доставляет готовые планы непосредственно в ваш существующий API.
Лучше всего когда: у вас есть входящий API, принимающий учётные данные, но вы не хотите создавать приёмник webhook.
Polling Pull
Ваш бэкенд периодически запрашивает готовые планы из API Launch Pad.
Лучше всего когда: ни один push-вариант не применим. Частота запросов должна быть консервативной.
Обязательное требование для скачивания и загрузки вручную: ваш поток импорта должен принимать хотя бы один формат, который выдаёт Launch Pad (ISOXML, Shapefile, KML или партнёрские форматы; уточняется при согласовании). Без этого пересечения уровень 1 не обеспечит работоспособный сквозной поток.
Технические детали
Нетехнический читатель может остановиться здесь. Остальная часть страницы — это техническая спецификация: сквозной поток, анатомия URL переадресации и механика возврата.
Сквозной поток
Что происходит шаг за шагом, когда пользователь партнёра открывает Launch Pad:
sequenceDiagram
autonumber
participant YU as UI партнёра
participant YB as Бэкенд партнёра
participant LA as Launch Pad API
participant LU as Launch Pad UI
YU->>YB: пользователь нажимает «Открыть план маршрута»
note over YB,LA: Шаг 1: создать пользователя LP, если не существует
YB->>LA: POST /api/users (idempotent on externalUserId)
YB->>LA: POST /api/company-accesses (idempotent on user + org)
note over YB,LA: Шаг 2 (опционально): передать границу поля
YB->>LA: POST /api/vBoundary/upsert
note over YB,LA: Шаг 3: запросить код запуска
YB->>LA: POST /api/partner/launch ({ userId, companyId, returnUrl })
LA-->>YB: { code, expiresInSec: 600 }
YB-->>YU: 302 redirect to https://your-app.vergeag.com/launch?code=...
YU->>LU: браузер переходит на /launch?code=...
LU->>LA: POST /api/partner/launch/{code}/exchange
LA-->>LU: JWT + refresh token
note over LU: сохранить JWT в localStorage,
удалить код из URL,
перейти на returnUrl
Ключевые свойства
- Вы аутентифицируетесь сервер–сервер с долгосрочной учётной записью (API-ключ вашего администратора). Браузер никогда не видит API-ключ.
- Браузер видит только короткоживущий одноразовый непрозрачный код в URL (время жизни 10 минут, уничтожается при обмене).
- Эндпоинт обмена не требует входа; сам код является учётной записью. UI Launch Pad вызывает его, как только пользователь попадает на страницу.
- Launch Pad выдаёт обычную пользовательскую сессию (JWT + refresh token), сохраняет её в localStorage и перенаправляет пользователя на указанный вами URL.
Соответствие стандартам
Паттерн — это OAuth 2.0 Authorization Code Grant, где интерактивный экран согласия заменён серверным вызовом авторизации из вашего бэкенда. Современная терминология OAuth называет этот back-channel вариант Pre-Authorized Code Flow (введён в спецификации OpenID for Verifiable Credential Issuance).
Короткоживущий код в URL и back-channel обмен на JWT ведут себя точно так же, как в классическом OAuth; согласие устанавливается партнёрским соглашением, а не диалогом согласия при каждом запуске.
Как выглядит URL переадресации
Что получает браузер пользователя (одна строка в виде заголовка Location:):
https://your-app.vergeag.com/launch?code=lc_R3w9q-Kx7VtNm2bH8sLpYj4eQ6gZc1aXfU0dT5nMoP&returnUrl=%2Fpath-planning%2Fboundary%2Fb3f47e1c-8a02-4d59-9c6e-2f7a8b1d6e09
В расшифрованном для чтения виде:
| Компонент | Значение | Примечания |
|---|---|---|
| Источник | https://your-app.vergeag.com |
Verge предоставляет продакшн-источник при подключении. HTTPS обязателен; обычный HTTP отклоняется. |
| Путь | /launch |
Публичный маршрут без аутентификации. Предварительная сессия Launch Pad не требуется. |
code |
lc_R3w9q-... |
Префикс lc_ обозначает это значение как код запуска (в отличие от API-ключа LP- в логах). Полезная нагрузка — 32 байта криптографически случайных данных, закодированных в base64url. Одноразовый, TTL 10 минут, при выдаче привязан к одному пользователю, одной организации и одному returnUrl. |
returnUrl |
/path-planning/boundary/... |
Относительный путь Launch Pad, на который пользователь отправляется после выдачи JWT. Использует сегменты маршрута (например /path-planning/boundary/:id), чтобы граница загружалась автоматически. Должен начинаться с /. Абсолютные URL, протоколо-относительные URL //host и \ отклоняются при выдаче. |
Что делает UI Launch Pad при переходе
Вы это не реализуете; информация приведена для справки, чтобы вы понимали, что происходит у ваших пользователей между кликом и отображением поля:
- Читает
codeиreturnUrlиз строки запроса. - Обменивает код с Launch Pad на пользовательскую сессию.
- Авторизует пользователя в нужной организации клиента.
- Удаляет код из адресной строки, чтобы он не оставался в истории браузера.
- Перенаправляет пользователя на указанный вами
returnUrl.
Если code отсутствует, истёк или уже использован, пользователь попадает на страницу ошибки с просьбой вернуться в ваш продукт и попробовать снова.
Варианты возврата подробно
Скачать и загрузить вручную
Пользователь нажимает Скачать в Launch Pad, файл сохраняется на его устройстве, и он загружает его в ваш продукт через существующий поток импорта. По умолчанию для уровня 1. Никакой новой инфраструктуры с вашей стороны. Требует, чтобы ваш поток импорта принимал хотя бы один формат, который выдаёт Launch Pad (ISOXML, Shapefile, KML или партнёрские форматы).
Webhook Push
Launch Pad отправляет HTTPS POST на указанный вами URL. Каждый запрос содержит подпись HMAC-SHA256, вычисленную по общему секрету, который Verge выдаёт при подключении. Вы проверяете подпись, обрабатываете полезную нагрузку и отвечаете 2xx в течение 10 секунд.
Ключевые свойства
- Вы не аутентифицируетесь в Launch Pad для этого потока. Никакого OAuth-обмена, никакого JWT, никакого API-ключа Launch Pad с вашей стороны. Общий HMAC-секрет — это вся модель аутентификации.
- Один секрет на подписку, с возможностью ротации. Выдаётся один раз при подключении. Ротация использует окно перекрытия двух секретов, чтобы доставки не прерывались при переключении.
- Доставка файла масштабируется с размером полезной нагрузки. Небольшие артефакты (менее 1 МБ) передаются встроенно в base64 внутри тела webhook. Более крупные артефакты передаются как короткоживущий предподписанный URL загрузки, встроенный в тело; вы выполняете GET на этот URL напрямую, без учётных данных Launch Pad.
-
Доставка at-least-once. Launch Pad повторяет попытки с экспоненциальным отступом при ответах не-2xx и таймаутах. Каждое событие содержит заголовок
Verge-Webhook-Idдля дедупликации.
Что вы создаёте
- Публичный HTTPS-эндпоинт, принимающий POST. Никакого входа или сессии не требуется, кроме проверки подписи.
- Проверка HMAC с общим секретом (около десяти строк кода на любом языке).
- Проверка идемпотентности по
Verge-Webhook-Id, чтобы повторная попытка не обрабатывалась дважды. - Быстрый ответ 2xx. Обрабатывайте тяжёлую работу асинхронно, чтобы таймауты не вызывали шторм повторных попыток.
Что обеспечивает Verge
- Исходящий эмиттер и очередь повторных попыток.
- Обработка dead-letter для постоянно неуспешных доставок.
- Административный интерфейс для просмотра журналов доставки и воспроизведения неуспешных событий.
- Опубликованный список диапазонов исходящих IP, которые можно добавить в белый список на брандмауэре.
Custom Push (разработка под конкретного партнёра)
Если у вас уже есть аутентифицированный входящий API, но вы не хотите создавать универсальный приёмник webhook, Verge может написать единоразовую push-интеграцию, которая напрямую вызывает ваш API. Вы передаёте Verge безопасные учётные данные (предпочтительно API-ключ); эмиттер Verge аутентифицируется у вас при каждом push.
Этот вариант существует из-за асимметрии в направлении доверия. Для крупных FMIS-партнёров (John Deere, Trimble, CNH) конечные пользователи аутентифицируются в Launch Pad с помощью аккаунта OEM, поэтому Launch Pad уже хранит безопасные токены для отправки данных обратно. Launch Pad сегодня работает по этой модели OEM push. При интеграции уровня 1 направление доверия обратное (вы аутентифицируетесь в Launch Pad), поэтому у Launch Pad нет предварительно созданных учётных данных для вашей системы. Custom Push закрывает этот пробел с помощью специального соглашения.
Компромиссы
- Специальная разработка со стороны Verge. API каждого партнёра индивидуален. Это работа под конкретного партнёра, а не универсальная функция, и цена отражает это.
- Договорённость с доверенным партнёром. Вы передаёте Verge API-ключ (или эквивалентные безопасные учётные данные) и управляете этими учётными данными со своей стороны.
- Совместное сопровождение. Обе стороны поддерживают работу интеграции при изменениях API и ротации учётных данных.
Подходит, если у вас есть входящий API, вы не хотите создавать универсальный приёмник webhook и готовы финансировать работу под конкретного партнёра.
Polling Pull (использовать экономно; push предпочтительнее)
Если ни один push-вариант не применим, ваш бэкенд может периодически вызывать API Launch Pad (используя тот же X-API-KEY, уже выданный для провизионирования), чтобы получать планы маршрутов, опубликованные или обновлённые с момента последнего опроса.
Рассматривайте это как пакетное получение с итоговой согласованностью, а не как доставку в реальном времени. Типичная частота — раз в час или реже. Высокочастотный опрос, напоминающий busy-wait в ожидании действия пользователя, не поддерживается и может быть ограничен по частоте. Непрерывный опрос в течение нескольких часов в ожидании единственного пользовательского события — это именно тот шаблон, для которого этот вариант не предназначен.
- Что вы создаёте: цикл опроса с консервативной частотой, дедупликацией по ID плана маршрута и импортом в ваше файловое хранилище.
- Компромисс: значительная задержка между действием пользователя и получением данных; дополнительная нагрузка на API Launch Pad.
- Push значительно предпочтительнее. Используйте опрос только когда ни Webhook push, ни Custom push невозможны.
Более высокие уровни
Эта страница — полный справочник по уровню 1. Для более высоких уровней:
Уровень 2 (интеграция через API)
Публичная схема API доступна на vergeag.com/developers. Когда уровень 1 настроен, вы можете расширить интеграцию, вызывая больше API напрямую, используя тот же API-ключ, который у вас уже есть.
Уровень 3 (встроенный интерфейс)
Обратитесь в Verge для оценки объёма работ. Встроенный интерфейс включает соглашения о брендовых токенах, настройку iframe-хоста и индивидуальную сборку интерфейса для каждого партнёра. Самообслуживание недоступно.
Уровень 4 (федерация удостоверений)
Обратитесь в Verge для оценки объёма работ. Федерация удостоверений требует стандартной регистрации OIDC-клиента и соглашения о федерации между обеими сторонами.