Перейти к основному содержимому

WebSocket-ленты

Intotes предоставляет три WebSocket-эндпоинта для потоковой передачи данных в реальном времени. Используйте их для поддержания актуальности интерфейса без опроса.

Все пути WebSocket указаны относительно базового URL /api/v1/.


Протокол подключения

Все три ленты используют стандартное WebSocket-рукопожатие для обновления:

  1. Откройте WebSocket-соединение по URL эндпоинта.
  2. Сервер выполняет HTTP 101 upgrade.
  3. При успешном подключении сервер отправляет начальное сообщение с недавней историей (чтобы ваш интерфейс мог отрисоваться немедленно без отдельного REST-вызова).
  4. Последующие сообщения поступают по мере возникновения событий.

Keep-Alive

  • Сервер отправляет ping-фреймы каждые 50 секунд.
  • Клиент должен ответить pong-фреймом (большинство WebSocket-библиотек обрабатывают это автоматически).
  • Сервер применяет дедлайн чтения 60 секунд. Если pong не получен в этом окне, соединение закрывается.

Лимиты

ЛимитЗначение
Максимум подключений на хаб10,000
Максимальный размер сообщения (лента сделок)512 байт
Максимальный размер сообщения (лента графиков / активов)128 байт

1. Лента сделок в реальном времени

Поток всех сделок, исполненных на платформе в реальном времени.

GET /api/v1/ws/trades

Формат сообщения

{
"type": "trade",
"trade": {
"amount": 50000,
"name": "alice",
"token": "Yes",
"event": "Will ETH hit $5k?",
"market": "mkt_001",
"avatar": "https://cdn.intots.com/avatars/alice.jpg"
}
}
ПолеТипОписание
typestringВсегда "trade".
trade.amountintegerРазмер сделки в копейках.
trade.namestringОтображаемое имя трейдера.
trade.tokenstringТоргуемый токен исхода (например, "Yes", "No").
trade.eventstringНазвание события, к которому относится сделка.
trade.marketstringID рынка.
trade.avatarstringURL аватара трейдера.

Сценарии использования

  • Глобальный тикер активности ("Алиса только что купила 500 акций Yes на ...").
  • Панели мониторинга объемов.
  • Индикаторы социального подтверждения на страницах событий.

Пример

const ws = new WebSocket('wss://api.intots.com/api/v1/ws/trades');

ws.onopen = () => {
console.log('Connected to trades feed');
};

ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'trade') {
const { name, amount, token, event: eventName } = msg.trade;
console.log(`${name} traded ${amount / 100} on "${token}" in "${eventName}"`);
}
};

2. Лента графиков событий

Обновления цен в реальном времени для конкретного события. Подписка по ID события.

GET /api/v1/ws/events/{event_id}/chart

Параметры пути

ПараметрТипОписание
event_idstringСобытие для подписки.

Формат сообщения

{
"type": "chart_update",
"timestamp": "2026-03-15T14:30:05Z",
"ratios": {
"Yes": 6450,
"No": 3550
}
}
ПолеТипОписание
typestringВсегда "chart_update".
timestampstringВременная метка обновления ISO 8601.
ratiosobjectТекущая цена для каждого исхода по шкале 0--10000.

Сценарии использования

  • Графики цен с обновлением в реальном времени на страницах деталей событий.
  • Отображение вероятностей в реальном времени.
  • Комбинирование с историческими данными графиков для плавного отображения.

Пример

const eventId = 'evt_abc123';
const ws = new WebSocket(`wss://api.intots.com/api/v1/ws/events/${eventId}/chart`);

ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'chart_update') {
updateChart(msg.timestamp, msg.ratios);
}
};

3. Лента цен активов

Обновления цен криптоактивов в реальном времени. Подписка по торговому символу.

GET /api/v1/ws/assets/{symbol}/price

Параметры пути

ПараметрТипОписание
symbolstringСимвол торговой пары актива (например, BTCUSDT, ETHUSDT, SOLUSDT).

Формат сообщения

{
"type": "price_update",
"symbol": "BTCUSDT",
"price": 8734521
}
ПолеТипОписание
typestringВсегда "price_update".
symbolstringСимвол актива для этого обновления.
priceintegerТекущая цена актива в копейках.

Сценарии использования

  • Тикеры криптовалютных цен в реальном времени на страницах событий для криптовалютных циклических событий.
  • Ценовые оповещения и мониторинг пороговых значений.
  • Отображение текущих справочных цен рядом с прогнозными рынками.

Пример

const ws = new WebSocket('wss://api.intots.com/api/v1/ws/assets/BTCUSDT/price');

ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === 'price_update') {
console.log(`${msg.symbol}: $${(msg.price / 100).toFixed(2)}`);
}
};

Стратегия переподключения

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

function connect(url, onMessage) {
const ws = new WebSocket(url);
let reconnectDelay = 1000;

ws.onopen = () => {
reconnectDelay = 1000; // Сброс при успешном подключении
};

ws.onmessage = onMessage;

ws.onclose = () => {
setTimeout(() => {
reconnectDelay = Math.min(reconnectDelay * 2, 30000); // Экспоненциальная задержка, макс 30с
connect(url, onMessage);
}, reconnectDelay);
};

return ws;
}

Сводка

ЛентаЭндпоинтТип сообщенияМакс. размер сообщения
Сделки/api/v1/ws/tradestrade512 байт
График событий/api/v1/ws/events/{event_id}/chartchart_update128 байт
Цена актива/api/v1/ws/assets/{symbol}/priceprice_update128 байт

Все ленты используют один и тот же протокол подключения: стандартный WebSocket upgrade, серверный ping каждые 50с, дедлайн чтения 60с и максимум 10,000 одновременных подключений на хаб.