Asterisk-Telefonanlage

Aus Line5 Wiki
Wechseln zu: Navigation, Suche

Asterisk Telefonanlage und Dialplan

Anbindung per DAHDI / Junghanns.NET OctoBri

  • Asterisk 1.6.2.9
  • Asterisk AddOns 1.6.2.1
  • Dahdi Linux Complete 2.3.0.1 + 2.3.0
  • LibPRI 1.4.11.3
  • libss7 1.0.2
  • 4 ISDN Anlagenanschlüsse
  • 20 Snom360 Telefone
  • 1 analoges Fax
  • 1 Patton M-ATA zum Anschluss des analogen Faxgerätes über SIP


<adsense>a</adsense>

Features / Testliste

Eingehende Anrufe

  • Anrufe von extern kommen ausschließlich über die ISDN Anlagenanschlüsse ins System
  • Anrufe von extern an die Durchwahl -0 sollen für 10 Sekunden in der Zentrale (-10) klingeln, dann für 120 Sekunden auf -31 und -21.
  • Anrufe von extern an alle anderen Durchwahlen von -10 bis einschließlich -39 sollen für 30 Sekunden auf der jeweiligen Durchwahl klingeln, danach wie Anrufe, die auf die -0 gingen behandelt werden.

Vermitteln / Verbinden (Transfer) / Heranholen (Pickup)

  • *8 auf dem Telefon soll Anrufe heranholen
  • *9 auf dem Telefon soll Anrufe heranholen, die auf der zentralen Rufnummer (-0) angerufen haben.
  • *8## auf dem Telefon soll Telefonate heranholen, die gerade auf der Durchwahl ## klingeln (Rauten durch zweistellige Zahl ersetzen)
  • Transfer auf dem Telefon soll Blind Transfers starten (Tastenfolge im Gespräch: Transfer => Zielrufnummer => auflegen)
    • Falls beim Blind transfer der neue Gesprächspartner den Anruf nicht annimmt, soll der Anrufer nach 30 Sekunden zum letzten Gesprächspartner zurückgeleitet werden.
    • Ist nun beim letzten Gesprächspartner besetzt, soll der Anrufer zur Zentrale weitergeleitet werden.
    • Während des gesamten Transfers soll Musik (MOH) eingespielt werden.
  • Hold auf dem Telefon soll den Anrufer "halten" (Wartemusik einspielen).
    • Währenddessen kann der Angerufene eine weitere Durchwahl anwählen und mit Enter bestätigen.
      • Erreicht er den neuen Gesprächspartner, kann er durch Auflegen des Hörers den alten und den neuen Gesprächspartner direkt miteinander verbinden.
      • Durch Auflegen des Hörers wird aus dem "Hold"-Status ein Blind Transfer.

Dialplan

General

[general]
; In der TRUNK-Variable wird der ISDN-Out definiert.
TRUNK=DAHDI/g4

; Durchwahlen 
; Die Durchwahlen werden als Variablen definiert.
; Das hat u.a. den Vorteil, dass man auf einfache Art und Weise
; mehrere Telefone gleichzeitig klingeln lassen kann.
; Beispiel: -30
DW00=SIP/10&SIP/31&SIP/21
DW01=SIP/01
DW02=SIP/02
DW03=SIP/03
DW04=SIP/04
DW05=SIP/05
DW06=SIP/06
DW07=SIP/07
DW08=SIP/08
DW09=SIP/09
DW10=SIP/10
DW11=SIP/11
DW12=SIP/12
DW13=SIP/13
DW14=SIP/14
DW15=SIP/15
DW16=SIP/16
DW17=SIP/17
DW18=SIP/18
DW19=SIP/19
DW20=SIP/20
DW21=SIP/21
DW22=SIP/22
DW23=SIP/23
DW24=SIP/24
DW25=SIP/25
DW26=SIP/26
DW27=SIP/27
DW28=SIP/28
DW29=SIP/29
DW30=SIP/30&SIP/71
DW31=SIP/31
DW32=SIP/32
DW33=SIP/33
DW34=SIP/34
DW35=SIP/35
DW36=SIP/36
DW37=SIP/37
DW38=SIP/38
DW39=SIP/72
DW40=SIP/40
DW41=SIP/41
DW42=SIP/42
DW43=SIP/43
DW44=SIP/44
DW45=SIP/45
DW46=SIP/46
DW47=SIP/47
DW48=SIP/48
DW49=SIP/49
DW71=SIP/71
DW72=SIP/72


SIP / Mitarbeiter

In diesem Kontext landen alle Mitarbeiter, wenn sie von ihren SIP-Telefonen aus Anrufe tätigen.

