Интеграция обменника с агрегаторами курсов: API, трафик, конверсия

Обменник теряет заявки, когда курс на витрине отстаёт от рынка. Мы проектируем и настраиваем интеграцию с агрегаторами курсов под ключ: поток обращений растёт, ручная сверка курсов уходит, а запуск нового направления занимает дни вместо недель.
Часто задаваемые вопросы

Почему интеграция с агрегатором курсов срывает выдачу

Расхождение курса возникает на стыке двух разных представлений о цене. Агрегатор опрашивает источники со своей частотой и кэширует ответ на витрине, а обменник в момент исполнения пересчитывает курс по своему стакану. Между показом и подтверждением проходит от секунды до нескольких, и в волатильном рынке этого достаточно, чтобы расхождение курса вылезло за допустимый порог. Пользователь видит одну цифру, по факту соглашается на другую — и заявка либо отклоняется, либо уходит в поддержку.

Отклонённые заявки редко бывают следствием одной причины. Обычно это набор: лимит по резерву у партнёра, непройденная проверка, ограничение по региону и разные коды ошибок, которые агрегатор не разбирает. Он отдаёт общее «недоступно» на витрину, а клиент уходит к следующему обменнику, хотя сделка была технически возможна.

Задвоенные заявки — отдельный класс. При обрыве соединения клиент или сам агрегатор повторяет запрос, а если у пары нет согласованного ключа идемпотентности, одна операция превращается в две. Если обменник исполняет обе — получаем двойную сделку и разбирательство вместо обмена.

Пиковая нагрузка вскрывает всё сразу. Всплеск при резком движении рынка даёт десятки запросов в секунду, лимиты партнёра срабатывают, часть ответов приходит с таймаутом. Заявки зависают в неизвестном статусе, и никто не может сказать, исполнена она или нет. Разбираем, как это закрывается.

Что меняется в обменнике после подключения потока

Обновление курса перестаёт быть ручной операцией: агрегатор отдаёт поток по подписке, и витрина получает значение в пределах секунд после публикации у источника. Между ними — нормализация (агрегаторы считают курс по-разному: с комиссией сети, направлением сделки, минимальной суммой) и дельта-фильтр, который не дёргает витрину на шумовых колебаниях. Значение проходит проверку на разрыв: если курс ушёл за границу отклонения, публикации нет, а в мониторинг уходит событие.

Конверсия заявок растёт не от «лучшего курса», а от его согласованности. Клиент видит цифру, она фиксируется на время оформления и попадает в расчёт без расхождений — именно разница между витриной и фактическим исполнением давала основную долю брошенных форм. Автоматическое закрытие заявок держится на статусной модели: создание, резерв, оплата, подтверждение в сети, выдача. События от провайдера и узла обрабатываются идемпотентно, поэтому повтор не создаёт вторую заявку, а в ручной разбор уходят только случаи с несошедшейся суммой или молчанием источника.

Устойчивость к нагрузке — это предсказуемая деградация, а не «сервер мощнее». Заявки идут через очередь, лимиты по аккаунту и направлению проверяются на входе, а при недоступности агрегатора витрина работает по последнему валидному курсу с явным признаком устаревания. Пик трафика приводит к замедлению обработки, а не к двойным списаниям и потерянным заявкам.

После подключения смотрим на четыре величины: задержку от публикации курса до витрины, долю заявок, закрытых без оператора, долю брошенных форм и число отказов из-за расхождения курса. Это и есть измеримый сдвиг, который видно при сравнении до и после.

Способы подключения: от готового модуля до своего шлюза

У обменника есть три принципиально разных пути в агрегаторы курсов, и выбирают между ними не по популярности решения, а по объёму заявок и по тому, кто отвечает за расхождение котировок. Ниже — сравнение вариантов подключения с их ограничениями, чтобы схема совпадала с нагрузкой, а не наоборот.

Ключевое отличие схем в том, где живёт логика сопоставления курса и статуса заявки. В готовом модуле её держит площадка, в собственном шлюзе — вы, а у посредника по ликвидности она размазана между сторонами. От этого зависит, как быстро вы увидите расхождение и сможете ли откатить ошибочную котировку.

Вариант Когда подходит Ограничения схемы
Готовый модуль агрегатора Небольшой и средний поток заявок, нужен быстрый старт без своей инфраструктуры Логика курса и повторов запросов чужая: правила обновления задаёт площадка, тонкая настройка статусов недоступна
Собственный шлюз к API площадок Плотный поток и несколько агрегаторов сразу, нужен единый журнал заявок и идемпотентная обработка Требует своей очереди, контроля частоты запросов и дежурства на расхождениях
Посредник по ликвидности Нужен доступ к глубине рынка и быстрое расширение списка площадок Лишнее звено в цепочке: дольше подтверждение, сложнее разобрать инцидент по конкретной сделке
Прямые договорённости с площадкой Крупный объём и жёсткие требования к марже Долгие переговоры и отдельная интеграция под каждого партнёра

