- mailcmd replacement (vm_mailcmd.py): faster-whisper transcription (CPU int8), extractive summary + intent tags + spoken-digit number extraction, multipart/alternative HTML email, fail-safe relay of original message - Telegram DM delivery (vm_telegram.py) with per-mailbox routing - Caller-ID -> name (vm_contacts.py): file / google / carddav backends - SQLite store (vm_store.py) with content-addressed audio - FastAPI portal (vm_web.py): PIN login, list/play/delete, per-user settings, zero JS, loopback-only behind Apache TLS - Backfill importer (vm_import.py) for existing spool recordings - systemd unit, Apache vhost + certbot TLS, install.sh - Docs: INSTALL, CONFIGURATION, ARCHITECTURE, OPERATIONS, SECURITY, TESTING Verified end-to-end on mail.txt3.net: 157 historical messages backfilled, live voicemail -> transcribed -> stored -> visible at https://vm.txt3.net.
74 lines
2.7 KiB
Plaintext
74 lines
2.7 KiB
Plaintext
# /opt/vm-transcribe/contacts.conf
|
|
#
|
|
# Caller-ID -> name lookup for voicemail notifications.
|
|
# Re-read on every voicemail; no restart needed.
|
|
#
|
|
# chmod 640, owned root:asterisk - may contain a password.
|
|
|
|
[contacts]
|
|
# Master switch. If no, notifications just show the raw caller ID.
|
|
enabled = yes
|
|
|
|
# Which backends to try, in order, comma separated:
|
|
# file - a local vCard (.vcf) or CSV export. No auth, fast, works offline.
|
|
# google - Google People API using the Hermes OAuth token (recommended
|
|
# for Google accounts; see note about app passwords below).
|
|
# carddav - any CardDAV server with username + app password.
|
|
backends = file, google
|
|
|
|
# Successful and failed lookups are cached here to avoid hammering an API
|
|
# on every call. Delete the file to force a refresh.
|
|
cache_path = /var/lib/vm-transcribe/contacts_cache.json
|
|
cache_ttl = 86400
|
|
|
|
# Match on the last N digits of the number, so +447941223856,
|
|
# 07941223856 and 447941223856 all resolve to the same contact.
|
|
# 9 is a sane default for UK/US. Lower it only if you get misses.
|
|
match_digits = 9
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
[file]
|
|
# vCard (.vcf) or CSV exported from Google Contacts:
|
|
# contacts.google.com -> Export -> vCard (or Google CSV)
|
|
# This is the most reliable option: no tokens, no API limits, no network.
|
|
path = /var/lib/vm-transcribe/contacts.vcf
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
[google]
|
|
# Uses the OAuth token from the Hermes google-workspace skill, which must be
|
|
# authorised with the People API / contacts.readonly scope.
|
|
token_path = /var/lib/vm-transcribe/google_token.json
|
|
|
|
# Optional: refresh the local export from the People API on this schedule
|
|
# (seconds). 0 = only look up on demand. Bulk-syncing to the file backend is
|
|
# much faster per call than a live query.
|
|
sync_interval = 0
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
[carddav]
|
|
# Generic CardDAV with an app password.
|
|
#
|
|
# !! IMPORTANT: this will NOT work against Google. Google disabled basic
|
|
# !! authentication for CardDAV, CalDAV, IMAP, SMTP and POP on 2024-09-30;
|
|
# !! app passwords are rejected and Google's CardDAV now requires OAuth 2.0.
|
|
# !! Use the 'google' or 'file' backend for Google Contacts instead.
|
|
#
|
|
# These settings do work for Nextcloud, Fastmail, iCloud, Radicale, etc.
|
|
url =
|
|
username =
|
|
|
|
# App password (NOT the main account password). Generate one in your
|
|
# provider's security settings.
|
|
app_password =
|
|
|
|
# Some providers need an explicit addressbook path, e.g.
|
|
# Nextcloud: /remote.php/dav/addressbooks/users/<user>/contacts/
|
|
# iCloud: discovered automatically from the principal URL
|
|
addressbook_path =
|
|
|
|
verify_tls = yes
|
|
timeout = 20
|