[mitarbeiter]
; Um die blinkenden Lämpchen auf den Snom-Telefonen anzuzeigen, 
; müssen Hints gesetzt werden.
exten => 10,hint,SIP/10
exten => 19,hint,SIP/19
exten => 20,hint,SIP/20
exten => 21,hint,SIP/21
exten => 22,hint,SIP/22
exten => 23,hint,SIP/23
exten => 24,hint,SIP/24
exten => 25,hint,SIP/25
exten => 26,hint,SIP/26
exten => 27,hint,SIP/27
exten => 28,hint,SIP/28
exten => 29,hint,SIP/29
exten => 30,hint,SIP/30
exten => 31,hint,SIP/31
exten => 32,hint,SIP/32
exten => 33,hint,SIP/33
exten => 34,hint,SIP/34
exten => 35,hint,SIP/35
exten => 36,hint,SIP/36
exten => 37,hint,SIP/37
exten => 38,hint,SIP/38
exten => 40,hint,SIP/40
exten => 41,hint,SIP/41
exten => 42,hint,SIP/42
exten => 71,hint,SIP/71

; von den Snom-Telefonen aus können 
; auch die folgenden Kontexte aufgerufen werden.
include => interne-gespraeche
include => externe-gespraeche
include => gespraechs-uebernahme
include => uebernahme-direkt


SIP / GF

Die Geschäftsführung bekommt für alle Fälle einen eigenen Kontext. Man kann nie wissen, was denen so an zusätzlichen Features einfällt.

[gf]
exten => 10,hint,SIP/10
exten => 19,hint,SIP/19
exten => 20,hint,SIP/20
exten => 21,hint,SIP/21
exten => 22,hint,SIP/22
exten => 23,hint,SIP/23
exten => 24,hint,SIP/24
exten => 25,hint,SIP/25
exten => 26,hint,SIP/26
exten => 27,hint,SIP/27
exten => 28,hint,SIP/28
exten => 29,hint,SIP/29
exten => 30,hint,SIP/30
exten => 31,hint,SIP/31
exten => 32,hint,SIP/32
exten => 33,hint,SIP/33
exten => 34,hint,SIP/34
exten => 35,hint,SIP/35
exten => 36,hint,SIP/36
exten => 37,hint,SIP/37
exten => 38,hint,SIP/38
exten => 40,hint,SIP/40
exten => 41,hint,SIP/41
exten => 42,hint,SIP/42
exten => 71,hint,SIP/71
; auch die Geschäftsführung darf die folgenden Kontexte nutzen:
include => interne-gespraeche
include => externe-gespraeche-gf
include => gespraechs-uebernahme
include => uebernahme-direkt

Interne Gespräche

[interne-gespraeche]
; Transfer aus
exten => _[0-4]X,1,GotoIf($[${LEN(${BLINDTRANSFER})} = 0]?50)

; transferiert (blind transfer)
exten => _[0-7]X,2,NoOp(Dialing..................... TRANSFERED CALL?: ${BLINDTRANSFER})
exten => _[0-7]X,3,Set(fromext=${BLINDTRANSFER:4:2})
exten => _[0-7]X,4,Set(toext=${EXTEN})
exten => _[0-7]X,5,Set(fromnr=${CALLERID(number)})
exten => _[0-7]X,6,Set(vermz=0)
exten => _[0-7]X,7,Set(vermz=$[${vermz}+1])
exten => _[0-7]X,8,Dial(${DW${EXTEN}},10,mtT)
exten => _[0-7]X,9,GotoIf($[${LEN(${BLINDTRANSFER})} > 0]?20)
exten => _[0-7]X,10,Hangup

; zurueck nach blind transfer
exten => _[0-7]X,20,Set(CALLERID(name)="${fromnr} RR ${toext}")
exten => _[0-7]X,21,Set(CALLERID(number)=${fromnr})
exten => _[0-7]X,22,Dial(${DW${fromext}},10,mTt)
exten => _[0-7]X,23,NoOp(Hangup:::${HANGUPCAUSE})
exten => _[0-7]X,24,GotoIf($[${vermz}>5]?30)
exten => _[0-7]X,25,Goto(7)
; => wiederholen

; ausstieg nach failed blind transfer
exten => _[0-7]X,30,Goto(isdn-incoming,123450,4)
exten => _[0-7]X,31,Hangup


; normales waehlen
exten => _[0-7]X,50,SIPAddHeader("Alert-Info: <http://pbx.line5.tv>\;info=alert-internal\;x-line-id=0")
; mit der folgenden Zeile kann der Klingelton bei internen Anrufen auf eine Wave-Datei festgelegt werden.
; Nette Spielerei, aber nur etwas für Remote-Administratoren.
;exten => _[0-7]X,50,SIPAddHeader("Alert-Info: <http://172.17.1.17/snom/otannenbaum-snom.wav>")
exten => _[0-7]X,51(waehlen),Dial(${DW${EXTEN}},60,tT)
exten => _[0-7]X,52,macro(sipintern,${EXTEN})
exten => _[0-7]X,53,VoiceMail(${EXTEN})
exten => _[0-7]X,54,hangup

