Inhaltsverzeichnis
Asterisk Dokumentation
Mini-HowTos von Klaus Franken
Sammelruf auf mehrere SIP-Clients
Es sollen mehrere SIP-Clients gleichzeitig bei einem Anruf klingeln, wo als erstes der Anruf entgegengenommen wird, hat die Leitung und die anderen Telefone hören auf zu klingeln. Die SIP-Clients können auch an verschiedenen externen Standorten sein, solange sie Zugriff zum Asterisk-Server haben.
Das Problem: Selbstverständlich könnte man bei einem SIP-Account mehrere Telefone mit denselben SIP-Daten registrieren lassen. Aber in der Praxis hat sich gezeigt, dass es ungewiss ist, ob sich die Registierungen nicht untereinander stören. Im Klartext: es klingelt zufeälligerweise das Telefon, was sich zuletzt registriert hat. Ausserdem könnte man die einzelnen Apparate nicht mehr einzeln anklingeln oder man müsste an jedem Apparat mehrere SIP-Accounts eintragen (was nicht immer geht und womit man die Flexibilität verliert das über Asterisk selbst zu konfigurieren).
Die Lösung:
- es wird pro Apparat ein SIP-Account definiert, z.B. 1000 und 1001. Damit hat man also Apparate-Nummern.
- vi /etc/asterisk/sip.conf:
[1000] callerid=Klaus Franken am App. 1000 <1000> ; überschreibt name des sip clients type=friend username=1000 secret=geheim host=dynamic context=default nat=yes canreinvite=no ; kein RTP direkt mailbox=1000,9999 [1001] callerid=Klaus Franken am App. 1001 <1001> ; überschreibt name des sip clients type=friend username=1001 secret=geheim2 host=dynamic context=default nat=yes canreinvite=no ; kein RTP direkt mailbox=1001,9999
- Hinweis: hier ist sogar noch definiert, dass dieser Apparat für mehrere Nummer die Mailbox anzeigen lassen soll (siehe MWI).
- vi /etc/asterisk/extension.conf:
; alle 4 stelligen Nr. intern betrachten exten => _XXXX,1,Dial(SIP/${EXTEN},15,tT) exten => _XXXX,2,Wait(1) exten => _XXXX,3,Voicemail(${EXTEN}) exten => _XXXX,4,Hangup
- alle 4 stelligen Nummern werden an den SIP Account mit diesem Namen durchgestellt (oder zum Voicemail-System für den Apparat weitergeleitet).
- man definiert als zweites Teilnehmernummer, z.B. 9999, die man auf die Apparate verteilt.
; Sammelruf direkt auf mehrere SIPs exten => 9999,1,Ringing exten => 9999,2,Set(LANGUAGE()=de) exten => 9999,3,Dial(SIP/1000&SIP/1001,20) exten => 9999,4,Wait(1) exten => 9999,5,Voicemail(${EXTEN}) exten => 9999,6,Hangup
- Diese Definition kann in der Extensions.conf vor oder nach den obigen Zeilen für _XXXX stehen das die 9999 spezieller ist und daher Priorität vor der anderen Anweisung hat.
Benutzerabfrage: Voicemail oder Weiterleitung aufs Handy
Aufgabe: der Teilnehmer für Notfälle immer erreichbar sein, aber im Normalfall soll der Anrufer eine Nachricht auf dem Anrufbeantworter hinterlassen. Es wird per Tastendruck eine Weiterleitung auf eine Telefonnummer veranlasst, die dem Anrufer garnicht bekannt ist. Das könnte z.B. die Handy-Nummer der Teilnehmers sein.
Lösung:
- Es wird Ansage aufgenommen mit dem Text ``…bei Bedarf können Sie ein Rufumleitung aufs Handy veranlassen. Drücken Sie dazu jetzt an Ihrem Telefon die Nummer 8. Ansonsten hinterlassen Sie bitte nach dem piepton eine Nachricht …``
- Diese Ansage wird unter /var/lib/asterisk/sounds/ oder /var/lib/asterisk/sounds/de z.B. in der Datei msg-voice.gsm abgelegt.
- in der extensions.conf wird für diese spezielle Zielrufnummer (z.B. 9999) hinterlegt (Erweiterung vom Beispiel oben):
exten => 9999,1,Ringing exten => 9999,2,Set(LANGUAGE()=de) exten => 9999,3,Dial(SIP/1000&SIP/1001,20) exten => 9999,4,Goto(menu9999,s,1) [menu9999] exten => s,1,ResponseTimeout,2 ; Set Response Timeout exten => s,2,Answer exten => s,3,Wait(2) exten => s,4,Background(msg-voice) exten => 8,1,Playback(transfer) exten => 8,2,SetCallerID(StrukturPunkt/Franken) exten => 8,3,Dial(SIP/0172xxxxxx@dusnet-out) exten => 8,4,Hangup exten => t,1,Voicemail(9999) ; timeout: Default exten => t,2,Hangup exten => i,1,Background(KFRmsg0006) ; incorrect: Fange neu an
automatisch wählen, callfile
Aufgabe: Anstatt eine Nummer manuell am Telefonapparat zu wählen, soll der Asterisk-Server die Verbindung herstellen, der Anwender braucht nur den Hörer abzunehmen.
Unter /var/spool/asterisk/outgoing/ eine Datei erstellen, z.B. 1000-97797117
Channel: SIP/1000 Callerid: Wähle 97797117 <97797117> Context: default Extension: 97797117 MaxRetries: 0 Retrytime: 3 WaitTime: 5 Priority: 1
Erklärung:
- Channel: Dieses SIP-Telefon wird angerufen und bei Erfolg wird dann die externe Verbindung hergestellt.
- Es geht auch Local/9999, das kann dann z.B. ein Sammelruf sein.
- Callerid: Das wird dem Sip-Telefon als Nr. angezeigt. Man kann z.B. die Zielnr. angeben, dann klappt ein Rückruf am Telefon. In <> ist die Nr. das andere Text. Zeichenssatz: latin1
- Context, Extension: in diesem Context wird diese Extension gestartet, also diese Nummer angerufen. Das ergibt das gleiche, als wenn an diesem Telefon diese Nr. direkt gewählt wird.
- MaxRetries: so oft wird ggf. Wiederholt. Hierfür am besten 0 (nur ein Versuch).
- WaitTime: Solange klingelt es am SIP-Telefon.
Getestet mit Asterisk 1.0 und 1.2
Mit dem folgenden Programm dial kann das Wählbefehl (genauer: das Spoolfile) automatisch erzeugt werden:
/* !/bin/sh */ /* (c) 2006, 2007 Klaus.Franken@StrukturPunkt.de */ SPOOLDIR=/var/spool/asterisk/outgoing SELF=9999 NR="$1$2$3$4$5$6$7$8$9" CALLNR=`echo $NR | perl -ne '$_ =~ s?[\(\)/-\s]??g; print $_;'` SPOOLFILE="$SELF-$CALLNR.$$" if [-z "$NR" ]; then echo "keine Nr. angegbene" >&2 exit 1 fi echo " Channel: Local/$SELF Callerid: Waehle $NR <$CALLNR> Context: default Extension: $CALLNR MaxRetries: 0 Retrytime: 3 WaitTime: 15 Priority: 1 " > $SPOOLDIR/$SPOOLFILE
Anpassung:
- SELF: die lokale Nummer die angerufen und dann verbunden werden soll.
Die Zielrufnummer kann in einem (fast) beliebigen Format sein, z.B. 0911 / 123 456-7
Das Script muss ausführbar sein und der Benutzer muss Schreibrechte in /var/spool/asterisk/outgoing haben. Gestartet wird der Wähvorgang mit (Beispiel): dial 123456
Alternative: Adressbuch-Plugin
Makeln, Weiterleiten
- /etc/asterisk/features.conf aktivieren:
[featuremap] /* blindxfer => #1 ; Blind transfer */ disconnect => *0 ; Disconnect atxfer => *2 ; Attended transfer
- Beispiel: A spricht mit B, soll aber mit C
- Während Gespräch:
- B drückt: *2 und sofort die Zielnummer eingeben
- B legt auf : A spricht mit C
- B drückt: *0 A spricht wieder mit B
mit VoIP-Provier IAX sprechen
Beispiel Simply-Connect.de
- iax.conf
register => 100398976:SECRET@iax.simply-connect.de ... [100398976] type=user username=100398976 host=62.112.132.111 secret=SECRET
- extensions.conf
; rauswählen: exten => _0XXXXX.,n,Dial(IAX2/100398976:SECRET@iax.simply-connect.de/${EXTEN}) ... ; Anruf (aus iax.conf) an SIP-Account leiten: exten => 100398976,1,SetCallerID(IAX) exten => 100398976,n,Dial(SIP/7099) exten => 100398976,n,Hangup ; Anruf (aus iax.conf) an SIP-Account leiten: ; besser als 1. Bsp.: kein Ueberschrieben der CallerID, im dialplan so als wäre gleich der Account 1005 angerufen worden (Goto) exten => 10030811201,1,Goto(1005,1) exten => 10030811201,n,Hangup
- Debuggen mit:
iax2 set debug ... iax2 set debug off
Loggen: messages wie in CLI
- asterisk -rx „set verbose 9“ # Verbose-Level hochsetzen
- /etc/asterisk/logger.conf
- messages => notice,warning,error,verbose
Voicemail in IMAP-Server speichern
Ziel: Abfrage über E-Mail Client und Telefon, ohne Verdoppelung der Voicemail.
Geht mit UW-IMAP Toolkit. nur mit UW-IMAP Server ?
In voicemail.conf
: imapserver=localhost
(und weitere…)
Links:
- snom_groupware_kopplung PDF, 4. Seite
Wartemusik, Music-on-hold
- lame installieren:
- configure…make… make install
- sox installieren:
- apt-get install sox libsox-fmt-gsm
- mkdir /var/lib/asterisk/mohnative
- cd !$
- lame --decode ../mohmp3/test.mp3 test.wav
- sox -V -v 0.4 test.wav -r 8000 -c 1 test.raw
- -v: Volume/Lautstärke auf 40% setzen
- sox -V test.wav -r 8000 -c 1 test.gsm
- /etc/asterisk/musiconhold.conf
[default] mode=files directory=/var/lib/asterisk/mohnative random=yes
- asterisk restart
- besser in CLI:
moh reload
Freie MP3s:
Registrierung checken
Wenn das folgende Script eine Ausgabe liefert, stimmt irgendwas mit der SIP- oder IAX-Registrierung beim VoIP-Provider nicht.
#!/bin/sh # checke dass registry-Einträge auch wirklich "Registered" sind SIPREG=`/usr/sbin/asterisk -rx "sip show registry"` IAXREG=`/usr/sbin/asterisk -rx "iax2 show registry"` echo "$SIPREG" | while read HOST USERNAME REFRESH STATE TIME; do if test $HOST = 'Host'; then continue fi if test $STATE = 'Registered'; then continue # OK fi echo "$HOST: $STATE" done echo "$IAXREG" | while read HOST DNSMGR USERNAME PERCEIVED REFRESH STATE; do if test $HOST = 'Host'; then continue fi if test $STATE = 'Registered'; then continue # OK fi echo "$HOST: $STATE" done
Das Script kann als Cronjob ausgeführt werden: /etc/cron.d/asterisk_check
MAILTO=support@meine_firma.deee */15 * * * * root /usr/local/bin/asterisk_check_registry