Recipe · Bash

Notify your phone from any shell script

The entire integration is one curl — no SDK, no client library, works from any script that can shell out to curl.

If a script can run curl, it can reach your phone. This is the whole integration — everything else in the recipes section is this same request, reshaped for a specific tool’s webhook format.

The one-liner

curl -X POST "https://<host>/events/<username>/<Channel%20Name>" \
  -H "Content-Type: application/json" \
  -d '{"title":"Job finished","message":"'"$(hostname)"' at '"$(date -Is)"'"}'

title and message are the only required fields. Everything else — priority, nature, dataJson, callback — is optional on the same payload; see the API contract for the full list.

A reusable function

Drop this in .bashrc or a shared script library and every job just calls notify:

notify() {
  local title="$1" message="$2" nature="${3:-}"
  curl -sS -X POST "https://<host>/events/<username>/Scripts" \
    -H "Content-Type: application/json" \
    -d "$(printf '{"title":%s,"message":%s%s}' \
      "$(jq -Rn --arg t "$title" '$t')" \
      "$(jq -Rn --arg m "$message" '$m')" \
      "${nature:+,\"nature\":\"$nature\"}")"
}

notify "Backup done" "$(hostname) — $(date)"
notify "Disk almost full" "/var at 94%" "critical"

jq -Rn --arg handles the JSON-escaping for you, so a message with quotes or newlines in it doesn’t break the payload — worth the one extra dependency the moment your messages aren’t hand-typed constants.