seven_send/README.md
Dieter Schlüter f7b791fdeb feat: seven-send 0.1.0 — Library + CLI für SMS und TTS-Anrufe via seven.io
Wiederverwendbarer Baustein (eigenes Paket), nutzbar in beliebigen Programmen,
Cron-Jobs und Alerts:

- client.py: synchroner SevenClient.send_sms / send_voice (Voice als SSML,
  XML-escaped); Result mit ok/code/price/error, best-effort Fehlerbehandlung,
  dry_run-Modus
- cli.py: `seven-send sms|voice` mit --dry-run, --json, sauberen Exit-Codes;
  API-Key aus --api-key oder $SEVEN_API_KEY
- src-Layout, pyproject (console_script seven-send), MIT-Lizenz
- 12 Tests (Client + CLI), httpx gemockt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 11:33:12 +02:00

1.8 KiB
Raw Blame History

seven-send

Kleine, wiederverwendbare Library + CLI zum Verschicken von SMS und TTS-Sprachanrufen über die seven.io-API. Bewusst provider-fokussiert und schlank — als Baustein für beliebige Programme, Cron-Jobs oder Monitoring-Alerts.

Installation

pipx install git+https://kitux.de/forgejo/dschlueter/seven_send.git
# oder lokal zur Entwicklung:
pip install -e ".[dev]"

CLI

export SEVEN_API_KEY=dein-key

seven-send sms   --to +4915112345678 --text "Hallo Welt"
seven-send voice --to +4915112345678 --text "Dies wird vorgelesen." --voice de-de-female

seven-send --dry-run sms --to +49… --text "nur testen"      # nichts senden
seven-send --json    sms --to +49… --text "..."             # maschinenlesbar

Exit-Codes: 0 Erfolg · 1 Sendefehler · 2 Konfig-/Aufruf-Fehler.

Library

from seven_send import SevenClient

c = SevenClient(api_key, sms_from="Notruf", voice_name="de-de-female")

res = c.send_sms("+4915112345678", "Hallo")
if not res:                      # bool(res) == res.ok
    print("Fehler:", res.error)

c.send_voice("+4915112345678", "Achtung, dies ist eine Ansage.")

SevenClient ist synchron. Aus asynchronem Code:

res = await asyncio.to_thread(c.send_sms, "+49…", "Hallo")

Konfiguration

Parameter Default Bedeutung
api_key seven.io API-Key (oder $SEVEN_API_KEY für die CLI)
sms_from Notruf Absender-ID der SMS (alphanumerisch, max. 11 Zeichen)
voice_from None Caller-ID für Anrufe (verifizierte Nummer)
voice_name de-de-female SSML-Stimme für die Anruf-Ansage
dry_run False nichts senden, nur protokollieren

Test

pip install -e ".[dev]"
pytest -q

Lizenz

MIT — siehe LICENSE.