Ограничения схемы проявляются не на старте, а на пике нагрузки: когда площадка меняет формат ответа, часть заявок зависает в промежуточном статусе. Поэтому вариант подключения фиксируем до разработки — по числу площадок, ожидаемому потоку и тому, кто дежурит на расхождениях курса.

Этапы интеграции: от схемы обмена до передачи

Интеграция с агрегатором курсов — это не «подключить API и отдать курс». Агрегатор приводит поток, и расхождение между курсом на его витрине и фактическими условиями сделки в обменнике сразу бьёт по конверсии. Поэтому этапы интеграции выстроены так, что каждый заканчивается проверяемым результатом, а не отчётом.

  1. Аудит схемы обмена. Разбираем источники курса, приоритет между ними, ручные правки, округление и спред. На выходе — карта потока и список расхождений с фактическими условиями сделки.
  2. Проектирование схемы. Выбираем модель: опрос по расписанию или передача по событию. Задаём порядок источников, поведение при недоступности одного из них и правило, по которому курс считается устаревшим.
  3. Настройка и тестовый контур. Поднимаем изолированный контур с тестовой средой агрегатора: маппинг полей, обработка ошибок и лимитов, дедупликация повторов, журнал ответов для сверки.
  4. Нагрузочная проверка. Прогоняем профиль трафика агрегатора с всплесками и смотрим поведение при задержках: отдаём последний подтверждённый курс или помечаем его как неактуальный.
  5. Приёмочные сценарии. Сверяем курс по всем парам с эталоном, проверяем частичную недоступность источника и откат на прежнюю схему обмена.
  6. Переключение потока. Переводим трафик долями, сравнивая долю отказов и конверсию на новом и старом канале. Полное переключение — после сходимости метрик.
  7. Приёмка работ и передача. Отдаём схему, регламент дежурства и метрики, фиксируем, что считаем инцидентом и в каком порядке реагируем.

До переключения потока ни один этап не считается завершённым «на глаз»: у каждого есть критерий, по которому мы вместе принимаем результат.

Схемы обмена, доступы и регламенты передачи

Интеграция считается сданной не тогда, когда курсы приходят, а когда заказчик может менять состав источников, не читая исходный код. Поэтому к концу работ у вас остаётся комплект артефактов — его мы разбираем на приёмке вместе с вашими инженерами, а не отдаём архивом «на память».

  • Передача настроек. Рабочие конфигурации маппинга: какие поля ответа агрегатора идут в курс, порог расхождения между источниками, таймауты и число повторов запроса. К каждому параметру — комментарий, что изменится в поведении, если его сдвинуть.
  • Схема потоков. Путь запроса от клиента до фиксации курса: где кэш и сколько он живёт, где очередь, в какой момент подключается резервный источник и когда выдача блокируется. С точками отказа и тем, как каждая отрабатывает.
  • Правила доступа. Роли и области видимости: кто правит список источников и приоритет между ними, кто меняет пороги, кто видит только журнал. Ключи агрегаторов — в секрет-хранилище, с ротацией и без вывода в логи.
  • Документация. Описание полей и форматов ответа, справочник кодов ошибок по каждому источнику, порядок подключения нового агрегатора — от тестового ключа до включения в боевой отбор.
  • Регламент на сбой. Что делает система и что делают люди при недоступности источника, при расхождении курсов выше порога, при всплеске отказов. С порядком переключения, оповещения и обратного включения.
  • Журнал разбора. Трассировка по каждому отклонённому курсу: какой источник ответил, за какое время и по какому правилу значение не прошло. Без этого инцидент превращается в переписку с агрегатором.
  • Тестовый контур. Записанные ответы источников и сценарии сбоев, чтобы новые правила отбора проверялись до боевого трафика.

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

Кейс: как обменник перестал терять заявки из потока

Обменник получал заявки из трёх агрегаторов курсов, и каждая проходила через оператора: сверка курса, ручной перенос реквизитов, подтверждение сделки. На пике это 40+ заявок в час, и при отклонении курса на доли процента часть заявок уходила по старой цене или терялась в переписке — до 12% обращений в сутки. Время реакции на изменение курса доходило до 15 минут, за смену оператор делал около 60 ручных правок.

Мы подключили обменник к BestChange и остальным агрегаторам напрямую: единый сервис курсов собирает ставки, нормализует их и отдаёт в агрегатор, а входящая заявка создаётся автоматически с проверкой по внешнему идентификатору — дубли из разных источников не превращаются в две сделки. Ответ агрегатора может прийти с задержкой, поэтому заявка ставится в очередь, а курс фиксируется на момент подтверждения, а не на момент отправки.

Метрики до и после

