Troubleshooting
Safety Checks Not Sending or Not Showing
Diagnostic flow when Telegram safety pings appear broken.
If the Safety Checks panel on a site detail page shows zeros — or pings stop after the first miss — work through the steps below.
1. Confirm the worker is eligible
Open the worker's in-flight attendance record. The Worker Information card should show Telegram: Linked. The site must have Safety Checks: Enabled (Site Detail → site settings) AND your billing plan must include presence checks (a "not available on your plan" notice on the site form means the plan is the blocker).
2. Check the Site Attendance page for today
From Site Detail → View by date →. The Safety Checks table should show today's pings. If today shows zero but yesterday shows real pings, the site is just quiet — not broken.
3. Manually trigger a ping
On the Attendance Detail page, click Trigger presence check now. If the worker's phone buzzes within ~5 seconds, the entire pipeline is healthy and the only remaining issue would be the periodic scheduler (Huey).
4. If nothing happens, check the photo detail page
Find the most recent presence-check row in the Safety Checks table. Click its photo (if any). The photo detail page shows delivery_error. Common values:
chat not found— the worker has the chat_id stored but never tapped /start to actually open the bot. They need to send/startmanually.blocked— the worker blocked the bot. The system auto-unlinks them and notifies admins.rate_limited— Telegram throttled (too many messages in a short window). The system auto-retries after the cool-off; just wait.no_telegram_link— chat_id is null. The worker hasn't linked yet; have them tap the Telegram button on a check-in success page.
5. After a miss, the next ping is delayed
This is intentional. The cadence is: prior ping waits its grace window (default 15 min) → finalize-missed cron runs every 5 min → scan-due cron runs every 5 min and creates the next ping. So expect roughly grace + 0–10 min between a missed ping and the next one. With grace=15 and interval=5, that's ~15-25 min.
6. Same-day all-zero in the morning
If the page shows zero pings for today but you know they happened, this used to be caused by a UTC/local timezone bug — fixed in the timezone-localdate update. If you still see this, restart the Huey worker (Passenger restart doesn't restart Huey) via scripts/huey_keepalive.sh restart.
Was this helpful?
Last updated: May 3, 2026