pingrules
Route your app's events to Telegram and email by rules in one file.
Buy pingrules for $99One payment of $99, plus sales tax where it applies, and every future update. Delivered as a private GitHub repository you're invited to.
See it work
pingrules demo | sed -n '1p;/^5\./,$p'
pingrules demo: nothing leaves this machine; messages are printed where they would be sent.
5. The rules file breaks. The alert still reaches the fallback chat, with the reason.
-> telegram to 999:
Event: server_down
Sent by the fallback path because: the rules could not be read (RulesError: rules.json is not valid JSON: line 1)
host: web-1
server_down: fallback
skipped: rules-unreadable (rules.json is not valid JSON: line 1)
fallback (the rules could not be read (RulesError: rules.json is not valid JSON: line 1)): ok
6. The delivery log keeps no address, chat id, body or payload:
payment_failed: telegram=ok, email=ok
payment_failed: nothing sent
payment_failed: telegram=held, email=ok
server_down: telegram=ok
server_down: fallback-telegram=ok
What it does
pingrules sends your app's events to Telegram and email by a rules file you edit by hand. It reports each delivery leg by leg, and a fallback destination still alerts someone when the rules file itself breaks.
- Rules in one file
- Recipients, events with declared fields, and rules with conditions and templates. The file is read on every fire, so an edit takes effect at once and a broken file is noticed at once.
- Field conditions
- Ten operators, all/any, dotted paths into nested payloads, and numeric comparison that fails closed. No code and no regular expression in a condition.
- Quiet hours
- A window in a named time zone holds Telegram pings, but never the last leg that would reach someone. Urgent events and test fires go through.
- Test fire
- A real message marked [TEST FIRE], built from sample values and narrowable to one rule or one recipient.
- A delivery log with no personal data
- A capped JSONL file with the event, rule ids, the result of each leg and a scrubbed error, and never an address, chat id, message or payload.
- A fallback that survives a broken file
- A Telegram chat or email address set outside the rules, used when the rules cannot be read or every send failed.
- Telegram-safe text
- Shortens without cutting a tag, closes open tags, escapes values, and explains in words why hand-written HTML would be refused.
- Plain about its limits
- Nothing is sent without --send, a failed send is a failed send and never a quiet skip, and pingrules does not guarantee anyone reads an alert.
What you get
pingrules 1.0.1: the Python package and the pingrules command, an example rules file, and the full test suite, with 321 automated tests.
A commercial license. Use it and change it in your own projects and your clients' projects. Don't share or resell the source. Read the license.
Every update. New versions land in the same repository; git pull to get them.
Requirements
Python 3.10 or newer. Python 3.10 or newer, standard library only. A Telegram bot token and a Resend API key or an SMTP server to send for real; the demo needs none. tzdata is optional, for systems without a time zone database.
How buying works
- Enter your GitHub username. You'll see the account before you pay, so you can check it's yours.
- Pay $99, plus any sales tax shown at checkout, on Stripe's checkout page.
- Accept the invitation GitHub emails you. Signed in as that account, you'll also find it at
github.com/dominares-tools/pingrules/invitations. Invitations expire after 7 days; you can get a new one any time. - Clone and install:
git clone https://github.com/dominares-tools/pingrules.gitPrivate repo: sign in to GitHub on this computer first. Run
gh auth loginand choose HTTPS, or give git a personal access token when it asks for a password. To use an SSH key instead, clonegit@github.com:dominares-tools/pingrules.git.python3 -m venv .venv && . .venv/bin/activate pip install ./pingrules
Questions
Do I need GitHub?
Yes. Access is a read-only invitation to a private repository, sent to the GitHub account you choose.
Can I get a refund?
Yes, within 14 days, no questions asked. Access ends when the refund goes through. Refund policy.
Who takes the payment?
Payments are handled by Stripe, which works out sales tax. Your receipt and card statement show Link (LINK.COM*), Stripe's checkout service.
Something wrong?
Email support@dominares.org. Every buyer of a tool shares its repository, so support happens by email rather than in GitHub issues.