; MOH Test
; Nachhören, ob die Kassette umgedreht werden muss
exten => 05,1,Answer
exten => 05,2,MusicOnHold()

; Mailbox Konfiguration
exten => 99,1,Answer
exten => 99,2,VoiceMailMain(0)
exten => 99,3,Hangup()


ISDN

[isdn-incoming]
exten => 10,hint,SIP/10
exten => 19,hint,SIP/19
exten => 20,hint,SIP/20
exten => 21,hint,SIP/21
exten => 22,hint,SIP/22
exten => 23,hint,SIP/23
exten => 24,hint,SIP/24
exten => 25,hint,SIP/25
exten => 26,hint,SIP/26
exten => 27,hint,SIP/27
exten => 28,hint,SIP/28
exten => 29,hint,SIP/29
exten => 30,hint,SIP/30
exten => 31,hint,SIP/31
exten => 32,hint,SIP/32
exten => 33,hint,SIP/33
exten => 34,hint,SIP/34
exten => 35,hint,SIP/35
exten => 36,hint,SIP/36
exten => 37,hint,SIP/37
exten => 38,hint,SIP/38
exten => 40,hint,SIP/40
exten => 41,hint,SIP/41

; Anrufer waehlt eine direkte Durchwahl
exten => _12345XX,1,Set(__TRANSFERS=0)
exten => _12345XX,n,Set(__FIRST_EXT=${EXTEN:-2})
exten => _12345XX,n,Set(__TRANSFER_CONTEXT=transfercontext)
exten => _12345XX,n,Set(__PICKUPMARK=${EXTEN:-2})
exten => _12345XX,n,Set(__LAST_EXT=${EXTEN:-2})
exten => _12345XX,n,NoOp(${LAST_EXT})
exten => _12345XX,n,SIPAddHeader("Alert-Info: <http://pbx.line5.tv>\;info=alert-external\;x-line-id=0")
exten => _12345XX,n,Macro(sipintern,${EXTEN:-2})
exten => _12345XX,n,hangup


; Anrufe zur Zentrale
exten => 123450,1,Set(__TRANSFERS=0)
exten => 123450,2,Set(__FIRST_EXT=10)
exten => 123450,3,Set(__TRANSFER_CONTEXT=transfercontext)
exten => 123450,4,Set(__PICKUPMARK=0)
exten => 123450,5,Set(__LAST_EXT=10)
exten => 123450,6,SIPAddHeader("Alert-Info: <http://pbx.line5.tv>\;info=alert-group\;x-line-id=0")
exten => 123450,7,GotoIf($[${TRANSFERS}=0]?20)
exten => 123450,8,Dial(SIP/10,10,mtT)
exten => 123450,9,Dial(SIP/10&SIP/31&SIP/21,120,mtT)
exten => 123450,10,hangup
exten => 123450,20,Dial(SIP/10,10,tT)
exten => 123450,21,Dial(SIP/10&SIP/31&SIP/21,120,tT)
exten => 123450,22,hangup

; Anrufe zur Zentrale / 2. Nummer
exten => 1234500,1,Goto(123450,1)


; Fax 22 per IAX-Modem / Hylafax verarbeiten
exten => 1234522,1,Set(CHANNEL(TransferCapability)=3K1AUDIO)
exten => 1234522,n,Dial(IAX2/iaxmodem,60,tT)
exten => 1234522,n,hangup

; Faxe gesondert behandeln
exten => 1234501,1,Set(CHANNEL(TransferCapability)=3K1AUDIO)
exten => 1234501,n,Dial(SIP/02)
exten => 1234501,n,hangup

exten => 1234502,1,Set(CHANNEL(TransferCapability)=3K1AUDIO)
exten => 1234502,n,Dial(SIP/02)
exten => 1234502,n,hangup

; Diese Durchwahl gibt man nur Lieblingskunden:
exten => 1234505,1,Answer
exten => 1234505,2,MusicOnHold()


Ausgehende Telefonate

über ISDN / Amt

[externe-gespraeche]
exten => _0X.,1,Set(CALLERID(number)=123450)
exten => _0X.,n,Dial(${TRUNK}/${EXTEN:1},60,tT)
exten => _0X.,n,hangup

