Twinkle-Telefonbuch und CardDav

Um am PC über das Festnetz zu telefonieren verwende ich das Linux-Programm Twinkle. Es ist so konfiguriert, dass es auf die FritzBox als VoIP-Telefon zugreift.

Was mir bis jetzt gefehlt hat, war ein Zugriff von Twinkle auf meine Kontakte im Nextcloud. Mit vdirsyncer und einem kleinen Skript klappt dies jetzt auch.

Hier eine kurze Anleitung.

vdirsyncer

Um die Kontakte lokal als .vcf-Datei auf meinen Rechner zu bekommen, nutze ich vdirsyncer. Die Installation ist bei den meisten Linux-Distributionen mit

sudo apt-get install vdirsyncer

schnell erledigt. Anschließend muss die Konfiguration in der Datei ~/.config/vdirsyncer/config angelegt werden.

[general]
status_path = "~/.vdirsyncer/status/"

[pair kontakte]
a = "kontakte_lokal"
b = "kontakte_remote"
collections = ["from a", "from b"]

[storage kontakte_lokal]
type = "filesystem"
path = "~/.pim/contacts"
fileext = ".vcf"

[storage kontakte_remote]
type = "carddav"
url = "https://SERVER"
auth = "basic"
username = "USER"
password = "PASSWORT"
read_only = true

Über pair werden die lokalen mit den Server-Kontakten zur Synchronisation verknüpft. Die storage-Einträge legen den Speicherort und den Zugriff darauf fest. Um sicher zu gehen, dass die Kontakte auf dem Server nicht überschrieben werden, habe ich sie mit „read_only“ versehen.

Falls der Server ein selbst-signiertes Zertifikat verwendet, kann man über den verify_fingerprint die Zertifikatsprüfung umgehen.

Hier gibt es eine detaillierte Beschreibung von vdirsyncer.

Vor der Synchronisation lässt man über

vdirsyncer discover

den Server nach Adressbüchern durchsuchen. Bei erstmaliger Ausführung muss man bestätigen, dass das oder die Adressbücher lokal angelegt werden.

Die eigentliche Synchronisation startet man mit dem Befehl

vdirsyncer sync

Nun liegen die Kontakte lokal unter ~/.pim/contacts/<name_des_adressbuchs>/ als .vcf-Dateien.

Erstellen des Twinkle-Adressbuchs

Das Adressbuch von Twinkle ist in der Datei ~/.twinkle/twinkle.ab zu finden. Jede Zeile stellt einen Eintrag dar.

# first_name|infix_name|last_name|sip_address|remark

Für das Parsen der .vcf-Dateien und das Erstellen der Adressbuch-Datei habe ich mir ein kleines Skript erstellt.

#!/bin/bash
# Ermittelt Vorname und Nachname in einer vcf-Datei, die als Parameter übergeben wird
function finde_name() {
 datei_suche=$1
 nachname_gefunden=`awk -F: '{ if ($1=="N") {print $2}}' $datei_suche | head -1 | cut -d';' -f 1|tr -d "\015"`
 vorname_gefunden=`awk -F: '{ if ($1=="N") {print $2}}' $datei_suche | head -1 | cut -d';' -f 2|tr -d "\015"`
}

# Holen der vcf-Dateien vom Server
vdirsyncer sync

# Datei-Aufbau als erste Zeile schreiben
echo '# first_name|infix_name|last_name|sip_address|remark' > ~/.twinkle/twinkle.ab

# Durch alle vcf-Dateien laufen
for file in $(ls ~/.pim/contacts/contacts/*.vcf); do
 # Vor- und Nachname finden
 finde_name "$file"
 # Alle Telefonnummern suchen
 for nummer_gefunden in $(awk -F\; '{ if ($1=="TEL") {print $2 $3}}' $file | cut -d':' -f 2|tr -d [:blank:]|tr -d "\015"); do
  # Jede Telefonnummer als einzelnen Eintrag in das Telefonbuch schreiben
  echo "$vorname_gefunden||$nachname_gefunden|sip:$nummer_gefunden@fritz.box|" >> ~/.twinkle/twinkle.ab
 done
done

Zum Ermitteln des Kontakt-Namens verwendet das Skript den Eintrag N in der vcf-Datei. Dies entspricht dem detaillierten Namen. Der „friendly name“ FN in den Kontakten wird ignoriert.

In der Zeile, in der der Adressbucheintrag geschrieben wird, muss fritz.box gegebenenfalls durch den Sip-Server ersetzt werden.

Achtung! Das Skript überschreibt beim Ausführen das Twinkle-Adressbuch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.