活动
活动会在其规则生效期间,将受众中的每个屏幕切换到一个播放列表,并在规则停止生效时切换回去。一个活动在每家 north 门店运行午餐菜单,之后标记为 north 的屏幕也会获得它。未设置任何规则时,它始终生效。
对每个屏幕,服务器选择其接管,否则选择第一个生效的活动(--priority 0 到 100,较高者优先,然后是最新的),否则选择播放列表排程,否则选择分配的播放列表;堆栈和规则见 排程和接管。活动覆盖有默认播放列表的屏幕(screen assign)。其日期、星期和小时是按每个屏幕自己的时区读取的本地时间:用 screen set-timezone 设置的覆盖值,否则为其播放器报告的时区,否则为 UTC。屏幕约在一分钟内切换,播放器无需更新。
暂停的活动是草稿:在 campaign publish 发布之前不在任何屏幕上,发布时可先只发给测试文件夹或少数测试屏幕,之后 campaign promote 再把它的受众放到活动上。campaign preview 在更改之前显示其效果,campaign revisions 和 campaign restore 保留并恢复较早的版本。下文的排程条目同样有草稿、预览和历史;见草稿、测试和提升、历史。
活动命令使用 screens 功能。写入需要管理权限:提议会话返回 403 insufficient_access。每个组织跨其所有项目最多有 100 个活动(campaign_limit_reached,退出码 5),播放列表必须已批准(playlist_not_approved,退出码 5)。活动属于 Plus 功能:没有该功能时,campaign create、campaign resume 以及暂停以外的 campaign update 会返回 feature_not_in_plan(退出码 8),而 list、show、screens、explain、preview、pause 和 delete 仍可使用,因此已设置的活动会继续运行。草稿(campaign create --paused)和 campaign promote 属于排程变更控制,这一 Enterprise 功能的响应方式相同。价格列出了各套餐。每次写入都会向项目事件附加 campaign.created、campaign.updated 或 campaign.deleted,活动所切换的屏幕会记录 screen.playlist_switched,其 source 为 campaign,活动 ID 作为 entry_id。ads campaigns 用于购买其他屏幕上的广告时间,属于另一种资源。
限定于屏幕文件夹的调用方,只能创建、更改和删除受众全部位于其范围内的活动,否则返回 outside_screen_scope(退出码 3),并且 campaign list 和 campaign show 会为涉及范围之外的活动显示 editable: false。受众涉及受保护文件夹中屏幕的 campaign create、update、pause、resume 或 delete 写入,会返回 pending_review,并附带由第二位审批人决定的 protected_change 审核:不要重复写入,用 reviews show ID 读取决定,并用 --note TEXT 向审批人说明原因。预留的活动只能由可以审批的人更改,智能体在任何访问级别都会被 reserved_item(退出码 3)拒绝。
campaign list#
按屏幕读取的顺序列出项目的活动。
campaign list无参数。
screenrig campaign listdata.items 最多包含 100 个活动,优先级最高的在前,同一优先级内最新的在前。每个活动都带有 campaign show 返回的字段,统计过后还带有 reach。已暂停的活动会被列出,且不适用于任何屏幕。reserved 标记预留的活动,editable 仅对限定于屏幕文件夹的调用方出现:false 表示该活动涉及该范围之外的屏幕。
campaign show#
读取一个活动。
campaign show <id>| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
screenrig campaign show cmp_LUNCH返回 name、playlist_id、audience(确切规则)、priority、paused、reserved(true 表示预留的活动,只有可以审批的人才能更改它)、已设置的 from、until、windows、monthly、dates、except、data、interaction、covers、displays 和 start,以及 revision,即后续写入时用于 --expect-rev 的值。editable 仅对限定于屏幕文件夹的调用方出现:false 表示该活动涉及该范围之外的屏幕,对该调用方只读。import 出现在由排程导入创建的活动上。reach 报告受众匹配多少个屏幕:published 是活动上次发布时的数量(创建时,或更新了新的受众、播放列表或暂停状态时),current 和 at 是最新数量,empty_groups 是受众中不匹配任何屏幕的 tag:NAME 和 folder:ID 叶子节点。更改数量的标签、文件夹、归档或删除操作会在约 15 秒内重新计数;campaign list 也携带 reach,并且 reach_dropped 和 group_empty 通知会监视它。来自 ads campaigns list 的 ID 在此返回 not_found(退出码 4)。
campaign create#
将受众的屏幕切换到一个播放列表,始终切换,或在其规则生效期间切换。
campaign create --name NAME --playlist-id ID (--tag TAG | --any-tag TAG | --screen-id ID | --folder ID | --all-screens | --audience RULE) [--from TIME] [--until TIME] [--window SPEC] [--monthly SPEC] [--date SPEC] [--except DATES] [--data KEY[:PATH[=VALUE]]] [--on-touch [IDLE_S]] [--displays N[,N]] [--start on-time|next-item] [--covers WHERE] [--priority N] [--paused] [--note TEXT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
--name NAME | string | 是 | 无 | 1 到 120 个字符的名称。 |
--playlist-id ID | string | 是 | 无 | 活动生效期间受众显示的 pl_ 播放列表。它必须已批准。 |
--tag TAG | string | 受众选项之一 | 无 | 带有此标签的屏幕。重复或以逗号分隔可要求具备列出的每个标签。 |
--any-tag TAG | string | 受众选项之一 | 无 | 带有这些标签中至少一个的屏幕。重复或以逗号分隔。 |
--screen-id ID | string | 受众选项之一 | 无 | 这些屏幕。重复或以逗号分隔。 |
--folder ID | string | 受众选项之一 | 无 | 此 sfd_ 屏幕文件夹及其内部每个文件夹中的屏幕。要将文件夹与标签组合,请使用 --audience。 |
--all-screens | boolean | 受众选项之一 | 关闭 | 项目中的每个屏幕。 |
--audience RULE | string | 受众选项之一 | 无 | JSON 格式的规则,使用 @FILE 从文件读取,或使用 - 读取标准输入。 |
--from TIME | string | 否 | 无开始时间 | 在每个屏幕时区的此民用时间开始,YYYY-MM-DDTHH:MM,无偏移。 |
--until TIME | string | 否 | 无结束时间 | 在每个屏幕时区的此民用时间之前结束,格式相同且晚于 --from。 |
--window SPEC | string | 否 | 无 | 仅在此每周时间窗口内生效,DAYS 或 DAYS@HH:MM-HH:MM,例如 mon-fri@09:00-17:00 或 sat,sun。最多重复 16 次;活动在其中任一时间窗口内生效。 |
--monthly SPEC | string | 否 | 无 | 仅在此每月出现时生效:每月的某一天(15 或 day15;没有该日的月份会跳过)或每月第 n 个星期几(1st-mon、2nd-tue、3rd-wed、4th-thu、last-sun),均可带可选的 @HH:MM-HH:MM。最多重复 16 次。 |
--date SPEC | string | 否 | 无 | 仅在这一天生效,YYYY-MM-DD 或 YYYY-MM-DD@HH:MM-HH:MM。最多重复 100 次。 |
--except DATE | string | 否 | 无 | 跳过这些日期,YYYY-MM-DD,可重复或以逗号分隔,最多 100 个。例外会移除在该日期开始的每次出现,包括跨夜的后续部分。 |
--data KEY[:PATH[=VALUE]] | string | 否 | 无 | 仅在卡片数据 KEY(卡片数据键或卡片 ID,或 {screen.weather})存在期间成立,可选择限定在 RFC 6901 指针 PATH 处,或要求等于 VALUE。只能给出一次。 |
--on-touch [IDLE_S] | integer | 否 | 关闭 | 仅在有人通过触摸或点击使用屏幕期间生效,在无输入经过 IDLE_S 秒(5 到 3600,默认 60)后停止。 |
--displays N[,N] | string | 否 | 所有输出 | 仅在这些视频墙输出上播放,1 到 12,以逗号分隔。 |
--start WHEN | string | 否 | next-item | on-time 在边界时刻切换并中断当前项目;next-item 等待其结束。 |
--covers WHERE | string | 否 | full | 播放列表的播放位置:full(整页)、main(页面本身),或 header、footer、side,即绘制在页面之上的条带,需要为该区域制作的播放列表(playlist create --format-region)。参见条带。条带未布局在受众的任何屏幕上时,会被 playlist_format_mismatch(退出码 5)拒绝。 |
--priority N | integer | 否 | 0 | 0 到 100。两个活动在同一屏幕上同时生效时,数字较大者获胜。 |
--paused | boolean | 否 | 关闭 | 创建为暂停状态:草稿在 campaign publish 或 campaign resume 之前不在任何屏幕上。 |
--note TEXT | string | 否 | 无 | 给审核变更者的备注:纯文本,最多 280 字符。变更即时生效时忽略此备注。 |
screenrig campaign create --name "Lunch menu" --playlist-id pl_LUNCH --tag north --window mon-fri@11:00-14:00
screenrig campaign create --name "North Tower welcome" --playlist-id pl_WELCOME --folder sfd_01EXAMPLEFOLDER000000000
screenrig campaign create --name "Holiday hours" --playlist-id pl_HOLIDAY --tag Lobby --from 2026-12-20T00:00 --until 2027-01-02T00:00 --priority 10
screenrig campaign create --name "North cafes" --playlist-id pl_CAFE --audience '{"all":[{"tag":"North"},{"any":[{"tag":"Cafe"},{"tag":"Patio"}]}]}' --paused
screenrig campaign create --name "Brunch" --playlist-id pl_BRUNCH --tag Cafe --monthly 1st-sun@10:00-14:00 --except 2026-12-06
screenrig campaign create --name "Touch to browse" --playlist-id pl_MENU --screen-id scr_KIOSK --on-touch 90
screenrig campaign create --name "Holiday opening" --playlist-id pl_HOLIDAY --tag Lobby --date 2026-12-24@18:00-22:00 --start on-time
screenrig campaign create --name "Wall outputs 1 and 2" --playlist-id pl_WALL --screen-id scr_WALL --displays 1,2
screenrig campaign create --name "Room availability" --playlist-id pl_LIVE --folder sfd_01EXAMPLEFOLDER000000000 --data "crd_ROOM:/available=true"
screenrig campaign create --name "Fire exits" --playlist-id pl_EXITS --folder sfd_01EXAMPLEFOLDER000000000 --note "Fire safety"标签由 1 到 32 个字母或数字组成。DAYS 为 daily、一天(mon)、一个范围(mon-fri;fri-mon 回绕越过一周的末尾)或逗号列表(sat,sun)。不带时间时,时间窗口为全天;结束时间等于或早于开始时间时,该窗口跨越午夜并属于开始日。在 --audience 规则中,每个成员恰好有 all、any、tag、screen_id 或 folder 之一,分组最多嵌套 3 层,一个受众最多有 500 条规则,{"all":[]} 表示每个屏幕。服务器会拒绝无效规则:落在 --from 和 --until 之外的 --except 日期、开始于它们之外的 --date,以及同时也是例外日期的 --date(invalid_request,退出码 8)。
--data KEY 在卡片数据 KEY 存在期间成立,--data KEY:PATH 在 RFC 6901 指针 PATH 处存在值期间成立,--data KEY:PATH=VALUE 在它等于 VALUE 期间成立,该值可以是 JSON 标量(true、false、null、数字或带 JSON 引号的字符串),或像 rain 这样的普通字符串。对象和数组会被拒绝。缺失或已过期的数据永远不匹配,已存在的 null 或 false 视为存在。KEY:=VALUE 会比较整个文档。在 KEY 中用 \: 转义冒号,并给整个参数加上引号以保留 JSON 字符串引号:--data 'crd_ROOM:/status="true"'。键 {screen.weather} 读取每个屏幕所在位置的天气(screen update ID --location LAT,LON):--data '{screen.weather}:/condition=rain'。
中断或模糊创建后,24 小时内重新运行相同命令:它会重用保存的幂等键,服务器返回相同活动而非创建新活动。
campaign update#
更改活动;其旧受众和新受众的屏幕会在一分钟内重新解析。
campaign update <id> [--name NAME] [--playlist-id ID] [audience option] [--from TIME | --clear-from] [--until TIME | --clear-until] [--window SPEC | --clear-windows] [--monthly SPEC | --clear-monthly] [--date SPEC | --clear-dates] [--except DATES | --clear-except] [--data KEY[:PATH[=VALUE]] | --clear-data] [--on-touch [IDLE_S] | --clear-on-touch] [--displays N[,N] | --clear-displays] [--start WHEN] [--covers WHERE] [--priority N] [--expect-rev REVISION] [--note TEXT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--name NAME | string | 否 | 未更改 | 重命名活动。 |
--playlist-id ID | string | 否 | 未更改 | 改为显示此播放列表。它必须已批准。 |
--tag, --any-tag, --screen-id, --folder, --all-screens, --audience | string | 否 | 未更改 | 最多一个,写法与 campaign create 相同。它会替换整个受众。 |
--from TIME, --until TIME | string | 否 | 未更改 | 与 campaign create 相同的民用时间。--from 必须保持早于 --until,否则为 invalid_request(退出码 8)。 |
--clear-from, --clear-until | boolean | 否 | 关闭 | 移除开始时间或结束时间。 |
--window SPEC | string | 否 | 未更改 | 用这些时间窗口替换所有时间窗口。最多重复 16 次。 |
--clear-windows | boolean | 否 | 关闭 | 移除所有时间窗口。 |
--monthly SPEC, --date SPEC, --except DATE | string | 否 | 未更改 | 与 campaign create 相同;每项都会替换同类的全部规则。 |
--data KEY[:PATH[=VALUE]] | string | 否 | 未更改 | 与 campaign create 相同;它会替换卡片数据条件。 |
--on-touch [IDLE_S], --displays N[,N], --start WHEN | string | 否 | 未更改 | 与 campaign create 相同;不带值的 --on-touch 为 60 秒。 |
--clear-monthly, --clear-dates, --clear-except, --clear-data, --clear-on-touch, --clear-displays | boolean | 否 | 关闭 | 移除它们。没有任何规则的活动始终生效。 |
--covers WHERE | string | 否 | 未更改 | full、main、header、footer 或 side,与 campaign create 相同。 |
--priority N | integer | 否 | 未更改 | 0 到 100。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。省略则写入当前资源。提供的过期值为 revision_conflict:重新获取,重新应用,重试。 |
--note TEXT | string | 否 | 无 | 给审核变更者的备注:纯文本,最多 280 字符。变更即时生效时忽略此备注。 |
screenrig campaign update cmp_LUNCH --playlist-id pl_LUNCH2 --expect-rev 2
screenrig campaign update cmp_LUNCH --tag Lobby --window sat,sun --priority 20
screenrig campaign update cmp_LUNCH --clear-until --clear-windows
screenrig campaign update cmp_BRUNCH --monthly 2nd-sun@10:00-14:00 --except 2026-12-13,2027-01-10
screenrig campaign update cmp_BROWSE --clear-on-touch --clear-displays
screenrig campaign update cmp_ROOMS --data crd_ROOM:/available=true
screenrig campaign update cmp_ROOMS --clear-data
screenrig campaign update cmp_LUNCH --playlist-id pl_LUNCH2 --note "Safety review done"至少传入一项更改;只有传入的字段会更改。新的 --playlist-id 的检查方式与创建时相同。中断或模糊请求后,重新运行相同命令:它会重用保存的幂等键,服务器返回已发生的更新而非再次应用。
campaign pause#
在每个屏幕上停止活动,但不删除它。
campaign pause <id> [--expect-rev REVISION] [--note TEXT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。省略则写入当前资源。提供的过期值为 revision_conflict:重新获取,重新应用,重试。 |
--note TEXT | string | 否 | 无 | 给审核变更者的备注:纯文本,最多 280 字符。变更即时生效时忽略此备注。 |
screenrig campaign pause cmp_LUNCH
screenrig campaign pause cmp_LUNCH --note "Holiday over"此前显示它的屏幕会在一分钟内回到没有它时会显示的内容。campaign resume 会重新启动它。
campaign resume#
重新启动已暂停的活动。
campaign resume <id> [--expect-rev REVISION] [--note TEXT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。省略则写入当前资源。提供的过期值为 revision_conflict:重新获取,重新应用,重试。 |
--note TEXT | string | 否 | 无 | 给审核变更者的备注:纯文本,最多 280 字符。变更即时生效时忽略此备注。 |
screenrig campaign resume cmp_LUNCH
screenrig campaign resume cmp_LUNCH --note "Holiday again"活动生效期间,受众中活动可适用的每个屏幕会在一分钟内切换到该活动的播放列表。
campaign delete#
删除活动。
campaign delete <id> [--expect-rev REVISION] [--note TEXT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。省略则写入当前资源。提供的过期值为 revision_conflict:重新获取,重新应用,重试。 |
--note TEXT | string | 否 | 无 | 给审核变更者的备注:纯文本,最多 280 字符。变更即时生效时忽略此备注。 |
screenrig campaign delete cmp_LUNCH
screenrig campaign delete cmp_LUNCH --note "Replaced by the winter campaign"活动无法恢复。显示它的每个屏幕会在一分钟内回到没有它时会显示的内容;播放列表、屏幕和标签保持不变。campaign pause 会停止活动并保留它。
campaign screens#
显示活动覆盖的屏幕及各屏幕的状态。
campaign screens <id> [--limit N] [--cursor CURSOR]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--limit N | integer | 否 | 100 | 每页屏幕数,1 到 500。 |
--cursor CURSOR | string | 否 | 第一页 | 上一页的 data.next_cursor。 |
screenrig campaign screens cmp_LUNCHdata.counts 涵盖受众中的每个实时屏幕:audience,然后是出现的每个状态各一个计数。data.items 是这些屏幕按屏幕 ID 顺序排列的一页,每个屏幕附带活动的 status。data.next_cursor 在最后一页缺失。 在播放器能自行解析堆栈的屏幕上,状态取决于该堆栈对活动的安排:条带或 main 活动在其区域内播放,--displays 活动在其指定的显示器上播放。
| 状态 | 含义 |
|---|---|
playing | 屏幕显示该活动的播放列表。 |
pending | 它应当显示,切换会在一分钟内发生。 |
waiting | 当前在 --from、--until、时间窗口、每月规则或指定日期之外;它在八天内开始时有 next_start。 |
ended | --until 已过。 |
outranked | 它生效,但屏幕接管(reason takeover)或另一个活动(reason campaign,带有 by)获胜。 |
conditional | 它按时间生效,在有人使用屏幕时(reason interaction)或在其数据条件成立时(reason data)播放。只有播放器能看到其输入和卡片数据。 |
paused | 活动已暂停。 |
blocked | 它无法在此显示。reason 为 no_default_playlist(screen assign)、playlist_unavailable(播放列表缺失、未批准或不适合该屏幕)、region_not_laid_out(它放不进该屏幕的任何显示器:其条带放不进任何显示器,或其 --displays 未指定任何显示器,活动被排除在其堆栈之外)或 stack_only(该屏幕的播放器不能自行解析堆栈,而只有能自行解析堆栈的播放器才遵循区域、显示器锁定、--on-touch 或数据条件)。 |
campaign explain#
显示每个活动为何在某个屏幕上播放或不播放,可针对现在或所选时间。
campaign explain <screen-id> [--at TIME] [--to TIME]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<screen-id> | string | 是 | 无 | scr_ 屏幕 ID。 |
--at TIME | string | 否 | 现在 | 说明此时间而非现在:带时区的时刻(2026-12-24T10:00:00-08:00)或屏幕自身时钟上的时间(2026-12-24T18:00)。夏令时跳过或重复的时钟时间会被拒绝。 |
--to TIME | string | 否 | 无 | 同时列出从 --at(默认现在)到此时间的播放列表切换,形式相同。距离没有限制;一次回答最多列出 500 个时间段,每个没有变化的八天算作一个。 |
screenrig campaign explain scr_LOBBY
screenrig campaign explain scr_LOBBY --at 2026-12-24T18:00 --to 2026-12-26T00:00data.items 按屏幕读取的顺序列出项目的每个活动,每个活动带有来自 campaign screens 或 not_in_audience 的状态;blocked 行会指明修复方式。data.effective_playlist 是屏幕当前播放的播放列表(id、source(为 takeover、campaign、schedule、default 或 folder),以及 entry_id,即活动、排程条目或文件夹的 ID),屏幕不显示播放列表时为 null。它不会更改任何内容。
带 --at 时,data.at 包含该时间的答案:instant、timezone(屏幕的生效时区)和 local(屏幕时钟上的时刻)、effective_playlist(其 until 是下一次变化)以及针对接管、每个活动和每个排程条目的 verdicts 行,按屏幕读取的顺序排列。
判定为 won(所显示的播放列表)、outranked(它生效,by 指明获胜者)、not_started(尚未开始)、ended(已结束)、outside_hours(在日期范围内,但在时间窗口、每月规则或指定日期之外,或处于例外日期;next_start 说明它在八天内何时再次生效)、conditional(按时间生效,在有人使用屏幕时播放,reason interaction;或在其数据条件成立时播放,reason data)或 off(不适用,reason 说明原因:paused、not_in_audience、no_default_playlist、playlist_unavailable、region_not_laid_out 或 stack_only)。在播放器能自行解析堆栈的屏幕上,判定依据该堆栈:条带或 main 层级在其区域内获胜或被压过,显示器锁定则在其指定的显示器上判定。effective_playlist 和时间线仍是显示器 1 上的页面,data.at.not_judged 会列出 player_stack。
--to 会添加 data.at.timeline,即播放列表不变的时间段,timeline_truncated 标记在 --to 之前停止的回答:将 --at 设为最后一个时间段的 to,再次查询。data.at.not_judged 说明未作判断的内容:接管、排程和活动按其现在的状态读取,data.items 仍是当前状态。
campaign preview#
在创建或更改活动之前,显示其会产生的效果。
campaign preview [<id>] [--name NAME] [--playlist-id ID] [audience option] [rule flags] [clear flag] [--paused | --publish] [--calendar-from INSTANT] [--calendar-to INSTANT]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 否 | 新活动 | 要预览更改的 cmp_ 活动。省略则根据 campaign create 的标志预览新活动。 |
--name NAME, --playlist-id ID | string | 新活动时需要 | 未更改 | 同 campaign create;新活动两者都需要。 |
--tag, --any-tag, --screen-id, --folder, --all-screens, --audience | string | 新活动时需要 | 未更改 | 最多一个,写法与 campaign create 相同;新活动需要一个。带 <id> 时,它会替换整个受众。 |
--from TIME, --until TIME, --window SPEC, --monthly SPEC, --date SPEC, --except DATE | string | 否 | 未更改 | campaign create 的规则选项。带 <id> 时,每项都会替换同类的全部规则。 |
--data KEY[:PATH[=VALUE]], --on-touch [IDLE_S], --displays N[,N], --start WHEN, --covers WHERE | string | 否 | 未更改 | 同 campaign create。 |
--priority N | integer | 否 | 未更改 | 0 到 100。 |
--clear-from, --clear-until, --clear-windows, --clear-monthly, --clear-dates, --clear-except, --clear-data, --clear-on-touch, --clear-displays | boolean | 否 | 关闭 | 同 campaign update:预览移除该规则。它们需要 <id>。 |
--paused | boolean | 否 | 关闭 | 以草稿预览:已暂停,不在任何屏幕上。 不能与 --publish 同用。 |
--publish | boolean | 否 | 关闭 | 预览取消活动的暂停。带受众选项时,预览向该受众发布。 需要 <id>,且与 --paused 互斥。 |
--calendar-from INSTANT | string | 否 | 现在 | 日历从此带时区的时刻开始,例如 2026-12-01T00:00:00Z。 |
--calendar-to INSTANT | string | 否 | 开始后一周 | 日历在此带时区的时刻结束,最晚为开始后 93 天。 |
screenrig campaign preview cmp_LUNCH --tag Lobby
screenrig campaign preview cmp_LUNCH --clear-until --priority 20
screenrig campaign preview cmp_LUNCH --publish --folder sfd_TEST
screenrig campaign preview cmp_LUNCH --publish --calendar-from 2026-12-01T00:00:00Z --calendar-to 2027-01-01T00:00:00Z
screenrig campaign preview --name "Holiday hours" --playlist-id pl_HOLIDAY --tag Lobby --from 2026-12-20T00:00 --until 2027-01-02T00:00这些选项的检查方式与写入相同,因此预览会拒绝写入所拒绝的内容。带 <id> 时,至少传入一项更改:一个 campaign update 选项、--paused 或 --publish。不会写入任何内容。data.gained 和 data.lost 是 {count, screen_ids}(按 ID 取前 500 个):将带有该活动而现在没有的屏幕,以及将不再带有该活动的屏幕。暂停的活动不在任何屏幕上,因此发布它会增加其受众;让活动保留在屏幕上的编辑只在日历中体现。data.calendar.before 和 data.calendar.after 是 --calendar-from 至 --calendar-to 之间,旧受众和新受众屏幕的排程日历,草稿绘制为暂停层级。--human 打印第一个显示器的时段和会生效的草稿,并在日历不变时说明。
campaign publish#
取消草稿活动的暂停,可只发给测试文件夹或少数测试屏幕。
campaign publish <id> [--test-folder ID | --test-screen ID] [--expect-rev REVISION]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--test-folder ID | string | 否 | 活动的受众 | 仅发布到此 sfd_ 屏幕文件夹及其内部每个文件夹中的屏幕。 |
--test-screen ID | string | 否 | 活动的受众 | 仅发布到这些屏幕。重复或以逗号分隔。 |
--expect-rev REVISION | string | 否 | 无 | 可选修订前提条件。省略则写入当前资源。提供的过期值为 revision_conflict:重新获取,重新应用,重试。 |
screenrig campaign publish cmp_LUNCH
screenrig campaign publish cmp_LUNCH --test-folder sfd_TEST
screenrig campaign publish cmp_LUNCH --test-screen scr_LOBBY,scr_CAFE --expect-rev 2草稿是暂停的活动:发布之前不在任何屏幕上。不带测试选项时,活动会在一分钟内到达它自己的受众。测试选项会在同一次写入中替换受众,因此只有测试屏幕会切换。通常的流程:用真实受众执行 campaign create --paused,执行 campaign publish ID --test-folder FOLDER,查看测试屏幕,然后执行 campaign promote ID --revision N。campaign preview ID --publish 会先显示效果。
campaign promote#
测试之后,把草稿的受众放到活动上。
campaign promote <id> --revision N [--expect-rev REVISION]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--revision N | integer | 是 | 无 | 草稿的暂停修订,按 campaign revisions 的编号。活动采用该修订的受众。 |
--expect-rev REVISION | string | 否 | 刚读取的修订 | 要求当前活动修订为此值。省略时,CLI 会在写入前读取活动并发送该修订;期间若有更改,则为 revision_conflict(退出码 6)。 |
screenrig campaign promote cmp_LUNCH --revision 1
screenrig campaign promote cmp_LUNCH --revision 1 --expect-rev 2修订 N 的受众在一次写入中成为活动的受众,形成 change 为 promoted 的新修订,旧受众和新受众的每个屏幕都会在一分钟内重新解析。修订 N 必须是暂停的修订(否则 invalid_request 会指明它),并且活动必须处于启用状态:当前已暂停的活动没有可提升的测试。受众已是活动受众的修订不会带来任何变化。--expect-rev 是活动的当前修订,而不是 N。提升需要 campaign update 所需的权限。
campaign revisions#
按从新到旧列出活动的修订。
campaign revisions <id> [--after CURSOR]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--after CURSOR | string | 否 | 第一页 | 从上一页的 data.next_cursor 继续。 |
screenrig campaign revisions cmp_LUNCH
screenrig campaign revisions cmp_LUNCH --after CURSORdata.items 最多包含 50 个修订,每个包含 revision、created_at、change、current、已知时的 author,以及 campaign(该次写入后的活动及其暂停状态)。change 为 created、edited(一次更新或一次排程导入)、restored 或 promoted(restored_from 所指较早修订的副本),或 baseline(活动历史开始时所持有的修订)。历史中没有未暂停修订的活动是草稿。只要 data.next_cursor 是字符串,就还有更早的修订:将 --after 设为该值,再次运行命令。修订在活动存在期间一直保留,随活动删除而删除。只读权限即可。
campaign restore#
通过向前复制,使较早的修订再次成为当前修订。
campaign restore <id> --revision N [--expect-rev REVISION]| 参数 | 类型 | 必填 | 默认 | 备注 |
|---|---|---|---|---|
<id> | string | 是 | 无 | cmp_ 活动 ID。 |
--revision N | integer | 是 | 无 | 要向前复制的修订,按 campaign revisions 的编号。 |
--expect-rev REVISION | string | 否 | 刚读取的修订 | 要求当前活动修订为此值。省略时,CLI 会在写入前读取活动并发送该修订;期间若有更改,则为 revision_conflict(退出码 6)。 |
screenrig campaign restore cmp_LUNCH --revision 3
screenrig campaign restore cmp_LUNCH --revision 3 --expect-rev 5修订 N 的名称、播放列表、受众、规则、区域、优先级和暂停状态成为 change 为 restored 的新修订,其检查方式与 campaign update 相同:播放列表必须仍然存在且已批准(playlist_not_approved,退出码 5)。旧受众和新受众的每个屏幕都会在一分钟内重新解析。较早的修订保持原样,恢复当前内容不会产生任何变化。恢复需要 campaign update 所需的权限。