Repository navigation
v0.1.3
The voice channel — the top escalation rung. A phone call that speaks the
alarm and hangs up, via Twilio.
Read this before enabling it
This has never placed a real call. Every test runs against a local
server using Twilio's documented response shapes, not against Twilio. That
is enough to catch a great deal — it caught a bug that would have reported
every successful call as a failure — but it is not the same as having
worked. Treat your first call as the test, on a trial account, to one
number, while you are watching.Calls cost money, and an escalation ladder is designed to repeat. A rung
that telephones somebody every five minutes until acknowledged will bill for
every one of those calls.
What it does
One REST call to Twilio's Calls resource with inline TwiML: it speaks a short
script and hangs up. Nothing is exposed — no inbound endpoint, no callback
URL, no tunnel, no port forward.
The spoken script is deliberately terse because Twilio bills text-to-speech
per 100 characters, so a wordy alert is charged for being wordy.
Three things that will surprise you otherwise
It is on no default escalation ladder. Enabling voice is not enough: it is
configured, healthy, and will never ring anybody until you put it on a rung
yourself. A shipped default that telephones somebody at 3am the first time an
alarm fires is not a decision to make on your behalf.
The test button places no call. A test that costs money and wakes somebody
is not a harmless test, so it verifies your credentials against Twilio and
tells you plainly that it did not dial anyone. It does not prove your From
number can reach your recipients.
A call reports as delivered when Twilio accepts it, not when anybody
answers. Answered, busy, voicemail and no-answer are not distinguished in this
release, so the ladder keeps escalating on the basis that the call was placed.
It is a way of waking somebody, not proof that somebody woke.
Not in this release
Press 1 to acknowledge. The design for it is in docs/ARCHITECTURE.md §8
and it needs a Studio Flow authored by hand in the Twilio console plus a poller
for the collected digit. Acknowledge from the link in another channel, or from
the interface.
Also
A configured channel that fails to start is now reported at startup and in the
audit record. It was being recorded internally and read by nothing, so a
channel that could not deliver still looked enabled everywhere you would check.
Setup instructions are in docs/SETUP.md.
Verifying this release
Every binary is signed. Verification instructions, including how to
rebuild from source and compare hashes, are in
docs/RELEASING.md.
Linux / macOS — cosign (keyless, no key to trust in advance):
cosign verify-blob notifymatrix-linux-amd64 \
--bundle notifymatrix-linux-amd64.sigstore.json \
--certificate-identity-regexp '^https://github\.com/suburbazine/Unifi-Notification-Matrix/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
Download the .sigstore.json next to the binary; it carries the
signature, the certificate and the transparency-log proof. Keep
--certificate-identity-regexp — without it cosign verifies a
signature from anyone.
Build provenance (any platform):
gh attestation verify notifymatrix-linux-amd64 --repo suburbazine/Unifi-Notification-Matrix
Windows: the .exe is Authenticode-signed and timestamped.
Right-click → Properties → Digital Signatures, or:
Get-AuthenticodeSignature .\notifymatrix-windows-amd64.exe
This is source-available software under the
PolyForm Noncommercial License 1.0.0. Commercial use
requires a licence: licensing@xtremission.com
Full Changelog: v0.1.2.1...v0.1.3