Implement webhooks as in Market App Desktop
Add webhooks, similar to those in the Market App Desktop for developers, to avoid constantly polling the trade history and ensure timely responses to status changes. As a last resort, provide an API endpoint for the dashboard with counters, similar to what the client already has. This request will allow us to determine in advance whether there are any new events.
Comments1
qulery
Apr 19
Проблема более фундаментальная, чем может показаться, и значительно повышает порог входа для новых трейдеров.
Текущие эндпоинты, такие как
history,operation-history,items- это всё исторический технический долг, накопившийся по мере адаптации маркета под внешние изменения в Steam.Сейчас отсутствует единый стабильный канал для быстрого реагирования на продажи для разработчиков, а также для качественной актуализации статусов.
Те, кто работают с большими объёмами, а также отслеживают начисления на баланс или другие коллизии, обычно реализуют собственную базу данных со всеми трейдами и актуализируют статусы для быстрого анализа и сбора статистики.
Сейчас существует 2 socket-канала, которые могут публиковать информацию о событии успешной покупки/продажи:
auth ws, который предоставляет API, иclient ws- socket-соединение активной сессии сайта.Хотя эти каналы и предоставляют информацию, разработчики часто могут пропускать события продаж/покупок из-за использования прокси или фризов в сети. Большинство прокси-провайдеров ограничивают максимальное время соединения до 5 минут. Хотя реализация автоматического переподключения не является проблемой, именно в этот момент событие успешной покупки/продажи может быть потеряно.
Также не существует единого эндпоинта, который мог бы одновременно предоставлять информацию как об истории покупок/продаж, так и о статусе сделки. Самое главное - не только узнать, что мы купили предмет, но и в правильный момент понять, что определённый аккаунт нужно вывести в polling для сканирования входящих сделок в Steam.
Нельзя обойтись только эндпоинтом
items, так как он не содержит сделок, которые завершились ошибкой. Однако для создания устойчивой системы мониторинга сделок необходимо знать о каждой сделке, даже ошибочной. Как вариант - использование эндпоинтовhistory/operation-history, которые предоставляют информацию о каждой сделке, однако не предоставляют критически важный статус сделки: “товар можно принять” или “ожидается получение товара покупателем”.Поэтому часто в рамках реализации автоматизированных систем просто невозможно считать
wsисточником истины, из-за чего приходится постоянно polling-ом запрашивать эндпоинтoperation-historyдля сканирования новых сделок, и эндпоинтitems- когда есть трейды с неконечным статусом.Если бы
history/operation-historyсодержал статус сделки, это позволило бы избавиться от лишнего запроса к эндпоинтуitems.Лучшее, что можно было бы улучшить на сайте, чтобы полностью избавиться от зависимости от
history/operation-history/items/trades- это внедрение webhooks, которые со стороны маркета гарантировали бы доставку сообщения до трейд-сервера в течении 5-10 минут.Необходима чёткая задокументированная декларация статусов сделок и общий контракт оффера и его статусов:
Предмет продан/куплен
Ожидание, когда продавец передаст товар
Ожидание, когда покупатель получит товар
Ошибка по
causerSeller / BuyerУспешная сделка с переходом в Trade Protection
Полное успешное завершение сделки через 7–8 дней
Оффер получил reverse по
causerSeller / BuyerДостаточно следующих данных в событии:
Цена покупки
Цена, которую получит продавец
Валюта покупки
Название товара
market_hash_nameasset_idoffer_idОпционально, если будет несложно добавить:
steam_trade_id- для активной сделки, которую должен принять покупательmeta{}.seller_currency- Нативная валюта товара продавца (опционально)В случае, если реализация webhooks сейчас окажется слишком сложной для маркета, можно обойтись следующими минимальными изменениями:
Добавить статус сделки в рамках
history/operation-history, чтобы избавиться от необходимости использоватьitemsРеализовать Dashboard в рамках API, аналог клиентского
me.dashboard, который позволит идентифицировать изменения в счётчиках и не запрашиватьhistory/operation-historyпостоянно, пока не будет реальных изменений.Однако, учитывая, что подобная практика уже используется в Desktop Market App, реализация гарантии доставки может быть хорошим решением.
При консервативном опросе истории акаунта 1 раз на минуту, это экономия в ~120k / hour для 2k акаунтов.