Proxmox VE
Proxmox VE (8.3 and later) has webhook notification targets with a fully templatable body, so backup results, replication failures, fencing events and update notices can land on your phone as Pinglet push. No glue service needed.
Setup
In the web UI, go to Datacenter → Notifications → Notification Targets → Add → Webhook:
| Setting | Value |
|---|---|
| URL | https://pinglet.dev/acme/proxmox |
| Method | POST |
| Header | Content-Type: application/json |
| Header | Authorization: Bearer {{ secrets.apikey }} |
| Secret | apikey = pinglet_<your key> |
| Body | see below |
{
"title": "Proxmox: {{ fields.hostname }}",
"message": "{{ escape title }}",
"level": "{{#if (eq severity "error")}}error{{else}}{{#if (eq fields.type "vzdump")}}success{{else}}info{{/if}}{{/if}}",
"priority": "{{#if (eq severity "error")}}urgent{{else}}silent{{/if}}",
"badges": { "type": "{{ fields.type }}" }
}
Replace acme/proxmox with your namespace and preferred topic name. The topic is created on the first notification. Storing the key as a webhook secret keeps it out of the world-readable notification config; secrets live in a root-only file.
Then point a notification matcher at the target (Datacenter → Notifications → Notification Matchers). A new matcher with no match rules sends it every notification and leaves the default email matcher as it is. Use Test on the target to check the wiring, then subscribe to the topic in the Pinglet app using the share link from your dashboard.
Backup jobs created on older releases may still use legacy email notifications, which bypass matchers and targets. Under Datacenter → Backup, check each job uses the notification system.
What arrives
The body maps Proxmox’s severity to Pinglet’s level and priority, so one target covers every event:
| Proxmox event | fields.type |
Level | Priority |
|---|---|---|---|
| Backup failed | vzdump |
error |
urgent |
| Replication job failed | replication |
error |
urgent |
| Node fenced | fencing |
error |
urgent |
| Backup succeeded | vzdump |
success |
silent |
| Updates available, mail for root | package-updates, system-mail |
info |
silent |
The push message is Proxmox’s notification title, for example vzdump backup status (pve1.lan): backup failed: storage 'nas' is not online, not its full body. See the notes below for why.
Backup heartbeat
A failed backup notifies; a backup that never runs (node off, job disabled) doesn’t. Webhook targets can send a GET, so a successful backup can check in to a heartbeat topic directly. Add a second webhook target:
| Setting | Value |
|---|---|
| Method | GET |
| URL | https://pinglet.dev/v1/ping/{{ secrets.token }} |
| Secret | token = the token from the heartbeat’s check-in URL |
Route to it with a matcher whose rules are all of: match field type = vzdump, and match severity info. To watch one job of several, also match field job-id (only scheduled jobs set it).
Notes
{{ escape ... }}JSON-escapes a value, quotes and newlines included, so free text can’t break the body. Use it for any free-text field.- The body sends
{{ title }}rather than{{ message }}on purpose. A backup notification’s message holds a table of every guest plus the full log of each, which for more than a handful of guests is far bigger than a push notification can carry. The full log stays in the task history, and in the email if you keep the default matcher.