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:

[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
; 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
; 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

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:

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:

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:

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

[featuremap]
/* blindxfer => #1                ; Blind transfer */
disconnect => *0                ; Disconnect
atxfer => *2                    ; Attended transfer

mit VoIP-Provier IAX sprechen

Beispiel Simply-Connect.de

register => 100398976:SECRET@iax.simply-connect.de

...

[100398976]
type=user
username=100398976
host=62.112.132.111
secret=SECRET
; 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

Loggen: messages wie in CLI

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

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