Purpose

This timer synchronizes SalesMsg broadcast and campaign data back into the Supabase CCP database. It ensures campaign tracking rows are updated with the latest results from the SalesMsg API on an hourly basis.

Schedule

OnCalendar=*:13:00 with RandomizedDelaySec=300s. Runs hourly at 13 minutes past the hour — the :13 offset is deliberate to avoid top-of-hour stampede with other timers. Up to 5 minutes additional jitter from RandomizedDelaySec.

Service

Runs sm-broadcast-sync.service, which executes the following Node.js script: /usr/bin/node /home/opsadmin/.openclaw/workspace/scripts/sync-salesmsg-broadcasts.js

Credentials loaded via EnvironmentFile=/home/opsadmin/.openclaw/master.env. SalesMsg uses query-param token auth (not HMAC) per CLAUDE.md webhook governance.

Failure behavior

The service is configured as a oneshot type. Failures are captured in the systemd journal. No automatic retry is configured within the unit file; the next attempt occurs at the following :13 mark.

Health signal

Verification can be performed via the systemd journal or by checking the campaign tracking rows in Supabase for recent update timestamps:

  • systemctl --user status sm-broadcast-sync.timer
  • journalctl --user -u sm-broadcast-sync.service