SkyStream API

Графики онлайна

Создание, правка и удаление графиков, генерация кривой и расчёт онлайна.

График онлайна задаёт, сколько зрителей держать в каждую минуту эфира. Кривая хранится в процентах от числа зрителей запуска, поэтому один график подходит каналам разного размера. Назначается график каналу в его настройках.

Читать графики может любой ключ. Создавать, менять и удалять их — ключ с правом channels.

Как устроена кривая

ПолеЧто задаёт
duration_minutesДлина кривой, минуты от старта графика: от 30 до 1440
pointsТочки: минута и доля от числа зрителей запуска, %. Первая точка — на минуте 0, минуты по возрастанию, последняя — не позже duration_minutes. Между точками кривая плавная; после последней точки до конца кривой держится её значение
after_endЧто после конца кривой, если эфир идёт: hold — держать последнее значение; decay — плавно снизить до нуля и снять зрителей до следующего эфира
decay_minutesЗа сколько минут снижать до нуля при decay: от 1 до 360
channel_idsКаналы, которым график назначен. Только в ответе

Отсчёт идёт от старта зрителей, а не от начала эфира. График, назначенный во время эфира, начинает отсчёт с момента назначения.

Число зрителей не поднимается выше числа зрителей запуска: 100% — это ровно run.viewers. Доля округляется вверх до целого потока зрителей, поэтому при небольшом запуске соседние доли дают одно и то же число.

Создать

Точками:

POST/graphs
curl https://api.skystream.su/app/v1/graphs \  -X POST \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "name": "Вечерний эфир",    "duration_minutes": 240,    "points": [      {        "minute": 0,        "percent": 40      },      {        "minute": 30,        "percent": 80      },      {        "minute": 90,        "percent": 100      },      {        "minute": 180,        "percent": 100      },      {        "minute": 240,        "percent": 70      }    ],    "after_end": "decay",    "decay_minutes": 30  }'
bash, zshКлюч — в переменной API_KEY

Или генерацией — как кнопка «Сгенерировать» в панели:

POST/graphs
curl https://api.skystream.su/app/v1/graphs \  -X POST \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "name": "Сгенерированный",    "duration_minutes": 180,    "generate": {      "average_percent": 60,      "ramp_minutes": 15,      "smoothing": "high",      "seed": 42    }  }'
bash, zshКлюч — в переменной API_KEY
Поле generateЧто задаёт
average_percentСредний уровень кривой, %: от 3 до 98
ramp_minutesЗа сколько минут онлайн поднимается с нуля до рабочего уровня. 0 — сразу. Не больше половины длины кривой и не больше 120
smoothinghigh — почти чистая форма, medium — живая кривая с одним провалом, low — заметные колебания и два провала
seedЗерно случайности: с тем же seed и параметрами получается та же кривая. Без него — каждый раз новая

Ответ — созданный график с точками; сгенерированную кривую можно поправить точками в PATCH /graphs/{id}. Передавать points и generate вместе нельзя.

Значения за границами отклоняются с ошибкой parameter_invalid, где param указывает поле, а не поджимаются молча: сохраняется ровно то, что передано. Сколько графиков можно создать — max_graphs в GET /account; сверх этого создание отклоняется с ошибкой graph_limit_reached.

Изменить

PATCH /graphs/{id} меняет только переданные поля:

PATCH/graphs/gr_3
curl https://api.skystream.su/app/v1/graphs/gr_3 \  -X PATCH \  -H "Authorization: Bearer $API_KEY" \  -H "Content-Type: application/json" \  -d '{    "name": "Вечер пятницы",    "after_end": "hold"  }'
bash, zshКлюч — в переменной API_KEY

Кривая заменяется целиком — новыми points или generate. Если кривую не передать, она остаётся прежней, и тогда новая duration_minutes не может быть короче её последней точки.

Правка сразу доходит до каналов из channel_ids: идущие на них запуски ведут онлайн по новой кривой со следующей минуты, отсчёт от старта графика не сбрасывается. Поэтому менять графики может только ключ с правом channels, даже если у него нет права viewers.

Удалить

DELETE/graphs/gr_5
curl https://api.skystream.su/app/v1/graphs/gr_5 \  -X DELETE \  -H "Authorization: Bearer $API_KEY"
bash, zshКлюч — в переменной API_KEY

График, назначенный каналам, без force=true не удаляется: ответ — 409 graph_in_use, и ничего не меняется. С force=true назначения снимаются, и каналы, в том числе с идущими запусками, возвращаются к обычным настройкам онлайна — разгону и плавающему онлайну:

DELETE/graphs/gr_3?force=true
curl "https://api.skystream.su/app/v1/graphs/gr_3?force=true" \  -X DELETE \  -H "Authorization: Bearer $API_KEY"
bash, zshКлюч — в переменной API_KEY

В ответе unassigned_channel_ids — каналы, с которых график снят.

Рассчитать онлайн

GET /graphs/{id}/preview считает, сколько зрителей будет держаться по минутам, если на канале с этим графиком идёт запуск на viewers зрителей:

GET/graphs/gr_3/preview?viewers=150&step_minutes=30
curl "https://api.skystream.su/app/v1/graphs/gr_3/preview?viewers=150&step_minutes=30" \  -H "Authorization: Bearer $API_KEY"
bash, zshКлюч — в переменной API_KEY

Расчёт идёт по той же кривой и с тем же округлением до потоков, что у сервиса запусков. step_minutes — шаг отсчётов, от 1 до 60, по умолчанию 1; последняя минута в ответе есть всегда. platform — площадка канала, по умолчанию twitch: на старте Twitch поднимает не меньше одного потока зрителей, Kick — не меньше одного зрителя.

ends_at_minute — минута, на которой зрители снимаются до следующего эфира:

  • доиграл спад после конца кривой (after_end: decay);
  • кривая опустилась так низко, что от viewers не остаётся ни одного зрителя.

Второе важно для небольших запусков: точка с малой долей посреди кривой у запуска на 40 зрителей — это ноль зрителей, и на этой минуте зрители снимутся до конца эфира. Проверьте график расчётом с числом зрителей вашего запуска. Если ends_at_minute раньше, чем вы ждёте, поднимите низкие точки кривой.

Нулевая минута — старт, она так не проверяется: кривая, начатая с 0%, поднимает на старте минимум и растёт дальше. Но график, назначенный посреди эфира, отсчитывается с момента назначения, и его нулевая минута проверяется сразу: если она даёт ноль зрителей, зрители снимутся в момент назначения.

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

Ошибки

КодКогда
resource_missingГрафика нет, он чужой или идентификатор не того вида
parameter_invalidЗначение за границами, точки не по порядку, точка за концом кривой, points и generate вместе
graph_limit_reachedСоздано наибольшее число графиков
graph_in_useУдаление назначенного каналам графика без force=true

На этой странице