Аутентификация
Все запросы к 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-Reset | Unix timestamp сброса лимита |
Диалоги
Получить список диалогов
GET
/v1/live-chat/admin/dialogs?org_profile_id={id}
| Параметр | Тип | Описание |
|---|---|---|
org_profile_id | string | ID профиля организации (обязательный) |
state | string | Фильтр: queue, operator, closed |
page | int | Номер страницы (по умолчанию 1) |
limit | int | Записей на странице (по умолчанию 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"
}
}
}