Доля потерянных заявок — с 12% до 1,5%. Время реакции на изменение курса — с 15 минут до 20 секунд. Ручных правок за смену — с 60 до 4, и остались только спорные случаи и крупные суммы. На том же потоке посетителей оборот вырос примерно на треть: часть заявок просто перестала уходить мимо.

Отдельно закрыли рассинхрон: журнал расхождений по курсам и оповещение дежурного при отклонении выше порога. Кейс интеграции показал, что узкое место было не в привлечении трафика, а в ручном звене между агрегатором и ядром обменника.

Чем прямое подключение отличается от работы через посредника?

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

Контроль курса — первое расхождение. На прямом подключении спред, шаг округления и правила реакции на волатильность задаёт сам обменник: можно сжать маржу на популярном направлении и поднять там, где поток тонкий. Посредник такие настройки не отдаёт, он присылает одно значение, и всё, что между источником и этим значением, остаётся закрытым.

Скорость обновления зависит от того, сколько слоёв стоит между источником и витриной. Прямое подключение доносит изменение курса за один шаг, у посредника добавляется промежуточное звено и собственный буфер — на резком движении рынка расчёт на стороне клиента отстаёт, и заявка уходит по цене, которой уже нет.

Прозрачность отказов устроена похоже. При прямом подключении видно, какой источник не ответил, сколько раз и с какой задержкой, — сбой локализуется и закрывается точечно. Через посредника приходит ошибка верхнего уровня, и непонятно, проблема у него или у контрагента: диагностика растягивается, а клиент видит зависший расчёт.

Главная цена работы через посредника — зависимость от партнёра. Он меняет лимиты, состав направлений и правила округления в одностороннем порядке, а подключение может отвалиться без предупреждения. Поэтому на практике чаще берут гибрид: ключевые направления ведут напрямую, а редкие закрывают агрегатором как подстраховкой.

Частые вопросы по подключению и потоку заявок

Подключение к агрегаторам курсов почти всегда поднимает одни и те же сомнения — про посредника, скачки курса и судьбу уже идущего потока. Ниже — ответы по существу, без общих формулировок.

Мы работаем через посредника — переход будет болезненным?

Разрывать схему не нужно: прямое подключение поднимаем параллельно, и какое-то время оба канала работают одновременно. Сверяем курсы, лимиты и статусы заявок, а посредника отключаем только после совпадения данных — направление перестаёт терять на его наценке и на задержке в передаче курса.

Что происходит с заявками при резких скачках курса?

Курс агрегатора живёт ограниченное время, поэтому заявка фиксирует значение на момент подтверждения, а не на момент запроса. При движении рынка срабатывает порог отклонения: сделка не закрывается по устаревшей цене, а пересчитывается или возвращается клиенту.

Сколько занимает подключение и что с текущими заявками?

Типовой срок — от двух до четырёх недель: доступы и сопоставление валютных пар, затем тестовый контур и вывод в рабочий поток. Действующий канал всё это время принимает заявки как обычно, история и статусы остаются на месте, а новый контур вводим долей трафика.

Как отсекается мусорный поток?

На входе — правила по сумме, валютной паре и частоте обращений, на выходе — сверка с репутационными метками площадки. Заявка, не прошедшая порог, не доходит до оператора, и доля отменённых сделок падает в разы.

Обсудим задачу и вернёмся с оценкой и планом

Чтобы вернуться с оценкой работ и планом подключения, а не с общими формулировками, нам нужна картина вашей текущей схемы обмена с агрегаторами курсов. Чем точнее исходные данные, тем меньше допущений в смете и тем предсказуемее первый релиз.

  • Какие агрегаторы курсов уже подключены и по какой модели: переход по ссылке, получение курса через программный интерфейс, прямая передача заявок. Отметьте, где упираетесь в ограничения по частоте обращений.
  • Формат обмена: как приходят курсы, лимиты и направления, как часто обновляется кэш и что происходит на стороне обменника при рассинхроне данных с источником.
  • Объёмы потока: сколько направлений и валютных пар в работе, сколько запросов в минуту приходит в пике, какую долю составляют отказы на текущих связках.
  • Как считается конверсия: в какой точке фиксируется переход к вам и на каком шаге теряется основная часть потока.
  • Правила пересчёта: округление курса, комиссии, минимальные и максимальные суммы, порядок учёта при резком движении рынка.
  • Доступы и тестовые окружения агрегаторов, лимиты на запросы, порядок согласования выкатки на боевой контур.
  • Ответственные с обеих сторон и допустимое окно простоя при переключении трафика.

С этим набором наши инженеры собирают схему обмена, отмечают узкие места и определяют, что закрывается штатными средствами агрегатора, а что требует отдельного слоя. Опишите задачу в удобном виде — вернёмся с оценкой работ, планом подключения по этапам и списком рисков, которые стоит снять до старта.

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142