[externe-gespraeche-gf]
exten => _0X.,1,Set(CALLERID(number)=123450)
exten => _0X.,n,Dial(${TRUNK}/${EXTEN:1},60,tT)
exten => _0X.,n,hangup


Fax

Im Kontext für ausgehende Faxe muss die TransferCapability auf 3K1AUDIO gesetzt werden. In diesem Kontext landen Anrufe, die über den Patton M-ATA abgesetzt werden - so ist das in der sip.conf definiert.

[fax-out]
exten => _0X.,1,Set(CALLERID(number)=1234501)
exten => _0X.,n,Set(CHANNEL(TransferCapability)=3K1AUDIO)
exten => _0X.,n,Dial(${TRUNK}/${EXTEN:1},60,tT)
exten => _0X.,n,hangup

Transfer / Übernahme

[gespraechs-uebernahme]
exten => *9,1,Pickup(0@PICKUPMARK)
exten => *9,2,hangup

[uebernahme-direkt]
exten => _*8X.,1,Pickup(${EXTEN:2}@PICKUPMARK)
exten => _*7X.,1,Pickup(${EXTEN:2})
[transfercontext]
exten => _XX,1,Answer()
exten => _XX,2,Set(__TRANSFERS=${MATH(${TRANSFERS}+1,i)})
exten => _XX,3,Set(__LAST_EXT=${BLINDTRANSFER:4:2})
exten => _XX,4,Set(__PICKUPMARK=${EXTEN})
exten => _XX,5,Dial(${DW${EXTEN}},10,mtT)
exten => _XX,6,Set(__TRANSFERS=${MATH(${TRANSFERS}+1,i)})
exten => _XX,7,NoOp(Niemand zu Hause. Rueckwurf zur letzten Stelle: ${LAST_EXT})
exten => _XX,8,Goto(isdn-incoming,189419${LAST_EXT},4)
exten => _XX,9,NoOp(Mist, das war nix.)
exten => _XX,10,Goto(1894190,4)
exten => _XX,11,Hangup
exten => _XX,104,Goto(isdn-incoming,1894190,4)
exten => _XX,105,Playtones(busy)
exten => _XX,106,Wait(4)
exten => _XX,107,StopPlaytones
exten => _XX,108,Hangup


SIP / Intern

; Alle Anrufe zu internen SIP-Geraeten nutzen diesen Kontext:
[macro-sipintern]
exten => s,1,noop("waehle ${ARG1}")
; Falls noch keine Transfers waren, darf keine Musik gespielt werden.
; Ansonsten gibt es kein Freizeichen fuer den Anrufer.
exten => s,2,GotoIf($[${TRANSFERS}=0]?10)
exten => s,3,NoOp("waren schon ${TRANSFERS} Transfers...")
exten => s,4,Dial(${DW${ARG1}},12,mtT)
exten => s,5,Goto(s-${DIALSTATUS},1)
exten => s,10,NoOp("waren noch ${TRANSFERS} Transfers...")
exten => s,11,Dial(${DW${ARG1}},12,tT)
exten => s,12,Goto(s-${DIALSTATUS},1)
exten => s-BUSY,1,GotoIf($[${TRANSFERS}=0]?s-BUSY,10)
exten => s-BUSY,2,Goto(isdn-incoming,123450,4)
exten => s-BUSY,10,busy(0)
exten => s-BUSY,11,Playtones(busy)
exten => s-BUSY,12,Hangup()
exten => s-ANSWER,1,Hangup()
exten => s-NOANSWER,1,Goto(isdn-incoming,123450,4)
exten => s-CONGESTION,1,busy(0)
exten => s-CONGESTION,n,NoOp("CONG-BESETZT")
exten => s-CONGESTION,n,Playtones(busy)
exten => s-CONGESTION,n,Hangup()
;exten => s-.,1,Voicemail(u0)
;exten => s-.,2,Hangup()
exten => _s-.,1,busy(0)
exten => _s-.,n,Playtones(busy)
exten => _s-.,n,Hangup()

Bekannte Probleme

  • Die abgehende Rufnummer lässt sich nicht einstellen (liegt vermutlich am DAHDI Treiber)
  • Ein interner S0-Bus kann nicht zur Verfügung gestellt werden (PTMP mit DAHDI funktioniert noch nicht)

Offizielles Debian Squeeze Repository von Digium

Die aktuelle Release-Version kann durch Eintragen der folgenden zwei Zeilen in /etc/apt/sources.list installiert und per aptitude oder apt-get aktuell gehalten werden:

# Asterisk
deb http://packages.asterisk.org/deb squeeze main
deb-src http://packages.asterisk.org/deb squeeze main

Weitere Informationen

Informationen zum Thema Asterisk finden Sie auch in unserem Technik-Blog unter http://technik.line5.de.