Files
asterisk-voicemail/config/contacts.conf.example
jp 857284abbf Initial build: Asterisk voicemail transcription + portal
- 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.
2026-08-13 09:31:41 +01:00

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