QSmartQ Support

Campaigns · Reference

TV campaign Player assignments, scope, and save behavior

Explicit Player assignments override legacy label matching. Picker eligibility and scope determine what can be selected; saving a selection on an existing campaign is an immediate write.

Verified 2026-09-06 · Source 7d700cc3 · Requires product verification

What this does

Explicit Player assignments override legacy label matching. Picker eligibility and scope determine what can be selected; saving a selection on an existing campaign is an immediate write.

Before you start

  • Confirm whether you are editing an All locations campaign or a location campaign.
  • Use registered Campaign-capable Players in the intended scope.

Steps

  1. Open the campaign and its Player assignment controls.
  2. Review available Players and the Selected count.
  3. Select only the intended screens; do not rely on labels to add more Players when explicit assignments exist.
  4. On an existing campaign, Save selection persists the Player assignment immediately.
  5. For a new campaign, selections are staged until Create Campaign.

Current screenshot

390px actual campaign creation overview with stacked controls and Cancel, Back, Continue footer
390px actual campaign creation overview with stacked controls and Cancel, Back, Continue footer · Captured 2026-09-08 · Verified loaded correct heading and 390px child viewport, no horizontal overflow, then inspected the exact returned image. All overview controls and footer visible. No production I/O, secrets or debug overlays. Existing-edit image demonstrates a limitation, not successful access to other editor sections.
390px actual existing-campaign overview; inactive section tabs hidden and only Close/Save Changes shown, documenting the mobile navigation limitation
390px actual existing-campaign overview; inactive section tabs hidden and only Close/Save Changes shown, documenting the mobile navigation limitation · Captured 2026-09-08 · Verified loaded correct heading and 390px child viewport, no horizontal overflow, then inspected the exact returned image. All overview controls and footer visible. No production I/O, secrets or debug overlays. Existing-edit image demonstrates a limitation, not successful access to other editor sections.
Complete campaign overview with identity, orientation, playback mode, status and footer actions
Complete campaign overview with identity, orientation, playback mode, status and footer actions · Captured 2026-09-08 · Inspected loaded heading, controls and synthetic data before capture; inspected the returned image immediately. Complete footer and panel controls visible; no skeleton, debug overlay, browser chrome, credentials or private data. No production connection or writes; normal disabled/disconnected states are intentional. Narrow capture is a same-origin 390px browsing context, not physical-device acceptance.
Campaign content panel with synthetic assigned assets, menu cadence and disconnected TikTok prerequisite; not proof of saved assignment
Campaign content panel with synthetic assigned assets, menu cadence and disconnected TikTok prerequisite; not proof of saved assignment · Captured 2026-09-08 · Inspected loaded heading, controls and synthetic data before capture; inspected the returned image immediately. Complete footer and panel controls visible; no skeleton, debug overlay, browser chrome, credentials or private data. No production connection or writes; normal disabled/disconnected states are intentional. Narrow capture is a same-origin 390px browsing context, not physical-device acceptance.
Location campaign label targeting and exact-section help; not a group-location selector
Location campaign label targeting and exact-section help; not a group-location selector · Captured 2026-09-08 · Inspected loaded heading, controls and synthetic data before capture; inspected the returned image immediately. Complete footer and panel controls visible; no skeleton, debug overlay, browser chrome, credentials or private data. No production connection or writes; normal disabled/disconnected states are intentional. Narrow capture is a same-origin 390px browsing context, not physical-device acceptance.
Player assignment panel with publishing and JSON delivery disabled, synthetic assigned Player and save controls
Player assignment panel with publishing and JSON delivery disabled, synthetic assigned Player and save controls · Captured 2026-09-08 · Inspected loaded heading, controls and synthetic data before capture; inspected the returned image immediately. Complete footer and panel controls visible; no skeleton, debug overlay, browser chrome, credentials or private data. No production connection or writes; normal disabled/disconnected states are intentional. Narrow capture is a same-origin 390px browsing context, not physical-device acceptance.
Actual current-source new campaign Overview with empty name, default format and playback, five creation steps, and footer controls
Actual current-source new campaign Overview with empty name, default format and playback, five creation steps, and footer controls · Captured 2026-09-06 · Synthetic current-source fixture. Database writes, callable functions and storage I/O blocked; external connections blocked. No credentials, debug UI or production changes. Only the actual application modal backdrop is shown in the Player picker.
Current-source location campaign targeting with synthetic Bar screens label; explicit Player assignments have precedence
Current-source location campaign targeting with synthetic Bar screens label; explicit Player assignments have precedence · Captured 2026-09-06 · Synthetic current-source fixture. Database writes, callable functions and storage I/O blocked; external connections blocked. No credentials, debug UI or production changes. Only the actual application modal backdrop is shown in the Player picker.
Current-source Assign Players dialog with synthetic registered landscape Player, search, selected count, and Save selection
Current-source Assign Players dialog with synthetic registered landscape Player, search, selected count, and Save selection · Captured 2026-09-06 · Synthetic current-source fixture. Database writes, callable functions and storage I/O blocked; external connections blocked. No credentials, debug UI or production changes. Only the actual application modal backdrop is shown in the Player picker.
Current-source Content assignments with two synthetic assets, menu cadence, and disconnected TikTok state
Current-source Content assignments with two synthetic assets, menu cadence, and disconnected TikTok state · Captured 2026-09-06 · Synthetic current-source fixture. Database writes, callable functions and storage I/O blocked; external connections blocked. No credentials, debug UI or production changes. Only the actual application modal backdrop is shown in the Player picker.
Shelby Township campaign grid: separate schedule and status filters, existing campaign cards, and inherited parent campaign controls
Shelby Township campaign grid: separate schedule and status filters, existing campaign cards, and inherited parent campaign controls · Captured 2026-09-06 · User-approved live Shelby Township scope. Ordinary operational labels only. Account header, private identifiers, credentials, contact details, browser chrome, and debug overlays excluded by capture crop. No configuration changed.
Actual deployed campaign page at a 390-pixel mobile viewport: stacked controls and no New TV campaign or List/Grid switch
Actual deployed campaign page at a 390-pixel mobile viewport: stacked controls and no New TV campaign or List/Grid switch · Captured 2026-09-06 · User-approved live Shelby Township scope. Ordinary operational labels only. Account header, private identifiers, credentials, contact details, browser chrome, and debug overlays excluded by capture crop. No configuration changed.

