Asterisk 13.8-cert4 + PJSIP + AEL & Telekom VoIP

Nachdem an meinem Anschluss nun endlich VDSL mit Vectoring angeboten wurde, habe ich den 50 MBit/s Downstream und 10 MBit/s Upstream nicht widerstehen können und meinen Vertrag auf Magenta-M umgestellt. Bisher hatte ich 1.2MBit/s Downstream und 0.5MBit/s Upstream. Jetzt bekomme ich die volle Bandbreite.

Besonderheiten bei der Umstellung

Ich bin an verschiedenen Hürden hängen geblieben:

  1. Entgegen der Zusage im T-Punkt bekam ich keinen Anruf unmittelbar vor der Umstellung.
    Meinen Splitter und NTBA habe ich abgebaut, nachdem meine Fritz!Box die neue Datenrate anzeigte.
  2. Die Telekom unterstützt meiner Erfahrung nach ausschließlich UDP (User Datagram Protocol) und damit keinerlei Verschlüsselung. Sehr schade!
  3. Die Telekom kann nach meiner Erfahrung ausschließlich die alaw Kodierung. Mit ulaw kommt sie nicht zurecht.
    Das habe ich bemerkt, weil ich den Anrufer gehört habe, er mich aber nicht.
    Da VoIP getrennte Wege für den Verbindungsaufbau und die Sprachpakete unterstützt, dachte ich erst, ich hätte ein Problem mit NAT (Network Address Translation).
    Falls sich jemand fragt, warum ich trotz VoIP keine HD-Telefonie (G722) verwende, habe ich eine einfache Antwort:
    Meine Türsprechstelle ist ein analoger Anschluss der die DTMF Signale INBAND benötigt und meine Fritz!Box unterstützt an den analogen Anschlüssen kein G722. Wenn jemand hierfür eine Lösung hat, würde ich mich über eine eMail freuen.
  4. Die Telekom verlangt bei jeder Registrierung und jedem ausgehenden Ruf eine Autentifizierung. Das ist grundsätzlich gut!
  5. Bei einem eingehenden Anruf schickt die Telekom unter Umständen mehrere INVITE Telegramme und nur eines davon muß erfolgreich sein.
    Bei der Analyse meiner Konfiguration von pjsip.conf hat mich das sehr in die Irre geleitet.
  6. Der VoIP Server der Telekom wechselt im laufe eines Tages, bei gleichem Namen, seine IP-Adresse. Das heißt bei jedem Zugriff ist erst die aktuell Adresse über das DNS (Domain Name System) zu ermitteln.
    Das habe ich gemerkt, als ich keine ausgehenden Anrufe machen konnte. Die Telekom meldete 403 Forbidden.
    Aus diesem Grunde musste ich bei Asterisk von chan_sip auf chan_pjsip umsteigen. (https://community.asterisk.org/t/asterisk-dns-cache/66237)
  7. Bei der Umstellung des Vertrages aktiviert die Telekom bei allen umgestellten Rufnummern die Sprachbox. Nach 25 Sekunden übernimmt diese automatisch den eingehenden Anruf.
    Nachdem mein Anrufbeantworter in Asterisk erst nach 30 Sekunden startete musste ich die Sprachboxübernahme nach 25 Sekunden bei allen Nummern abschalten. Das geht im Internet relativ elegant. (https://telefoniecenter.t-online.de/fcc)
  8. Damit auch meine Schwiegermutter klar kommt habe ich eine persönliche Ansage auf meine Sprachbox gesprochen und die Sprachbox für den Fall einer Unterbrechung zu meinem Asterisk aktiviert (Offline-Rufannahme). Wenn es also Probleme gibt, hört man wenigstens meine Stimme.
  9. Ich habe im Internet nur wenige Beispiele für eine PJSIP Konfiguration gefunden und keines davon passte für die Telekom.
    Das war der Grund für diese Seite.
  10. Asterisk hat einen Übersetzungsfehler (21.01.2017). Im Zahlenbereich wurde at mit beim übersetzt. (https://www.asterisksounds.org/de/sounds/digitsat) Das ist grundsätzlich richtig. Bei der Ansage der Uhrzeit wäre um aber passender. Das habe ich bereits per Feedback Formular gemeldet. Mal sehen, ob und wann sich jemand meldet.

Die Umstellung im Detail

Ich habe also von meinem vorhandenen ISDN Anschluss auf VoIP umstellt. Ich dachte ich hätte damit auch kein Problem, da ich bereits 10 Rufnummern besaß und hausintern bereits mit IP Telefonen und Asterisk 11 arbeitete.

Aus meinen schlechten Erfahrungen mit der Leistungsfähigkeit der Fritz!Box 7390 wollte ich das Asterisk nicht mehr mit der Fritz!Box verbinden, sondern direkt beim Telekom Server anmelden. Die Fritz!Box sieht hierfür auch einen Schalter in der Firewall-Einstellung vor.

Die Geräte an der Fritz!Box sollten sich per VoIP ebenfalls an das Asterisk anbinden. Die 10 Rufnummern sollten direkt vom Asterisk zum Telekomserver gehen.

Dazu habe ich den Geräten an der Fritz!Box jeweils eine Rufnummer mit IP-Adresse zugeordnet. Mit diesem Trick verbindet sich die Fritz!Box statt mit einem SIP-Provider im Internet mit der Asterisk Software im Heimnetz und jedes Gerät ist einzeln erreichbar.

Der nächste Schritt war die Installation von Asterisk. Da im Ubuntu 16.04.1 die Asterisk Version 13.1.0 bereit gestellt wird und ich diese nicht zum Laufen brachte, habe ich mich für die zertifizierte Version 13.8-cert4 entschieden. Mit wenigen Eingaben war das erledigt.

Anleitung hierzu fand ich auf diesen Seiten:
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions
http://linoxide.com/ubuntu-how-to/install-asterisk-13-ubuntu-16-04-source/
https://wiki.asterisk.org/wiki/display/AST/Building+and+Installing+pjproject#BuildingandInstallingpjproject-bundled

Ich habe diese Anleitung auch noch einmal auf einem meiner Raspberry Pi 2 ausprobiert. Auf dem Raspbian Jessie waren die folgenden Module zusätzlich erforderlich: sudo apt install libncurses-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev automake libspeex-dev libspeexdsp-dev libgsm1-dev libsrtp-dev libssl-dev

Dann habe ich mir gedacht, dass ein Link zur Quelle für die SSH Bedienung des Raspberry Pi auch nicht schlecht wäre: cd Downloads wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/asterisk-certified-13.8-cert4.tar.gz wget https://www.asterisksounds.org/sites/asterisksounds.org/files/sounds/de/download/asterisk-sounds-core-de-2.11.19.zip wget https://www.asterisksounds.org/sites/asterisksounds.org/files/sounds/de/download/asterisk-sounds-extra-de-2.11.19.zip

Ab hier geht es dann wieder normal weiter:

cd /usr/src sudo tar zxvf asterisk-certified-13.8-cert4.tar.gz cd asterisk-certified-13.8* sudo ./contrib/scripts/install_prereq sudo ./configure --with-pjproject-bundled

Da ich meinen Dialplan in AEL formulieren wollte, musste ich das Modul pbx_ael zusätzlich aktivieren. sudo make menuselect

Nun musste noch normal übersetzt werden. sudo make sudo make install sudo make samples sudo make config sudo make install-logrotate sudo /etc/init.d/asterisk status

Natürlich wollte ich als ordentlicher Linux Anwender den Asterisk-Server nicht mit Root-Rechten laufen lassen.
http://www.voip-info.org/wiki/view/Asterisk+non-root

sudo useradd asterisk sudo chown --recursive asterisk:asterisk /var/lib/asterisk sudo chown --recursive asterisk:asterisk /var/log/asterisk sudo chown --recursive asterisk:asterisk /var/run/asterisk sudo chown --recursive asterisk:asterisk /var/spool/asterisk sudo chown --recursive asterisk:asterisk /usr/lib/asterisk sudo chmod --recursive u=rwX,g=rX,o= /var/lib/asterisk sudo chmod --recursive u=rwX,g=rX,o= /var/log/asterisk sudo chmod --recursive u=rwX,g=rX,o= /var/run/asterisk sudo chmod --recursive u=rwX,g=rX,o= /var/spool/asterisk sudo chmod --recursive u=rwX,g=rX,o= /usr/lib/asterisk sudo chown --recursive root:asterisk /etc/asterisk sudo chmod --recursive u=rwX,g=rX,o= /etc/asterisk sudo chmod g+w /etc/asterisk/voicemail.conf sudo chmod g+w,+t /etc/asterisk sudo nano /etc/logrotate.d/asterisk
create 640 asterisk asterisk

Nun fehlen noch die deutschen Ansagen. Die Anleitung hierzu gibt es hier: https://www.asterisksounds.org/de/download

sudo mkdir /var/lib/asterisk/sounds/de sudo unzip ~/Downloads/asterisk-sounds-core-de-2.11.19.zip -d /var/lib/asterisk/sounds/de/ sudo unzip ~/Downloads/asterisk-sounds-extra-de-2.11.19.zip -d /var/lib/asterisk/sounds/de/

Für meine Ansagen zur Müllabholung und für unerwünschte Anrufe habe ich spezielle Ansagen.

sudo cp Sound/*gsm /var/lib/asterisk/sounds/de/

Jetzt müssen alle Dateien noch den richtigen Benutzer und Gruppe sowie die passenden Rechte bekommen.

sudo chown -R asterisk:asterisk /var/lib/asterisk/sounds/de sudo find /var/lib/asterisk/sounds/de -type d -exec chmod 0775 {} \; sudo find /var/lib/asterisk/sounds/de -type f -exec chmod 0666 {} \;

Nun fehlt noch die persönliche Ansage für den Anrufbeantworter mit passendem Benutzer und Gruppe. Natürlich ist <NUMBER> durch die interne Rufnummer des Anrufbeantworters zu ersetzen.

sudo cp VoiceMail/<NUMBER>/unavail.gsm /var/spool/asterisk/voicemail/default/<NUMBER>/ sudo chown asterisk:asterisk /var/spool/asterisk/voicemail/default/<NUMBER>/unavail.gsm

Anschließend habe ich die zu ändernden Dateien vorab gesichert (mv) und zurück kopiert (cp). Mit diesem Trick behalten die Original-Dateien ihren Zeitstempel.

sudo mv /etc/asterisk/ari.conf /etc/asterisk/ari.conf.org sudo mv /etc/asterisk/asterisk.conf /etc/asterisk/asterisk.conf.org sudo mv /etc/asterisk/extensions.ael /etc/asterisk/extensions.ael.org sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.org sudo mv /etc/asterisk/indications.conf /etc/asterisk/indications.conf.org sudo mv /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.org sudo mv /etc/asterisk/pjsip_wizard.conf /etc/asterisk/pjsip_wizard.conf.org sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.org sudo mv /etc/asterisk/sip_notify.conf /etc/asterisk/sip_notify.conf.org sudo mv /etc/asterisk/res_parking.conf /etc/asterisk/res_parking.conf.org sudo mv /etc/asterisk/voicemail.conf /etc/asterisk/voicemail.conf.org sudo cp /etc/asterisk/ari.conf.org /etc/asterisk/ari.conf sudo cp /etc/asterisk/asterisk.conf.org /etc/asterisk/asterisk.conf sudo cp /etc/asterisk/extensions.ael.org /etc/asterisk/extensions.ael sudo cp /etc/asterisk/indications.conf.org /etc/asterisk/indications.conf sudo cp /etc/asterisk/pjsip.conf.org /etc/asterisk/pjsip.conf sudo cp /etc/asterisk/pjsip_wizard.conf.org /etc/asterisk/pjsip_wizard.conf sudo cp /etc/asterisk/res_parking.conf.org /etc/asterisk/res_parking.conf sudo cp /etc/asterisk/voicemail.conf.org /etc/asterisk/voicemail.conf

Der nächste Schritt war die

Konfiguration

ari.conf

Ich habe keine Verwendung für ARI und habe es zur Vermeidung einer Fehlermeldung deaktiviert.

sudo nano /etc/asterisk/ari.conf
[general] enabled = no

asterisk.conf

Die Verzeichnisse sind in einem Makro genannt und entsprechen der Grundeinstellung. Das habe ich unverändert gelassen.

sudo nano /etc/asterisk/asterisk.conf
[directories](!) astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk astsbindir => /usr/sbin

In den Optionen habe ich den Sprach-Prefix eingeschaltet. Als Benutzer und Gruppe habe ich asterisk eingestellt und die Sprache habe ich auf Deutsch umgestellt. Die Hilfe habe ich auf Englisch gelassen.

[options] languageprefix = yes runuser = asterisk rungroup = asterisk defaultlanguage = de

extensions.ael

Hier wird es jetzt etwas komplizierter. Als erstes habe ich ein Makro, dass eine Nachricht abspielt und anschließend auflegt. Das brauche ich für meine Ansagen zur Müllabholung und für unerwünschte Anrufer.

sudo nano /etc/asterisk/extensions.ael
macro macro-playback(messagename) { Answer(); Playback(${messagename}); Hangup(); Set(HangupDone=True); return; }

Das zweite Makro reduziert die eingehende Telefonnummer auf den Teil, der auch im Telefonbuch der lokalen Telefone gespeichert ist. Damit funktioniert die Anzeige des Namens des Anrufers. Die Telekom überträgt die Rufnummer des Anrufers im kanonischen Format (+XX...), was meine Telefone nicht zuordnen können.

macro macro-reduce-callerid-number(stateprefix,countryprefix) { Set(NewNumber=${CALLERID(num)}); Set(NewNumber=${STRREPLACE(NewNumber,"+","00",1)}); Set(NewNumber=${STRREPLACE(NewNumber,${stateprefix},"0",1)}); Set(NewNumber=${STRREPLACE(NewNumber,${countryprefix},"",1)}); Set(CALLERID(num)=${NewNumber}); return; }

Das dritte Makro filtert unerwünschte Anrufer heraus und sende denen nur eine Ansage. Statt der drei Punkte sind weitere Rufnummern einzutragen.

macro macro-ignore-advertising(callernumber) { switch (${callernumber}) { case 01234567890: ... { &macro-playback("unerwuenscht"); break; }; default: ; }; return; }

Das vierte Makro arbeitet die eingehenden Anrufe ab. Nach 30 Sekunden Klingeln geht die Voicebox ran. Die Sprachbox würde nach 25 Sekunden ran gehen und muss daher abgeschaltet werden. (siehe oben)

macro macro-handle-call(device,voicebox) { &macro-reduce-callerid-number("0049","01234"); &macro-ignore-advertising(${CALLERID(num)}); if ("${HangupDone}" != "True") { Dial(Local/${device}@from-internal,30); VoiceMail(${voicebox},su); }; return; }

Das fünfte Makro behandelt die ausgehende Anrufe. Hier kann jedem abgehenden Anruf ein ENDPOINT zugewiesen werden um die richtige CallerID an den Angerufenen zu senden. <ENDPOINT> ist durch den Namen des Endpunktes im PJSIP.CONF zu ersetzen.

Ergänzung: Mit der Verwendung von PJSIP muss das natürlich auch beim Dial angegeben werden.

macro macro-do-call(device,target) { switch (${device}) { case 20: { Dial(PJSIP/${target}@<ENDPOINT>); break; }; default: { Log(NOTICE, Unknown Device "${device}"); }; }; return; }

Im Kontext ansagen können die Textansagen abgerufen werden

context ansagen { // Feste Ansagen 1 => &macro-playback("text_Restmuell"); 2 => &macro-playback("text_Biotonne"); 3 => &macro-playback("text_Gelbersack"); 4 => &macro-playback("text_Papier"); 5 => &macro-playback("text_Restmuell_Biotonne"); 6 => &macro-playback("text_Restmuell_Gelbersack"); 7 => &macro-playback("text_Restmuell_Papier"); 8 => &macro-playback("text_Biotonne_Gelbersack"); 9 => &macro-playback("text_Biotonne_Papier"); 10 => &macro-playback("text_Gelbersack_Papier"); 11 => &macro-playback("text_Restmuell_Biotonne_Gelbersack"); 12 => &macro-playback("text_Restmuell_Biotonne_Papier"); 13 => &macro-playback("text_Restmuell_Gelbersack_Papier"); 14 => &macro-playback("text_Biotonne_Gelbersack_Papier"); 15 => &macro-playback("text_Restmuell_Biotonne_Gelbersack_Papier"); };

Im Kontext from-internal werden die internen Rufnummern definiert. Die jeweiligen Platzhalter AA, BB, CCC, DD, EE und FF sind durch die gewünschte Rufnummer zu ersetzen. Dabei sind DD, EE und FF reale Telefone, BB der Anrufbeantworter zu DD und CCC bietet die Möglichkeit den Anrufbeantworter von DD direkt zu besprechen. In meinem Fall haben die realen Telefone zweistellige Nummern ab 20 um sie direkt anrufen zu können. Die Rufnummern 01234567890 und 01234567891 sind Platzhalter für Nummern der Telekom bestehend aus Vorwahl inklusive führender Null und Telefonnummer. Dieses Beispiel enthält also gleich mehrere Tricks:

  1. Mit der Angabe mehrer Rufnummern im Dial Kommando ist ein Sammelruf leicht zu machen. Sobald der erste abhebt hören die anderen Apparate auf zu klingeln.
    Asterisk wartet aber auf das Ende des Dial Kommandos, bevor der nächste Befehl abgearbeitet wird. Für einen Sammelruf muss also erst einmal der gesamte Dialstring zusammengesetzt werden, bevor das Dial Kommando gestartet wird.
  2. Mit dem SHELL Kommando frage ich den Wert einer Gruppe in FHEM ab. Abhängig vom Wert lasse ich das Telefon FF mit klingeln oder nicht.
  3. Jeder Anrufbeantworter braucht einen hint der aufsteigend nummeriert werden muss. Warum auch immer.
  4. Das _NX Pattern leitet jede zweistellige Rufnummer ab 20 aufwärts direkt zum jeweiligen Telefon, ohne Anrufbeantworter.
  5. Mit dreistelligen Rufnummern kann ich Ansagen direkt in die angegebene VoiceMail speichern. Das verwende ich für meinen Müllkalender im FHEM, der täglich um 20:00 geprüft wird.
  6. Jede Rufnummer mit vier und mehr Ziffern wird über den angegebenen ENDPOINT nach außen gewählt.
    <ENDPOINT> ist durch den Namen des Endpunktes in pjsip.conf zu ersetzen.
    Mit dieser Konfiguration würde jedes Telefon mit der selben Rufnummer nach draußen telefonieren. Durch mein Makro macro-do-call unterscheide ich die ausgehende Rufnummer je nach der Rufnummer des internen Teilnehmers, der den Anruf tätigt. (Hauptnummer / Büro / Fax / ...)

Ergänzung: Bei externen Nummern muss natürlich auch das macro-do-call genutzt werden.

context from-internal { AA => { // Sammelruf Set(DialString=PJSIP/DD&PJSIP/EE); if ("${SHELL(echo 'list <GROUPNAME>'|netcat -w1 localhost 7072|grep ' STATE'|awk '{print $2}'):0:-1}" = "off") Set(DialString=${DialString}&PJSIP/FF); DIAL(${DialString}); }; hint(1) BB => VoiceMailMain(${EXTEN},s); // Anrufbeantworter _NX => Dial(PJSIP/${EXTEN}); CCC => VoiceMail(BB,s); // Direktansage _XXX. => &macro-do-call(${CALLERID(num)},${EXTEN}); };

Im Kontext from-external werden eingehende Anrufe verarbeitet. Mein Beispiel für einen papierlosen Faxempfang zeigt noch eine Besonderheit. Nach dem Empfang eines Faxes setze ich über FHEM (setvoicemailed) eine Gruppe um das Fax anzuzeigen. <NAME> ist durch den anzuzeigenden Namen des Faxgerätes zu ersetzen.

context from-external { 01234567890 => &macro-handle-call(DD,BB); 01234567891 => { // Fax Set(LOCALSTATIONID=<NAME>); ReceiveFAX(/var/spool/asterisk/fax/${CDR(start)-${CDR(src)}}.tif); SYSTEM(/usr/bin/setvoicemailed); Hangup(); }; };

extensions.conf

Diese Datei habe ich gelöscht, da ich AEL verwende.

indications.conf

Hier habe ich auf die deutschen Tonsignale umgestellt

sudo nano /etc/asterisk/indications.conf
[general] country=de

pjsip.conf

Fangen wir mal mit den Grundlagen an. Die Telekom benötigt als Transport UDP und für alle ausgehenden Rufe gibt es einen T-Online Server.

sudo nano /etc/asterisk/pjsip.conf
[transport-udp] type=transport protocol=udp bind=0.0.0.0 [T-Online] type=aor contact=sip:tel.t-online.de

Dann habe ich mir ein paar Makros geschrieben um die gemeinsamen Einstellungen für alle Rufnummern nur an einer Stelle eintragen zu müssen. Für jede Rufnummer, deren Anruf Asterisk entgegen nehmen soll, sind drei Einträge erforderlich.
Das erste Makro gilt für die Registrierung, bei der Asterisk sich beim Telekom Server für eingehende Anrufe anmeldet:
Ich hatte das Problem, dass mehrmals die Woche eingehende Anrufe weder bei meinem Asterik ankamen, noch ein Rufzeichen oder die Sprachbox bekamen. Daher habe ich gemäß der Anleitung von Dr. Martin Rother (http://www.rotherland.de/de/voip.html) das Interval auf 8 Minuten (480s) verkürzt. Mal sehen ob es jetzt besser wird.

Ergänzung: Seit der Umstellung vor ca. zwei Monaten ist nie wieder ein Fehler aufgetreten. Die 480s scheinen die Lösung zu sein.

[registration-basics](!) type=registration transport=transport-udp server_uri=sip:tel.t-online.de retry_interval=60 forbidden_retry_interval=600 expiration=480 line=yes

Das zweite Makro gilt für die Autentifizierung bei der Telekom:

[registration-auth-basics](!) type=auth auth_type=userpass password=123456789 realm=tel.t-online.de

Das dritte Makro gilt für die Rufnummer, an die der eingehende Anruf weiter gegeben werden soll:

[registration-endpoint-basics](!) type=endpoint transport=transport-udp context=from-external disallow=all allow=alaw direct_media=no from_domain=tel.t-online.de force_rport=false aors=T-Online

Für jede Rufnummer, für die sich Asterisk registrieren soll, sind die folgenden Einträge erforderlich. <NAME> ist durch eine eindeutige Kennzeichnung der Verbindung zu ersetzen. Ich habe mich nicht getraut Leerzeichen zu verwenden. Der endpoint bestimmt die Zielrufnummer mit der ein eingehender Anruf in extensions.ael ankommt.

[<NAME>](registration-basics) outbound_auth=<NAME> client_uri=sip:01234567890@tel.t-online.de contact_user=01234567890 endpoint=<NAME> [<NAME>](registration-auth-basics) username=01234567890 [<NAME>](registration-endpoint-basics) outbound_auth=<NAME> from_user=01234567890

Nun geht es mit den internen Telefonen weiter. Das erste Makro gilt für die Anmeldung am Asterisk. Damit die DTMF Codes auch richtig funktionieren ist am Telefon RFC2833 sowie DTMF und bei Asterisk inband anzugeben. Mit dieser Einstellung kann man bei einer analogen Türsprechstelle den Türöffner bedienen und der Asterisk Anrufbeantworter läßt sich auch bedienen.

[endpoint-basics](!) type=endpoint transport=transport-udp context=from-internal dtmf_mode=inband disallow=all allow=alaw

Das zweite Makro gilt für die Autentifizierung am Asterisk. Da alle Telefone bei mir mit dem selben Passwort angemeldet sind, habe ich es in das Makro geschrieben.

[auth-basics](!) type=auth auth_type=userpass password=12345678

Das dritte Makro gilt für die Rufnummer, die zu kontaktieren ist.

[aor-basics](!) type=aor max_contacts=1

Für jedes interne Telefon, das mit Asterisk genutzt werden soll, sind die folgenden Einträge erforderlich. <NUMBER> ist durch die interne Rufnummer des jeweiligen Telefons zu ersetzen. Wenn dem jeweilige Telefon ein Anrufbeantworter zugeordnet ist, sind die Zeilen mailboxes und mwi_from_user einzutragen. <VOICEMAIL> ist durch die interne Rufnummer der jeweiligen VoiceMail zu ersetzen. Auch wenn der aor Eintrag keine individuellen Informationen hat, so kann trotzdem kein gemeinsamer Eintrag genutzt werden. Es hat bei mir nicht funktioniert.

[<NUMBER>](endpoint-basics) auth=<NUMBER> aors=<NUMBER> mailboxes=<VOICEMAIL>@default mwi_from_user=<NUMBER> [<NUMBER>](auth-basics) username=<NUMBER> [<NUMBER>](aor-basics)

Sollen an einem Telefon mehrere Anrufbeantworter angezeigt werden, so sind die VoiceMail Nummern mit Komma in mailboxes anzureihen und der folgende Schalter zu setzen.
Für das Fritz!Fon MT-F hat das bei mir nicht funktioniert.

aggregate_mwi=yes

pjsip_wizard.conf

Diesen Inhalt dieser Datei habe ich gelöscht, da ich den Wizard nicht verwende, es aber ohne die Datei eine Fehlermeldung gibt.

sip.conf

Diese Datei habe ich gelöscht, da ich PJSIP verwende.

sip_notify.conf

Diese Datei habe ich gelöscht, da ich PJSIP verwende.

res_parking.conf

Den Inhalt dieser Datei habe ich auf diese Zeile reduziert um keine Störungen durch den Parkplatz zu haben.
Meine Telefone unterstützen eigenständig das Vermitteln von Gespächen an andere Apparate.

sudo nano /etc/asterisk/res_parking.conf
[default]

voicemail.conf

Allgemein habe ich die Aufzeichnung im alaw Format der Telekom festgelegt. Die Verwendung von eMail habe ich gesperrt. Bereits gehörte Nachrichten werden nicht automatisch verschoben. Die VoiceMail Nummern gehören zu den internen Nummern. Nach dem Aufzeichnen einer Nachricht wird das Vorhandensein in FHEM (setvoicemailed) über eine Gruppe angezeigt. Das Zeitformat habe ich auf 24h gesetzt. Die europäische Zeitansage habe ich auf Deutsch gesetzt. Die Beispieleinträge habe ich deaktiviert.

sudo nano /etc/asterisk/voicemail.conf
[general] format=alaw ; serveremail=asterisk ; attach=yes moveheard=no userscontext=from-internal externnotify=/usr/bin/setvoicemailed emaildateformat=%A, %d %B %Y at %H:%M:%S pagerdateformat=%T %D european=Europe/Berlin|'vm-received' a d b 'digits/de' HM ; 1234 => 4242,Example Mailbox,root@localhost ; 1234 => 5678,Company2 User,root@localhost

Die eigentliche VoiceMail habe im Kontext default eingerichtet. Hierbei sind <NUMBER>, <PASSWORD> und <NAME> entsprechend anzupassen.

[default] <NUMBER> => <PASSWORD>,<NAME>

Jetzt fehlt zwar noch die Ansteuerung der MWI-Anzeige auf dem Fritz!Fon MT-F, aber das kann warten.

Und das war's. Mit dieser Konfiguration läuft mein Asterisk störungsfrei.
Für Fragen und Anregungen stehe ich gerne per eMail zur Verfügung.