Chat API

REST-интерфейс для интеграции онлайн-чатов Resisto с вашими системами: CRM, helpdesk, ботами и аналитикой.

Аутентификация

Все запросы к Chat API требуют API-ключа. Ключ передаётся в заголовке X-API-Key.

GET /v1/live-chat/admin/dialogs
X-API-Key: sk_live_abc123...
Content-Type: application/json

Создайте API-ключ в Панели управления → Чаты → Chat API → API-ключи.

Храните ключ в безопасном месте. Он показывается только один раз при создании. Не передавайте его в клиентском коде.

Base URL

Все запросы отправляются на домен вашего пространства:

https://{space_name}.api.wispace.ru

Например, для пространства sigmamotors:

https://sigmamotors.api.wispace.ru/v1/live-chat/admin/dialogs

Ошибки и коды ответов

КодОписание
200Успешный запрос
201Ресурс создан
400Неверный запрос (ошибка валидации)
401Неверный или отсутствующий API-ключ
403Недостаточно прав (проверьте permissions ключа)
404Ресурс не найден
429Превышен rate limit
500Внутренняя ошибка сервера

Тело ошибки:

{
  "error": "invalid_api_key",
  "message": "API key is invalid or revoked"
}

Rate Limits

ТипЛимитОкно
Чтение (GET)100 запросов1 минута
Запись (POST/PUT/DELETE)30 запросов1 минута

Заголовки ответа:

ЗаголовокОписание
X-RateLimit-LimitМаксимум запросов в окне
X-RateLimit-RemainingОсталось запросов
X-RateLimit-ResetUnix timestamp сброса лимита

Диалоги

Получить список диалогов

GET /v1/live-chat/admin/dialogs?org_profile_id={id}
ПараметрТипОписание
org_profile_idstringID профиля организации (обязательный)
statestringФильтр: queue, operator, closed
pageintНомер страницы (по умолчанию 1)
limitintЗаписей на странице (по умолчанию 20, макс. 200)
// Ответ
{
  "dialogs": [
    {
      "id": "d1a2b3c4-...",
      "state": "operator",
      "guest_session": {
        "display_name": "Иван",
        "email": "ivan@example.com"
      },
      "created_at": "2026-03-15T10:00:00Z",
      "updated_at": "2026-03-15T10:05:00Z"
    }
  ],
  "total": 42,
  "page": 1,
  "limit": 20
}

Получить диалог по ID

GET /v1/live-chat/admin/dialogs/{dialog_id}

Закрыть диалог

POST /v1/live-chat/admin/dialogs/{dialog_id}/close

Принять диалог из очереди

POST /v1/live-chat/admin/dialogs/{dialog_id}/take

Сообщения

Получить сообщения диалога

GET /v1/live-chat/admin/dialogs/{dialog_id}/messages
// Ответ
{
  "messages": [
    {
      "id": "msg-uuid-...",
      "content": "Здравствуйте! Интересует Changan UNI-K.",
      "sender_type": "guest",
      "created_at": "2026-03-15T10:01:00Z"
    }
  ]
}

Отправить сообщение

POST /v1/live-chat/admin/dialogs/{dialog_id}/messages
// Тело запроса
{
  "content": "Добрый день! Да, UNI-K в наличии."
}
Требуется permission chats:write на API-ключе.

Webhooks

Подпишитесь на события чатов, чтобы получать уведомления на ваш сервер в реальном времени.

Создать подписку

POST /v1/live-chat/admin/webhooks?org_profile_id={id}
{
  "url": "https://your-server.com/webhook",
  "events": ["live_chat.message.created", "live_chat.dialog.closed"],
  "description": "CRM интеграция"
}

Список подписок

GET /v1/live-chat/admin/webhooks?org_profile_id={id}

Удалить подписку

DELETE /v1/live-chat/admin/webhooks/{webhook_id}?org_profile_id={id}

Тест подписки

POST /v1/live-chat/admin/webhooks/{webhook_id}/test?org_profile_id={id}

Верификация подписи

Каждый webhook-запрос подписывается секретом. Проверяйте заголовок X-Webhook-Signature:

# HMAC-SHA256(secret, body)
X-Webhook-Signature: sha256=abc123...
// Пример проверки (Node.js)
const crypto = require('crypto');

function verify(body, signature, secret) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret)
      .update(body)
      .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Типы событий

СобытиеОписание
live_chat.dialog.createdСоздан новый диалог
live_chat.dialog.updatedИзменён статус диалога
live_chat.dialog.closedДиалог закрыт
live_chat.message.createdНовое сообщение в диалоге
live_chat.operator.joinedОператор присоединился к диалогу
live_chat.guest.typingГость печатает

Формат webhook-запроса:

{
  "event": "live_chat.message.created",
  "event_id": "evt-uuid-...",
  "timestamp": "2026-03-15T10:02:00Z",
  "data": {
    "dialog_id": "d1a2b3c4-...",
    "message": {
      "id": "msg-uuid-...",
      "content": "Здравствуйте!",
      "sender_type": "guest"
    }
  }
}