Existing campaign editor navigation on narrow screens

At 820 CSS pixels or narrower, the current campaign editor CSS hides every section tab except the active one. Existing-campaign mode has Close and Save Changes, but no Back or Continue controls; those navigation buttons belong to creation mode. Opening an existing editor starts at Overview, so the inspected narrow-screen UI provides no visible way to switch to Schedule, Content, Targeting, or Assign Players. Use a desktop-width workspace for those editing sections. A Schedule screenshot obtained by selecting the tab on desktop and then resizing demonstrates responsive rendering only, not a working mobile navigation path. This is a current-source limitation, not a claim that mobile changes are automatically read-only.

Campaign-side asset selection has a separate save

The campaign Content panel filters the library by asset name and compatible orientation or exact Order Board placements. Show assigned only changes that display filter. At a location, inherited parent assets are locked unless the parent is managing that location campaign. The picker Selected count describes selected IDs, not currently playable assets. Save selection on an existing campaign commits assetIds, then synchronizes asset back-references; it is an immediate write independent of the main Save Changes button. A new campaign only stages selection. A synchronization failure can follow a successful campaign write, so reopen saved state before retrying.

Player orientation, location, and text filters

After registration/capability eligibility, the Player picker filters by the campaign location or selected target locations. A record without a locationId is not excluded by that location filter alone. Known Player orientation must match the campaign; unknown orientation is not excluded by the orientation check. Search matches Player name, location name, endpoint customer label, and labels together, case-insensitively. Clear search and check scope, orientation, registration, and capabilities when a screen is missing; do not change production targeting merely to test picker visibility.

TikTok rotation dependencies and maximum videos

Include TikTok videos uses the effective enabled parent connection first, otherwise the enabled location connection; a connection is considered available when marked connected or carrying a videos array. The toggle and Max videos per loop are unavailable without that connection and on Order Board campaigns. Maximum starts at 6 and is clamped to 1–20; blank or invalid input falls back to 6. Cached video count is informational, not proof of freshness or successful delivery. The editor stages these fields until saving. Provider refresh, approval, and native runtime insertion require separate verification and are not established by this editor control.

Campaign list on mobile versus desktop

At viewport widths up to 1023.98 CSS pixels, the campaign list forces grid cards and hides the List/Grid switch, New TV campaign, and per-card Edit buttons. Existing schedule/status filters, running-length details, and applicable assignment, analytics, and delete actions remain; mobile is not automatically read-only. Use a desktop-width workspace for the omitted creation/edit controls. Desktop List/Grid preference is remembered locally, not a campaign configuration change. The deployed Shelby Township list was inspected at 390 CSS pixels; this does not establish mobile parity for the editor or other products.

Explicit Players versus legacy labels

When a campaign has any explicit deviceIds, only a matching Player ID qualifies: labels cannot add other Players. When no explicit IDs remain, the helper falls back to an intersection of campaign labelIds and the Player's labels. An empty Player list is therefore not necessarily 'no targets'; clearing it may restore legacy label targeting. If both lists are empty, this matching helper returns false. Check the assignments before removing the last explicit Player.

Why a Player can be unavailable

The campaign assignment predicate excludes UNPAIRED, REVOKED, SUSPENDED, and CANCELED records. Current Player read-model records need the CAMPAIGNS capability. Other schema-versioned records must be REGISTERED, ACTIVE, OFFLINE_GRACE, or SHADOW_CREATED and carry CAMPAIGNS in moduleCapabilities. Older records without schemaVersion are grandfathered by this predicate. Offline status alone is not proof that a Player cannot be selected. Check registration, capabilities, and selected scope; contact Support for a misclassified record rather than re-pairing or deleting it blindly.

Save selection can persist immediately

In Assign Players, the Selected count is the current number of chosen IDs, not a count of online screens or guaranteed deliveries. Save selection updates deviceIds immediately on an existing campaign and reports Players assigned. On a new unsaved campaign it reports Players staged and requires Create Campaign. Closing the main editor after a successful picker save does not undo that already-persisted assignment. If Failed to assign Players appears, re-open the saved campaign to check its state before retrying.

Campaign name and create validation

Campaign name is required and trimmed on save; the new editor starts blank. Creation review also requires prepared campaign and signage IDs and at least one asset, BevQ TV menu, or TikTok rotation. A disabled campaign is a warning, not a substitute for a separate draft status. The main enabled toggle switches Enabled/Disabled. If creation reports that the campaign is still being prepared, wait for preparation and retry rather than creating duplicate campaigns.

Permissions and scope

  • Campaign route access is required. Player visibility is also constrained by scope, record type, registration, and capabilities; complete permission inheritance is not yet audited.

Mobile

  • The Player picker needs desktop and mobile production verification. No mobile parity claim is made from route coverage.

What happens next

Verify the saved result in the correct scope and delivery path. A preview or status badge is not proof that every production Player has refreshed.

Warnings

  • This source-reviewed guide describes the named paths only. Operational coverage and production visual verification are still in progress.

Was this helpful?