跳转到内容

Stream Status API

使用 Stream Status 端点询问 DailyPlay 当前是否应显示 stream — 在您于网站上挂载 iframe、悬浮游玩按钮或自定义浮层之前。

这是公开 GET(无需 API key)。专为希望以下操作的站点与应用所有者设计:

  • 仅在 stream 活跃时显示 stream 浮层
  • 在活动尚未开始或已结束时隐藏 Play 按钮
  • 在没有已发布游戏时避免加载完整 stream 播放器
GET https://app.dailyplay.ai/api/stream-status?org_slug=<org-slug>&stream_slug=<stream-slug>
参数 必填 说明
org_slug 是 组织 slug(来自 stream 分享 URL)
stream_slug 是 Stream slug(来自 stream 分享 URL)

Auth: 无
CORS: Access-Control-Allow-Origin: *(可安全从浏览器调用)
Cache: public, s-maxage=30, stale-while-revalidate=60 — 主机可约每 30 秒轮询一次

https://app.dailyplay.ai/api/stream-status?org_slug=your-org&stream_slug=summer-campaign

HTTP 200 且 success: true 表示请求已处理。使用 data.available 决定是否显示 stream UI。

{
"success": true,
"data": {
"available": true,
"reason": null,
"total_games": 4,
"starts_at": null,
"ends_at": null,
"timezone": "UTC",
"server_time": "2026-10-15T07:23:43.597Z",
"stream": {
"slug": "summer-campaign",
"status": "active"
},
"organization": {
"slug": "your-org"
}
}
}
{
"success": true,
"data": {
"available": false,
"reason": "stream_inactive",
"total_games": 0,
"starts_at": null,
"ends_at": null,
"timezone": "UTC",
"server_time": "2026-10-15T07:23:43.597Z",
"stream": {
"slug": "summer-campaign",
"status": "draft"
},
"organization": {
"slug": "your-org"
}
}
}
字段 类型 说明
available boolean 访客可游玩 stream 时为 true
reason string | null stream 不可用的原因(可用时为 null)
total_games number stream 上已发布游戏的数量(非公开时为 0)
starts_at / ends_at string | null 日程边界,ISO UTC(来自 stream 时区)
timezone string 用于日程检查的 stream 时区
server_time string 决策时的服务器时钟(ISO UTC)
stream.slug / status string Stream 标识与状态
organization.slug string 组织 slug
reason 含义
not_public Stream 非公开(不泄露详情)
stream_inactive Stream 状态不是 active(例如 draft / archived)
stream_not_started 当前时间早于 starts_at
stream_ended 当前时间晚于 ends_at
no_games Stream 活跃/公开但没有已发布游戏
代码 何时
400 缺少 org_slug 或 stream_slug
404 未找到组织或 stream
405 非 GET / OPTIONS 的方法
500 服务器错误
{
"success": false,
"error": "Stream not found"
}

以下全部必须为真:

  1. Stream 存在于给定的 org slug 下
  2. Stream 为公开
  3. Stream 状态为 active
  4. 若设置了开始时间,则已开始(按 stream 时区)
  5. 若设置了结束时间,则尚未结束
  6. 至少有一款已发布游戏附加到 stream

站点所有者通常在 stream 上线前将悬浮游玩按钮或模态排除在 DOM 之外。

<script>
async function shouldShowStreamOverlay(orgSlug, streamSlug) {
const url =
"https://app.dailyplay.ai/api/stream-status" +
`?org_slug=${encodeURIComponent(orgSlug)}` +
`&stream_slug=${encodeURIComponent(streamSlug)}`;
const res = await fetch(url);
const json = await res.json();
return Boolean(json?.success && json?.data?.available);
}
async function maybeMountOverlay() {
const available = await shouldShowStreamOverlay(
"your-org",
"summer-campaign"
);
if (!available) {
// Do not inject iframe / floating button
return;
}
// Mount your overlay or iframe:
// https://app.dailyplay.ai/stream/your-org/summer-campaign/widget?origin=...
}
maybeMountOverlay();
// Optional: re-check every ~30s to match CDN cache
setInterval(maybeMountOverlay, 30000);
</script>
用途 URL
完整 stream 页面 https://app.dailyplay.ai/stream/<org-slug>/<stream-slug>
Widget / 悬浮浮层 https://app.dailyplay.ai/stream/<org-slug>/<stream-slug>/widget?origin=<encoded-site-origin>

托管 widget 代码片段见悬浮游玩按钮。DailyPlay 的 widget 脚本也会门控 stream 启动器,仅在 stream 可玩时显示。