Dashboard alerts and scheduled exports: alert on anything, send it anywhere
Every number on a Qvasa dashboard can be a sensor. Point a threshold at a widget and Qvasa watches it on a schedule; when it breaches, Qvasa sends a message — to Slack, to an email list, to a webhook of your own design, to SMS or PagerDuty — with the numbers, the breaching segments, links to the tickets behind them, and a rendered image of the dashboard attached. Separately, any dashboard can export itself as an image on a cadence and deliver it to the same kinds of destinations, so a morning snapshot lands in a channel before anyone opens the app.
Both are set up from a bar at the top of the dashboard itself — no separate admin screen, no scripting.
Before you start
Workflows must be enabled on your account, and your user needs permission to manage them. If you don't see Alerts & Exports in the sidebar or the bars described below, reach out to the Qvasa team.
Alert conditions live on a special dashboard type — an alert dashboard (a "workflow condition" dashboard). Scheduled exports work on any dashboard.
Your account has a cap on how many alert dashboards it can run at once. Ask the Qvasa team to raise it if you hit it.
Step 1: Build the alert dashboard
Open Alerts & Exports in the sidebar. The page lists every alert dashboard on the account with its conditions, current status (Alerting or OK) and last breach; click Create New Workflow Alert Condition (Dashboard) to start a new one.
Build it like any other dashboard: add rows, add widgets, set each widget's filters and date window. The window matters — a widget watching "the last hour" is what makes an alert about right now rather than about the month. Then click Edit in the top bar and click the bell icon on a widget to give it a threshold.
Once a widget has a condition, it says so on the dashboard: you can read every threshold on the board at a glance, and the command center bar across the top shows the alert's status, its schedules, its notification channels and its alert message.
You can put up to 5 conditions on one alert dashboard. They are ANDed: on each run, Qvasa checks them in order and notifies only when every condition is met, so a board with two conditions is "alert me when both of these are true at once".
Step 2: What you can alert on
Conditions attach to the numeric widget types in the library — hundreds of metrics across tickets, agents, messaging, queues and your own custom fields. There are three shapes, and each evaluates differently.
Single-value quick stats. One number compared against your threshold — tickets created in the last hour, agents online, median first reply time, backlog, anything the widget library counts as a single figure.
Formula quick stats. The five calculated quick stats — percentage, difference, sum, product and quotient — build a number out of two other widgets on the dashboard, then behave exactly like a plain quick stat. This is how you alert on a ratio nothing in the library measures directly, such as solves ÷ new tickets as a solve rate. (A quotient that divides by zero evaluates as 0.)
Grouped metrics — donut and horizontal bar charts. A grouped widget is many numbers at once: new tickets by priority, backlog by group, handle time by channel. One condition covers every segment. Qvasa compares your threshold against the single highest segment, so "above 40" means "alert me if any group goes over 40" — you don't set up one alert per group, and you don't miss a new group that appears later. When several segments are over the line, the alert names all of them (the top 5 by value) with their numbers, so the message tells you which queues are on fire, not just that something is.
Step 3: Tune the threshold
Fixed Number Threshold and Trigger Type — the number to compare against, and which direction breaches. Comparisons are strict: a value exactly on the threshold does not breach.
Recovery Threshold (optional) — once breached, the alert only resolves when the value crosses back past this number. Breach above 120, recover at 80, and a metric hovering at 120 can't flap between breaching and resolved all afternoon. Leave it blank to recover at the breach threshold.
Zero Values Will Trigger — only applies to "below threshold" alerts. A count of zero is technically under every threshold, and that is usually a quiet weekend rather than an incident, so by default zero doesn't page anyone. Turn it on when zero really is the emergency.
% vs Moving Average (optional) — require the value to also be at least this far from its own moving average, over a number of weeks you choose (the moving average compares the same window on the same weekday, week by week). Both checks must pass, which is how you say "more than 20 tickets and 25% above normal for a Tuesday afternoon" and stop alerting on busy-but-ordinary days. Direction is independent of the fixed threshold, so "above the number but below its average" is expressible too. Setting a percent converts the widget to a moving-average trend chart; clearing it converts it back.
On a grouped widget, a moving-average condition is evaluated per segment: each group is measured against its own baseline, and the alert fires if any group clears both checks — so a small queue doubling is caught even while a big queue looks normal. Segments with no history to average against can never breach.
Step 4: Choose where the alert goes
In the command center bar, click Channels under Notifications and pick up to 4 destinations:
Slack channel — a message in a verified channel, with the dashboard image attached and a View Dashboard button.
Email list or user group — the same alert as an email to a list of addresses or to a group of Qvasa users.
Outbound webhook — a JSON payload you design, POSTed to your endpoint (see below).
PagerDuty service — an event on a PagerDuty service.
SMS — a text to a group of verified phone numbers, where enabled on your account.
Each selected channel has an Also notify on resolve toggle. Turn it on for the channels that should hear the all-clear — typically the Slack channel gets both the breach and the recovery, while the webhook and the pager only get the breach.
The optional Capacity changes section goes one step further: an alert can apply a capacity rule when it breaches and restore the previous one when it resolves, so a queue spike can widen agent capacity automatically.
Step 5: Write the message
Click Alert Message to open the editor. A live preview at the top shows exactly what the breach and the recovery messages will say.
Subject — leads every Slack message and email subject. Leave blank for the default.
Preamble — your own text at the top of the alert body, before the generated details. This is where a runbook link and "page the on-call CX lead if this is still breaching in 15 minutes" belong.
Recovery subject and message — the same two fields for the all-clear.
Below that, Alert Body Content controls which generated pieces ride along. Turn off what your team doesn't read; keep what it acts on.
Breach description — the generated "135 (value) is above 120 (threshold)" sentence.
Segment breakdown — which groups breached, and by how much, on grouped conditions.
Moving-average details — the "% vs its 4-week average" sentences.
Dashboard image — a freshly rendered picture of the dashboard, attached to the alert. The chart is in the message; nobody has to log in to see the shape of the spike.
Dashboard link — the "View Dashboard" button in Slack, a link in email.
Capacity change lines — what a capacity-managing alert changed.
When the alerting widget inspects tickets, Inspected Ticket Details adds the specifics behind the number: the Zendesk ticket ID list, a clickable agent link per ticket, the current assignee's email, an @-mention of each assignee in Slack via their saved Slack user ID (Slack only — email and SMS never see mention markup), and a custom JSON payload per ticket shaped by a ticket payload definition.
One rule: the payload can't be emptied. Either keep the breach description or write a preamble of your own.
Custom webhook payloads
A webhook destination sends whatever JSON shape your endpoint expects. Create one under Outbound Webhooks: an HTTPS destination URL, an authentication strategy (none, HMAC-SHA256 signing, bearer token, basic auth or a custom API key header — all credentials stored encrypted), and the payload itself.
The payload is a JSON template. Reference any value the alert produces with {{ value }}, and search the value list to insert one at your cursor: the workflow and condition names, the breach description, the trigger direction, the threshold and the observed value, the inspected Zendesk ticket ids and their per-ticket payloads, the dashboard URL, and any capacity changes the alert made. A token that is the whole string is replaced with the real typed value, so numbers stay numbers and the ticket payloads block stays a nested object. Start from the default envelope or restructure it entirely — only four top-level keys are fixed (event_type, event_id, occurred_at, account_identifier) so receivers can rely on a stable envelope. A preview renders the exact body that will be POSTed, optionally filled with real ticket data.
Deliveries are attempted once, and Qvasa tracks successes, failures and the last error. A webhook auto-disables after the consecutive-failure count you set (or immediately on a 410 Gone), and the owner is emailed when it does.
Scheduled dashboard exports
Exports are the other half, and they need no conditions at all: on a cadence, Qvasa renders the dashboard as an image and delivers it. Open any dashboard and click the calendar icon next to its title to open the export bar.
Export Status — whether it's active, the last and next export, and whether the image covers the first tab or all tabs (all tabs sends one image per tab).
Schedules — up to 3. An export runs at most once an hour.
Destinations — up to 6 Slack channels, email lists and user groups; every destination gets the same image.
An export won't run until it has both a schedule and a destination — the status section says which one is missing. Each dashboard has one scheduled export.
Scheduling both
Alerts and exports share one scheduling engine: cron expressions in UTC, up to 3 schedules each, added with + Add Schedule in either bar. Alerts can evaluate as often as every minute; the schedule doubles as quiet hours, since an alert that isn't scheduled to run simply doesn't. A common pattern is two schedules on one alert: every 30 minutes through business hours, hourly overnight. For the cron field reference, presets and timezone recipes, see Scheduling alerts and dashboard exports with cron schedules.
What done looks like
On the alert dashboard, the status section reads Active with a next run time, each widget shows its threshold, and the Notifications section lists your channels. On an exporting dashboard, Export Status reads Exporting with a next export time and your destinations listed. From then on the dashboard works whether or not anyone is looking at it: it watches the numbers, and it sends them where they need to go.
Troubleshooting
No bell icon on a widget. Bells only appear in edit mode, on alert dashboards, and only on conditionable widget types — a table or a time-series chart can't carry a threshold. Use a quick stat, a formula quick stat, or a donut/horizontal bar.
The alert never fires. It needs all three: a schedule, at least one widget condition, and a notification channel. The status section lists what's missing. Check the widget's own date window too — a threshold on a 30-day window moves slowly by design.
A moving-average condition never triggers. Segments with no baseline (no data in the prior weeks) can never breach, and both checks must pass. Widen the weeks, or drop the percentage to test with the fixed threshold alone.
The alert flaps. Set a recovery threshold so the value has to travel back past a second number before the incident closes.
A webhook stopped delivering. It may have auto-disabled after repeated failures or a
410 Gone; its row shows the status and the last error. Fix the endpoint and re-enable it.






