シートからスクリーンへ
- テンプレートから始めます。 テンプレートを CSV または XLSX として保存するか、同じ列を持つ独自のシートを使用します。
- スケジュールの1行につき1行を入力します。 スクリーン(またはフォルダーかタグ)、ファイル、開始、終了を指定します。
- インポートします。 ダッシュボードの「スケジュール」タブのインポートダイアログにファイルをドロップするか、
screenrig schedule import FILEを実行します。 - エラーのある行を修正します。 各エラーには、行、列、コードが示されます。ダイアログでセルを編集するか、シートを編集して再度インポートします。
- プレビューを確認します。 シートが作成するレベル、変更または削除するレベル、影響を受けるスクリーンのカレンダーが一覧表示されます。
- 公開します。 すべての行がまとめて適用されるか、まったく適用されないかのどちらかです。
手順1~5では何も書き込まれません。行でスクリーンをスケジュールするには、スクリーンにタイムゾーン(screen set-timezone)とデフォルトプレイリスト(screen assign)が必要で、ファイルは承認済みの画像または動画である必要があります。
シート
最初の行が列名です。それ以降の各行が1つのスケジュール行です。空白行はスキップされます。シートは CSV ファイル(UTF-8、カンマまたはセミコロン区切り)または XLSX ワークブックで、XLSX ワークブックは最初のシートから読み取られます。
| 列 | 次としても読み取られます | 内容 |
|---|---|---|
target | screen, screen code, code, room, room id, screen name, screen id | 行がスケジュールするスクリーン。必須 |
content | file, file name, media, asset, playlist | 再生する内容。必須 |
start | start date, from, begin | 行が開始する時期 |
end | end date, until, stop | 行が終了する時期 |
timezone | time zone, tz | 行の時刻が書かれているタイムゾーン |
days | weekdays, day | 行が再生される曜日 |
daily start | window start, time from | 各再生時間帯が開始する時刻 |
daily end | window end, time to | 各再生時間帯が終了する時刻 |
priority | 0から100。大きい値が小さい値より優先して再生されます。既定値は 0 です。 | |
name | level, label | 行が作成するレベルの名前 |
display | displays, output | 行が再生されるビデオウォール出力(1 や 1,2 など) |
ヘッダーは、大文字小文字、スペース、句読点を無視して照合されます。どこにも読まれない列は無視され、プレビューに一覧表示されます。行には target、content、および start、end、days、毎日の時間帯の少なくとも1つが必要です。
Screen,File,Start,End,Timezone,Days,Daily start,Daily end,Priority,Name
LOBBY-01,welcome-spring.jpg,2026-11-05 18:00,2026-11-08 02:00,America/Los_Angeles,,,,0,
folder:Casino Floor,happy-hour.mp4,2026-11-05,2026-11-30,,Mon-Fri,16:00,19:00,5,Happy hour
tag:elevators,playlist:Holiday loop,2026-12-01 09:00,2026-12-26,,,,,0,
- 2行目は、コード
LOBBY-01のスクリーンで、太平洋時間の11月5日午後6時から11月8日午前2時までwelcome-spring.jpgを再生します。 - 3行目は、フォルダー
Casino Floorとその中のフォルダーのすべてのスクリーンで、11月5日から11月30日の終わりまでの平日の午後4時から午後7時までhappy-hour.mp4を再生します。 - 4行目は、タグ
elevatorsを持つすべてのスクリーンで、12月1日午前9時から12月25日の終わりまでプレイリストHoliday loopを再生します。
対象
対象は次のいずれかです。
- スクリーン。 スクリーン ID、スクリーンの任意のフィールドの値(部屋コード、店舗番号)、またはスクリーン名。
--code-fieldまたはcode_fieldで、codeやroom_idなどの1つのフィールドに一致を限定できます。 - フォルダー。
folder:NAMEまたはfolder:Parent/Child。そのフォルダーと、その中のすべてのフォルダーに適用されます。 - タグ。
tag:NAMEは、そのタグを持つすべてのスクリーンに適用されます。
1つのセル内の複数の対象は、LOBBY-01;LOBBY-02|tag:elevators のように ; または | で区切ります。
コンテンツ
- ファイル。 プロジェクト内のメディアファイルの名前、または変換されたアップロードの元のファイル名。ファイルは全画面で再生されます。ファイルを初めて使う確定で1ファイルのプレイリスト
Scheduled: FILEが作られ、以降のインポートはそれを再利用します。 - プレイリスト。
playlist:NAMEまたはプレイリストの ID。プレイリストには承認済みバージョンがあり、テンプレートではありません。
時刻
- 日付と時刻。
2026-11-05 18:00、2026-11-05T18:00、11/5/2026 6:00 PMとスプレッドシートの日付セルを読み取ります。Zや+02:00のようなオフセット付きの時刻は拒否されます。 - 各スクリーン自身の時計。 時刻は、行が適用されるスクリーンの時計で読み取られるため、
18:00はスクリーンがどこにあっても午後6時です。 - 別のタイムゾーン。
timezoneセル(またはリクエストのtimezone)は、その行がそのタイムゾーンで書かれていることを示します。行のすべてのスクリーンが同じタイムゾーンの場合、時刻はスクリーンのタイムゾーンに変換されます。複数のタイムゾーンのスクリーンに適用される行はtimezoneを空にし、各スクリーン自身の時計で読み取ります。 - 終了に日付だけを指定するとその日いっぱいで終了します。
2026-11-30は11月30日の終わりに終了します。開始に日付だけを指定すると、午前0時に開始します。 - 終了なしの場合、後のインポートで削除されるまで、行は再生され続けます。プレビューは
open_endで警告します。 - 曜日。
Mon-Fri、Mon,Wed,Fri、Sat,Sun、weekdays、weekends、dailyのいずれか。daysがあり毎日の時間帯がない行は、その曜日に終日再生されます。 - 毎日の時間帯。
daily startとdaily endで毎日の時間を指定します(16:00と19:00、4:00 PMと7:00 PMなど)。両方を指定します。終了が開始と同じか開始より前の場合は、深夜0時をまたぎ、開始した日に属します。daysがない場合、この時間帯は毎日適用されます。
プレビューとエラー
プレビューは、何かを書き込む前にすべての行とすべてのセルを検証します。エラーのある行はそのセルとともに表示され、各エラーには列、コード、修正内容が示されます。
| コード | 列 | 意味と対処 |
|---|---|---|
required | target, content, daily start, daily end | セルが空か、毎日の時間帯のセルの片方だけが入力されています。入力してください |
unknown_screen | target | その ID、フィールド値、名前のスクリーンはありません。コードを確認するか、code_field が指定するフィールドを確認してください |
ambiguous_screen | target | その値は複数のスクリーンに一致します。スクリーン ID か、一意のコードを使用してください |
unknown_folder | target | その名前のスクリーンフォルダーはありません。スペルを確認してください |
ambiguous_folder | target | その名前のフォルダーが複数あります。folder:Hotel/Casino Floor のようにパスを書いてください |
unknown_tag | target | そのタグを持つスクリーンはありません。スペルを確認してください |
unknown_file | content | その名前のファイルまたはプレイリストはありません。ファイルをアップロードするか、名前を修正してください |
ambiguous_file | content | その名前のファイルが複数あります。どれかの名前を変更するか、playlist:NAME と書いてください |
not_playable | content | ファイルが画像でも動画でもない、メディアが審査待ち、またはプレイリストがテンプレートであるか承認済みバージョンがありません。承認するか、別のものを選んでください |
invalid_time | start, end, daily start, daily end | セルが日付と時刻ではないか、タイムゾーンのオフセットが付いています。2026-11-05 18:00 と書いてください |
reversed_times | end | 終了が開始より後ではありません。どちらかを修正してください |
past_end | end | 終了時刻を過ぎています。後ろにずらすか、行を削除してください |
no_timing | start | 行に時期の指定がありません。開始、終了、曜日、または毎日の時間帯を指定してください |
invalid_value | days, priority, display | セルが Mon-Fri のような曜日のリスト、0から100の整数、または 1,2 のようなディスプレイ番号ではありません |
timezone | timezone | タイムゾーンが不明か、対象に複数のタイムゾーンのスクリーンが含まれています。America/Los_Angeles のようなタイムゾーンを使用するか、空のままにしてください |
screen_not_ready | target | スクリーンにタイムゾーンまたはデフォルトプレイリストがありません。screen set-timezone または screen assign を実行してください |
overlap | priority | 同じ優先度の2つの行が、スクリーン上で同時に有効です。どちらかの優先度を変えるか、時刻をずらしてください |
limit | target | スクリーンの独自レベルが32を超えるか、組織のキャンペーンが100を超えます(共有レベルはそれぞれ1件に数えられます)。行をまとめるか、フォルダーまたはタグを対象にしてください |
2つの警告はインポートを止めません。open_end は終了のない行を示します。outranked は、スクリーン上で共有レベル(複数のスクリーン、フォルダー、タグ向けの行)が上書きして再生する行を示します。
行のないシート、UTF-8 ではないファイル、5,000行を超えるシート、8 MiB を超えるファイル、400台を超えるスクリーン独自のスケジュールを書き込む確定は、理由とともに拒否されます。
レベル
コンテンツ、時刻、優先度、名前、ディスプレイが一致する行は1つのレベルになります。対象は比較に含まれないため、10台のスクリーンで同じ時刻に同じファイルを再生する10行は1つのレベルになります。
- 1つのスクリーンは、そのスクリーン自身のスケジュールにエントリを作ります。
- 複数のスクリーン、フォルダー、タグは、その対象に対する1つの共有レベル、つまりキャンペーンを作ります。共有レベルはスクリーン独自のレベルより優先されます。
グループ化により、会場の200台のスクリーンが200件のエントリではなく1つのキャンペーンになり、シートの修正で変更されるのは1つのレベルだけです。name 列は共有レベルに名前を付けます。指定がない場合は、インポート、コンテンツ、対象にちなんだ名前になります(Spring promos: happy-hour.mp4 on Casino Floor など)。
もう一度インポート
インポートの name がそのインポートを識別し、既定値は import です。同じ名前で再度インポートすると、次のようになります。
- 行の日付が変わっても、そのインポートが作成したレベルを更新します。
- 新しい行のレベルを追加します。
- シートから行がなくなったレベルを削除します。
- シートが同じ場合は何も変更しません。
インポートで作られたレベルは、ID にインポート名を含み(スクリーンのエントリは imp_ で始まります)、キャンペーンには import の印が付きます。手作業で作成したレベルには一切触れません。1つのシートには1つの名前を使い、別のシートには別の名前を使います。
インポートを実行
ダッシュボード
プロジェクトのスケジュールタブを開き、インポートを選択します。CSV または XLSX ファイルをドロップします。ダイアログには行の表が表示され、各エラーがセルの横に示されるので、その場でセルを編集できます。続いて、インポートで変更されるスクリーンの合成されたカレンダーが表示されます。公開で確定します。
コマンドライン
screenrig schedule template --output schedule.csv
screenrig schedule import schedule.csv --name "Spring promos" --timezone America/Los_Angeles
screenrig schedule import schedule.csv --name "Spring promos" --timezone America/Los_Angeles --commit
schedule import はプレビューのみで、何も書き込みません。--commit は、すべての行が有効な場合にシートを適用します。
| オプション | 意味 |
|---|---|
--name NAME | インポートの名前(1~80文字)。既定値は拡張子を除いたファイル名です |
--timezone ZONE | 行に timezone がない場合に、時刻が書かれているタイムゾーン |
--code-field FIELD | スクリーンコードをこのスクリーンフィールドからのみ読み取る |
--commit | シートを適用 |
--format csv|xlsx | schedule template: テンプレートの形式 |
--output FILE | schedule template: 保存先 |
このコマンドは、シートが有効な場合は終了コード0、行にエラーがある場合は8(何も書き込まれません)、プレビュー後にプロジェクトが変更された場合は5(もう一度実行してください)で終了します。FILE は .csv、.xlsx、.json ファイル、または標準入力を表す - です。JSON ファイルには、行オブジェクトの配列、または列名をキーとする {"rows": [...]} を指定します。
API
シートは JSON の行として送信するか、CSV または XLSX のボディとして送信し、設定はクエリパラメーターで渡します。プレビューには読み取りアクセスが必要です。確定には書き込みアクセスを持つ認証情報が必要で、ダッシュボードで承認できるユーザーが付与します。
curl -s https://api.screenrig.ai/api/schedule/imports/preview \
--header "Authorization: Bearer $SCREENRIG_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"name": "Spring promos",
"timezone": "America/Los_Angeles",
"rows": [
{"target": "LOBBY-01", "content": "welcome-spring.jpg", "start": "2026-11-05 18:00", "end": "2026-11-08 02:00"},
{"target": "folder:Casino Floor", "content": "happy-hour.mp4", "start": "2026-11-05", "end": "2026-11-30",
"days": "Mon-Fri", "daily_start": "16:00", "daily_end": "19:00", "priority": 5, "name": "Happy hour"}
]
}'
同じシートをファイルとして送信する場合:
curl -s "https://api.screenrig.ai/api/schedule/imports/preview?name=Spring%20promos&timezone=America/Los_Angeles" \
--header "Authorization: Bearer $SCREENRIG_TOKEN" \
--header "Content-Type: text/csv" \
--data-binary @schedule.csv
応答(抜粋):
{
"name": "Spring promos",
"valid": false,
"fingerprint": "FINGERPRINT",
"columns": ["target", "content", "start", "end", "days", "daily_start", "daily_end", "priority", "name"],
"summary": {"rows": 2, "rows_with_errors": 1, "levels": 1, "creates": 1, "updates": 0,
"unchanged": 0, "removes": 0, "screens": 1, "playlists": 1},
"rows": [
{"row": 2, "status": "ok", "level": "LEVEL_KEY"},
{"row": 3, "status": "error",
"errors": [{"column": "content", "code": "unknown_file",
"message": "No file or playlist is named \"happy-hour.mp4\"."}]}
],
"levels": [{"key": "LEVEL_KEY", "action": "create", "home": "screen", "screen_id": "scr_LOBBY",
"content": {"kind": "file", "id": "med_WELCOME", "name": "welcome-spring.jpg"},
"screens": 1, "priority": 0, "from": "2026-11-05T18:00", "until": "2026-11-08T02:00", "rows": [2]}],
"removals": []
}
rows[].cells は各行のセルをシートに書かれたとおりに返すため、クライアントは修正して行を再送信できます。valid は、エラーのある行がない場合に true です。calendar は GET /api/schedule/calendar と同じ形式で、確定後のインポートで変更されるスクリーンの状態を示します。
確定では、同じシートとそのプレビューの fingerprint を、JSON ボディのメンバーとして、またはファイルと併せてクエリパラメーターとして送信します。安全に再試行するには Idempotency-Key を送信します。
curl -s https://api.screenrig.ai/api/schedule/imports \
--header "Authorization: Bearer $SCREENRIG_TOKEN" \
--header "Idempotency-Key: spring-promos-1" \
--header "Content-Type: application/json" \
--data @commit.json
応答には preview と applied、作成、更新、変更なし、削除された件数、書き込まれたスクリーンと作成されたプレイリストが含まれます。確定が拒否された場合は何も書き込まれず、次のように返されます。
| 問題 | ステータス | 意味と対処 |
|---|---|---|
schedule_import_invalid | 422 | 行にエラーがあります。修正してから、もう一度プレビューしてください |
schedule_import_stale | 409 | プレビュー後にスクリーン、メディア、プレイリスト、レベルが変更されたか、行の読み取り結果が変わりました。もう一度プレビューし、新しいフィンガープリントで確定してください |
GET /api/schedule/imports/template?format=csv と format=xlsx はテンプレートを返します。
制限
- 1シートにつき5,000行と8 MiBまで。
- 1つのスクリーンにつき独自レベル32まで。組織は、すべてのプロジェクトを合わせて最大100件のキャンペーンを持て、共有レベルはそれぞれ1件に数えられます。
- 1回の確定で書き込めるスクリーン独自のスケジュールは400件までです。フォルダーまたはタグの行は、任意の数のスクリーンに適用されます。
- インポート名は1~80文字です。