wacrm/docs/automations-and-cron.md
Arnas Donauskas 029a20e407
fix(hostinger): recommend Managed Node.js Hosting, not VPS
Swaps the Hostinger recommendation on the landing page and throughout the
docs from VPS to Managed Node.js Hosting
(https://www.hostinger.com/web-apps-hosting).

The deploy walkthrough is rewritten around hPanel's Node.js app flow
(Git-based deploy, env vars panel, AutoSSL, cron via Advanced → Cron Jobs)
instead of a raw Ubuntu VPS with nginx + PM2 + certbot. VPS stays
mentioned at the bottom of the deploy page as an alternative when a
user actually needs one (background workers, custom binaries, etc.).

Also touched:
  - docs/README.md, environment-variables.md, automations-and-cron.md,
    troubleshooting.md to drop VPS-specific assumptions.
  - footer link URL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 21:02:10 +03:00

78 lines
2.3 KiB
Markdown

# Automations cron
WaCRM's **Automations** module lets you build flows that react to WhatsApp
events (new message, new contact, keyword match, schedule, etc.). Most
steps run inline — the exception is the **Wait** step, which parks the
execution in `automation_pending_executions` until its due time.
A cron job has to drain that table. If you skip this, Wait steps never
resume and any flow that uses them stalls.
## The endpoint
```
GET /api/automations/cron
Header: x-cron-secret: <AUTOMATION_CRON_SECRET>
```
- Returns `{ "processed": <n> }` with how many rows were claimed.
- Returns `503` if the env var is not set.
- Returns `401` if the header is missing or wrong.
The route claims up to 50 pending rows per call via a two-step
UPDATE-by-id so overlapping calls don't double-process.
## 1. Generate the secret
Any long random string works. One option:
```bash
openssl rand -hex 32
```
Copy the result into `AUTOMATION_CRON_SECRET` in your deployment env.
## 2. Schedule the pinger
### Option A — hPanel cron (Hostinger Managed Node.js)
hPanel → **Advanced → Cron Jobs** → add a new job set to every minute
(`* * * * *`). Command:
```
curl -s -H "x-cron-secret: <AUTOMATION_CRON_SECRET>" https://crm.example.com/api/automations/cron > /dev/null
```
Paste the literal secret — hPanel cron jobs don't inherit the Node app's
environment variables.
### Option B — external pinger
Any uptime monitor that supports custom headers works:
- [UptimeRobot](https://uptimerobot.com) — "Keyword Monitoring" with
custom HTTP headers.
- [Better Stack](https://betterstack.com).
- GitHub Actions with a `schedule:` trigger.
Hit the URL once per minute. Anything slower just means Wait-step
resolution is that much more delayed.
## 3. Verify
```bash
curl -s -H "x-cron-secret: <secret>" https://crm.example.com/api/automations/cron
# -> {"processed":0}
```
Then create a test automation with a short Wait step (e.g., 30 seconds)
and trigger it. Watch the automation's **Logs** tab — the execution
should resume and mark as completed within one cron interval of the wait
expiring.
## 4. What if you don't use Wait?
Skip this page. Trigger → inline steps → done flows do not need a cron —
they finish synchronously inside the webhook handler or from the UI. The
cron only matters for flows that park execution.