Чат-панель
Сообщения от имени аккаунтов панели, аккаунты, опросы, предсказания и награды канала, ссылка общего доступа.
Чат-панель — это аккаунты сервиса, подключённые к чату канала, от имени которых пишете вы. Через API с ней можно делать всё то же, что в панели: писать с выбранного аккаунта или по очереди со всех, следить за аккаунтами и подписывать их на канал, голосовать в опросах и ставить баллы канала, выдавать ссылку модератору.
Чтение состояния доступно любому ключу. Для действий нужно право chat_panel; ссылку общего доступа тоже выдаёт только ключ с ним.
Заказать и дождаться подключения
Панель заказывается так же, как другие услуги, — POST /orders/chat-panel, см. Заказ услуг со счёта. Id заказа — он же id панели во всех запросах ниже: cp_8.
Аккаунты подключаются к чату в фоне, первые минуты после заказа. Пока это идёт, status панели — connecting, а connecting показывает ход; писать уже можно с подключённых аккаунтов.
/chat-panels/cp_8curl https://api.skystream.su/app/v1/chat-panels/cp_8 \ -H "Authorization: Bearer $API_KEY"API_KEY{ "id": "cp_8", "platform": "twitch", "channel": "example_channel", "status": "ready", "ends_at": "2026-10-05T20:39:20.000Z", "auto_switch": true, "current_account": "fox_runner", "total_sent": 25, "connecting": null, "channel_restrictions": { "followers_only": true, "followers_only_minutes": 0, "subs_only": false, "emote_only": false, "slow_seconds": 0, "account_age_minutes": null }, "chatroom_id": null, "is_live": null, "last_send_error": null, "accounts": [ { "login": "fox_runner", "state": "ready", "restriction": null, "restricted_until": null, "messages_sent": 14, "current": true, "pinned": true }, { "login": "pixel_mira", "state": "restricted", "restriction": "followers_only", "restricted_until": null, "messages_sent": 0, "current": false, "pinned": false } ]}Состояние меняется само: аккаунты отваливаются, получают ограничения и заменяются. Панель в браузере перечитывает его раз в 3 секунды, пока идёт подключение, и раз в 15 секунд потом — так же стоит делать интеграции. Событий и вебхуков по чат-панели нет.
status | Что значит |
|---|---|
connecting | Аккаунты подключаются; писать можно с подключённых |
ready | Подключение закончено |
paused | Twitch: канал не в эфире, аккаунты отключены и подключатся сами с началом эфира. Список accounts в это время пуст, а отправка и любой запрос с логином аккаунта отклоняются с ошибкой 409 channel_offline |
Аккаунты
Аккаунт панели адресуется логином: и в ответах, и в запросах (account, /accounts/{login}). Аккаунт, который не может писать по своей вине, панель заменяет сама, и в списке появляется другой логин. Запрос с логином, которого уже нет, отклоняется с ошибкой 404 account_not_in_panel — перечитайте состояние.
state | Что значит | Что делать |
|---|---|---|
ready | Может писать | — |
restricted | Мешает режим канала: только для фолловеров или подписчиков | Подписать аккаунт на канал или дождаться смены режима |
unusable | Бан, проверка, скрытие сообщений — проблема самого аккаунта | Ничего: панель заменит его |
disconnected | Нет связи с чатом | Обычно проходит само |
Причина ограничения — в restriction, коды — в разделе Почему сообщение не ушло.
Подробности об аккаунтах — подписку на канал, баллы канала, значки, писал ли аккаунт в этот чат — отдаёт отдельный запрос, по параметру include:
/chat-panels/cp_8/accounts?include=following%2Cpointscurl "https://api.skystream.su/app/v1/chat-panels/cp_8/accounts?include=following%2Cpoints" \ -H "Authorization: Bearer $API_KEY"API_KEYКаждая подробность — запрос к площадке на каждый аккаунт, поэтому ответ может идти десятки секунд, а сам запрос считается по пределу частоты изменений. Просите только нужное. Баллы, значки и has_chatted есть только у Twitch.
Подписать на канал
Если канал в режиме «только для фолловеров», аккаунт с restriction: followers_only нужно подписать на канал:
/chat-panels/cp_8/accounts/pixel_mira/followcurl https://api.skystream.su/app/v1/chat-panels/cp_8/accounts/pixel_mira/follow \ -X POST \ -H "Authorization: Bearer $API_KEY"API_KEY{ "account": "pixel_mira", "status": "following"}Подписка идёт через площадку и может занять больше минуты, а API ждёт не дольше 25 секунд. Если не дождался, ответ — status: pending: подписка продолжается, итог проверьте позже запросом GET /chat-panels/cp_8/accounts?include=following. failed — площадка не дала подписаться; если аккаунт непригоден, панель заменит его сама, иначе повторите запрос позже.
Закрепить
Закреплённые аккаунты панель показывает первыми. PUT /chat-panels/{id}/accounts/{login}/pin закрепляет, DELETE того же адреса — снимает. Порядок отправки закрепление не меняет.
Отправить сообщение
/chat-panels/cp_8/messagescurl https://api.skystream.su/app/v1/chat-panels/cp_8/messages \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Привет, чат!" }'API_KEY{ "sent": true, "account": "fox_runner", "message_id": null, "reason": null, "retry_after_ms": null, "current_account": "night_owl_77", "total_sent": 26}Без account сообщение уходит с текущего аккаунта (current_account), с account — с указанного. Если включена авто-ротация, после каждой отправки текущим становится следующий за отправителем годный аккаунт — так сообщения без account идут от разных людей. Новый текущий аккаунт — в current_account ответа.
Текст — до 500 знаков; переводы строк заменяются пробелами. Чтобы ответить на сообщение в чате, передайте его id в reply_to.
Повтор отправляет второй раз
Сообщение — не идемпотентное действие: повтор запроса отправит его снова. Чтобы повтор после обрыва связи был безопасен, передавайте заголовок Idempotency-Key — см. Идемпотентность.
Со всех аккаунтов сразу — POST /chat-panels/{id}/broadcast с тем же text. Ответ — итог по каждому аккаунту.
Почему сообщение не ушло
Если площадка не приняла сообщение или писать некому, ответ — тоже 200, но с sent: false и причиной в reason. Это исход отправки, а не ошибка запроса: аккаунт уже назван, и ротация уже сдвинута.
{ "sent": false, "account": "fox_runner", "reason": "msg_duplicate"}reason | Что значит |
|---|---|
followers_only, subs_only | Канал пускает в чат только фолловеров или подписчиков. Подпишите аккаунты |
msg_emoteonly | Канал в режиме «только эмодзи» |
channel_side | Сообщения скрывает фильтр канала — от любого аккаунта |
msg_duplicate, msg_r9k | Тот же текст недавно уже был. Измените текст |
msg_ratelimit, msg_slowmode | Слишком часто. У Kick в медленном чате retry_after_ms — сколько ждать |
msg_rejected | Сообщение задержал AutoMod или модерация канала |
msg_too_long | Текст длиннее, чем принимает площадка |
reply_not_found | Сообщение, на которое ответ, уже удалено |
banned, msg_timedout, requires_challenge, phone_required, email_required, token_invalid, account_too_new, shadow_dropped | Проблема аккаунта. Панель заменит его; повторите с другого |
blocked, network | Сбой связи с площадкой. Повторите позже |
no_usable_accounts | Писать некому: все аккаунты ограничены или отключены |
account_unavailable | Выбранный аккаунт сейчас не может писать, а замены ещё нет |
unknown | Причина, которой нет в списке. Новые причины могут появляться — обрабатывайте неизвестные как unknown |
Twitch сообщает о части отказов (повтор, лимит, AutoMod) уже после ответа на отправку — такая отправка вернула sent: true. Последний такой отказ виден в last_send_error состояния панели: время, аккаунт и причина.
Читать чат
API не пересказывает чат: панель в браузере читает его прямо у площадки, и интеграции стоит делать так же — это быстрее любого опроса.
- Twitch — IRC по WebSocket
wss://irc-ws.chat.twitch.tv:443без авторизации:PASS SCHMOOPIIE,NICK justinfan12345(любое число),CAP REQ :twitch.tv/tags twitch.tv/commands,JOIN #<канал>. Тегidу сообщения — то, что передаётся вreply_to. - Kick — Pusher: ключ
32cbd69e4b950bf97679, кластерus2, каналchatrooms.<chatroom_id>.v2, событиеApp\Events\ChatMessageEvent.chatroom_id— в состоянии панели. Последние сообщения отдаёт и API:
/chat-panels/cp_9/messages?limit=50curl "https://api.skystream.su/app/v1/chat-panels/cp_9/messages?limit=50" \ -H "Authorization: Bearer $API_KEY"API_KEYУ Twitch истории через API нет: запрос отклоняется с ошибкой 400 platform_not_supported.
Опросы, предсказания и награды
Только у Twitch. Всё, что тратит баллы канала, необратимо.
Опрос
GET /chat-panels/{id}/poll — опрос канала со счётом и голоса аккаунтов панели. Голосовать:
/chat-panels/cp_8/poll/votescurl https://api.skystream.su/app/v1/chat-panels/cp_8/poll/votes \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "choice_id": "c1a7" }'API_KEYГолосуют аккаунты, которые в этом опросе ещё не голосовали, — повтор запроса лишних голосов не даст. count ограничивает число аккаунтов, points — потратить баллы канала на дополнительные голоса (бесплатный голос у аккаунта один на опрос). Раздать голоса по нескольким вариантам — split вместо choice_id:
/chat-panels/cp_8/poll/votescurl https://api.skystream.su/app/v1/chat-panels/cp_8/poll/votes \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "split": [ { "choice_id": "c1a7", "count": 2 }, { "choice_id": "c2b4", "count": 1 } ], "spread_seconds": 60 }'API_KEYПредсказание
GET /chat-panels/{id}/prediction — предсказание канала и ставки панели. Ставить:
/chat-panels/cp_8/prediction/betscurl https://api.skystream.su/app/v1/chat-panels/cp_8/prediction/bets \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "outcome_id": "o-blue", "points": 1000 }'API_KEYСтавка — points с каждого аккаунта; с points_min — случайная от points_min до points; all_in: true — весь баланс. Аккаунт с меньшим балансом ставит, сколько есть; без баллов — пропускается. Аккаунт, уже стоящий на этом исходе, добавляет к ставке, поэтому повтор запроса удвоит ставки — передавайте Idempotency-Key.
Растяжка во времени
Голоса и ставки можно растянуть: spread_seconds — до 600 секунд, но не дольше, чем осталось до закрытия. Тогда ответ приходит сразу и несёт раздачу в sending, а голоса и ставки уходят в фоне вразбивку. Ход раздачи — в sending ответов GET .../poll и GET .../prediction. Остановить — POST .../poll/votes/cancel и POST .../prediction/bets/cancel: уже отданное остаётся. Ставки по нескольким исходам (split) всегда идут в фоне.
Одновременно по панели идёт одна раздача голосов и одна — ставок; вторая отклоняется с ошибкой 409 sending_in_progress.
Награды
GET /chat-panels/{id}/rewards — награды канала за баллы. Купить с аккаунта:
/chat-panels/cp_8/rewards/9f1c2e4a-1b7d-4c55-9a43-2f0e6c1d8b21/redeemcurl https://api.skystream.su/app/v1/chat-panels/cp_8/rewards/9f1c2e4a-1b7d-4c55-9a43-2f0e6c1d8b21/redeem \ -X POST \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "account": "fox_runner", "text": "Daft Punk — One More Time" }'API_KEYЕсли награда требует текст (text_required), без text запрос отклоняется. Баллы аккаунтов — GET /chat-panels/{id}/accounts?include=points.
Ссылка общего доступа
Ссылка даёт открыть панель модератору или помощнику:
/chat-panels/cp_8/share-linkcurl https://api.skystream.su/app/v1/chat-panels/cp_8/share-link \ -H "Authorization: Bearer $API_KEY"API_KEYСсылка — как пароль
Открывший ссылку с входом в панель управляет чат-панелью полностью: пишет от имени аккаунтов, голосует, тратит баллы и может закрыть панель. Передавайте ссылку только тем, кому доверяете. Ссылка работает до конца срока заказа.
Отозвать доступ — заменить ссылку: прежняя перестаёт работать сразу.
/chat-panels/cp_8/share-link/rotatecurl https://api.skystream.su/app/v1/chat-panels/cp_8/share-link/rotate \ -X POST \ -H "Authorization: Bearer $API_KEY"API_KEYЗамена ссылки записывается в журнал действий аккаунта. В журнале запросов API токен ссылки скрыт.
Закрыть панель
Досрочно — отменой заказа: POST /orders/cp_8/cancel, см. Заказ услуг со счёта. Деньги за оставшееся время не возвращаются. Продлить — POST /orders/cp_8/extend.
Ошибки
| Ошибка | Когда |
|---|---|
409 order_not_active | Заказ завершён, отменён или срок вышел |
409 chat_panel_starting | Панель ещё поднимается на сервере — повторите через минуту |
503 chat_panel_unavailable | Сервер перезапускается и восстанавливает панели — повторите через минуту |
409 channel_offline | Twitch: канал не в эфире, аккаунты отключены до эфира. Запросы с логином аккаунта в это время тоже получают эту ошибку, а не account_not_in_panel |
404 account_not_in_panel | Аккаунта с таким логином в панели уже нет |
400 platform_not_supported | Возможности нет у площадки панели |
504 outcome_unknown | Чат-сервис не ответил вовремя на отправку, голосование, ставку или покупку, а действие могло выполниться. Не повторяйте вслепую: сначала проверьте чат, опрос, предсказание или баланс баллов |
Полный список — в разделе Ошибки и на страницах операций в справочнике.