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

69 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# seven-send
Kleine, wiederverwendbare **Library + CLI** zum Verschicken von **SMS** und
**TTS-Sprachanrufen** über die [seven.io](https://www.seven.io)-API. Bewusst
provider-fokussiert und schlank — als Baustein für beliebige Programme, Cron-Jobs
oder Monitoring-Alerts.
## Installation
```bash
pipx install git+https://kitux.de/forgejo/dschlueter/seven_send.git
# oder lokal zur Entwicklung:
pip install -e ".[dev]"
```
## CLI
```bash
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
```python
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:
```python
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
```bash
pip install -e ".[dev]"
pytest -q
```
## Lizenz
MIT — siehe [LICENSE](LICENSE).