Benutzer-Werkzeuge

Webseiten-Werkzeuge

doku:asteriskdoku

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:

Wartemusik, Music-on-hold

  • lame installieren:
  • 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

Links

Permalink doku/asteriskdoku.txt · Zuletzt geändert: 04.07.2010 08:32 von kfr

oeffentlich