; ********************************************************************
; asterisk extension config für asterisk auf der Fritz!Box 7050/7170
; ********************************************************************
; (asterisk 1.2.16 von openwrt.org; chan_capi 1.0.1; chan_sccp-20060408, isdn4kutils:
; www.spblinux.de/fbox/openwrt/)
; mit besonderem Dank an betateilchen von www.ip-phone-forum.de
; für den asterisk Grundkurs (www.ip-phone-forum.de/showthread.php?t=91217)
; usb installation framework, chan_sccp, careful testing and more contributed by dynamic
; 2006-05, 2006-10, 2007-04, spblinux
; Konzept
; (WICHTIG: bei ungeschütztem Netzwerk Passwörter in sip.conf, iax.conf ändern!)
; - die MSN für das Festnetz am externen isdn S0 Bus der fritzbox ist in capi.conf
; gehende Rufe:
; 0xxxxxxx für Festnetz Nummer 0xxxxxxx (führende 0 wird mit gewählt)
; 5yyy intern für ISDN Telefone (am internen S0 Bus, yyy=msn des Telefons)
; 6zzz remote asterisk (user asterisk2, auf ip Adresse wie unten in [lokal],
; Passwort steht in iax.conf, beide einstellbar durch cfg_asterisk start)
; 70y interne SCCP Telefone (701, 702, 703 vorkonfiguriert ->sccp.conf)
; (SCCP-Verwendung: sccp.conf muss angepasst werden und
; noload => chan_sccp.so in modules.conf muss entfernt werden)
; 77z interne SIP Telefone (771, 772, 773, 774 vorkonfiguriert ->sip.conf)
; (neu 2007-01, dreistellige SIP Nummern, damit analoge Nebenstellen
; der fritzbox sich problemlos per avm-sipclient am asterisk anmelden
; koennen; auch fuer isdn intern empfohlen, damit dtmf und Signalisierung
; funktionieren)
; 8z interne IAX2 Telefone (81, 82, 83, 84 vorkonfiguriert ->iax.conf)
; 80 Echotest
; 89 fragt Passwort ab (/var/tmp/asterisk/passwd) und startet Tunnel
; zebedee2.bin -f /etc/zebedee/zbdr23.conf für telnetd
; 90 Anrufbeantwortertest (Email-Konfiguration in Abschnitt [globals])
; 91 Begruessungsansage fuer Anrufbeantworter aufnehmen
; (geht bei reboot verloren, wenn nicht per cfg_asterisk usb_install
; installiert worden ist; /var/lib/asterisk/sounds/VM_MESSAGE.gsm)
; usb_install auf USB in addons/asterisk/usr/lib/asterisk/sounds)
; 92 Music on hold testen (/var/lib/asterisk/moh bzw. bei usb_install
; auf USB in addons/asterisk/usr/lib/asterisk/moh)
; 93 Callthrough testen (Passwort in /var/tmp/asterisk/passwd bzw. bei
; usb_install auf USB in addons/asterisk/etc/asterisk/passwd)
; (fragt Nummer ab und ruft diese Nummer per isdn (controller 1) an;
; logfile in /var/log/asterisk, bei USB in addons/asterisk/log/asterisk)
; 94 Callback testen (nur fuer in CB_IN_CHANNEL festgelegten Anrufer
; und nur auf in CB_OUT_CHANNEL festgelegte Nummer und Rueckruf
; erfolgt nur, wenn innerhalb von 5 Sekunden aufgelegt wird)
; 95 Call headset
; 99xxxx fuer voip ueber sip extern nach Nummer xxxx (siehe sip.conf)
; kommende Rufe:
; - Rufe vom Festnetz werden auf msn 31 (isdn intern), 701, 771 und 81 signalisiert
; - Anruf von in CB_IN_CHANNEL definierter externer Rufnummer aus triggert
; Callback auf Nummer CB_OUT_CHANNEL (wenn innerhalb von 5 Sekunden aufgelegt wird)
; Anmerkungen:
; - bei den Telefonen 771,..774, 81,..84 ist Nummer=Name=User=Passwort voreingestellt
; - SIP Telefone MÜSSEN asterisk auf Port 5061 ansprechen (-> sip.conf)
; (oder Port des avm-SIP-clients veraendern: teils per voipd Neustart
; mit voipd -P 5062, teils durch Aendern von /var/flash/voip.cfg)
; - Telefone am internen S0: die oben genannten Nummern sind als
; - 9aaaaaa# zu wählen
; - und es muss auf der Fritzbox ein nicht aktiver Internetprovider existieren
; z.b. Internetnummer 99
; - eine Wahlregel in der Fritzbox muss 9 auf "Internetnummer 99" umleiten
; (sonst übernimmt/ändert der telefon daemon auf der fritzbox den Anruf...
; und ohne telefon daemon geht das Rauswählen ins Festnetz nicht)
; - zudem muss bei Internettelefonie/Erweitert der automatische Fallback
; ins Festnetz ausgeschaltet sein!
; - WLAN auf der Fritzbox muss/sollte deaktiviert sein, damit genügend RAM für
; asterisk vorhanden ist
; - getestet auf fritzbox 7050/7170 an ISDN Anschluss
; - für eigene Anpassungen: siehe oben genannter Grundkurs
; - Testversion ohne jede Gewähr (->auf ungewollte Telefonkosten achten!)
[globals]
; gehende Nummer in [festnetz_out]
CAPI_CALLERID=1234567
;Callback (interne extension 94 oder auf CAPI/ISDN1 eingehender Ruf):
;(Triggerung durch Auflegen innerhalb von 5 Sekunden):
CB_IN_CHANNEL=SIP/772
CB_OUT_CHANNEL=SIP/772
;intern (fuer internes ISDN-Telefon mit msn 772; extension 94 waehlbar per 994#):
;CB_IN_CHANNEL=CAPI/ISDN3/772
;CB_OUT_CHANNEL=CAPI/ISDN3/772
;extern
;CB_IN_CHANNEL=CAPI/ISDN1/0981234567
;CB_OUT_CHANNEL=CAPI/ISDN1/0981234567
CB_CALLERID=Fritzbox <1234567>
CB_WAITTIME=90
CB_CONTEXT=echotest
CB_EXTENSION=80
;CB_CONTEXT=callthroughtest
;CB_EXTENSION=93
MAILER_TO=root@localhost
MAILER_FROM=asterisk@localhost
MAILER_SMTP=smtp.localhost
; smtp user und password nur bei Bedarf eintragen (sonst leer lassen!)
MAILER_USER=
MAILER_PASSWORD=
[general]
static=yes
writeprotect=no
; Macros
[macro-entfernegitter]
; wenn Nummer mit # endet, das # Zeichen abschneiden, als EXTEN2 zurückgeben
; - um am internen isdn S0 der fritzbox asterisk zu erreichen, muss 912...# gewählt werden
exten => s,1,Set(EXTEN2=${IF( $[ ${MACRO_EXTEN:-1} = # ] ? ${MACRO_EXTEN:0:$[${LEN(${MACRO_EXTEN})}-1]} : ${MACRO_EXTEN} )})
;exten => s,n,NoOp(${EVAL(${EXTEN2})} -- ${MACRO_CONTEXT})
; --------------------------------------------------------------------
; f.r interne Funktionen: Echo, Anrufbeantworter ...
[headsettest]
exten => _95!,1,Dial,CELL/headset
;Callback testen
[callbacktest]
exten => _94!,1,noop,callerid=${CALLERID(all)}, channel=${CHANNEL:0:10}, callback_in_channel=${CB_IN_CHANNEL}
exten => _94!,n,gotoif,$["${CHANNEL:0:$[${LEN(${CB_IN_CHANNEL})}-1-${LEN(${CALLERID(num)})}]}" != "${CB_IN_CHANNEL:0:$[${LEN(${CB_IN_CHANNEL})}-1-${LEN(${CALLERID(num)})}]}"]?80
exten => _94!,n,gotoif,$["${CALLERID(num)}" != "${CB_IN_CHANNEL:-${LEN(${CALLERID(num)})}}"]?80
exten => _94!,n,wait,1
exten => _94!,n,goto,callback-wait|s|1
exten => _94!,80,hangup
; nicht per include in lokal aufzunehmen; wird ueber callbacktest aufgerufen.
[callback-wait]
exten => s,1,Set(CB_TRIGGERED=1|g)
exten => s,n,ringing
exten => s,n,wait,5
exten => t,1,Set(CB_TRIGGERED=0|g)
exten => t,n,hangup
exten => h,1,gotoif,$[${CB_TRIGGERED}]?callback-callfile|s|1
; nicht per include in lokal aufzunehmen; wird ueber callbacktest aufgerufen.
[callback-callfile]
exten => s,1,system,echo "Channel: ${CB_OUT_CHANNEL}" >/var/spool/asterisk/call0
exten => s,n,system,echo "CallerID: ${CB_CALLERID}" >>/var/spool/asterisk/call0
exten => s,n,system,echo "WaitTime: ${CB_WAITTIME}" >>/var/spool/asterisk/call0
exten => s,n,system,echo "MaxRetries: 0" >>/var/spool/asterisk/call0
exten => s,n,system,echo "Context: ${CB_CONTEXT}" >>/var/spool/asterisk/call0
exten => s,n,system,echo "Extension: ${CB_EXTENSION}" >>/var/spool/asterisk/call0
exten => s,n,system,mv /var/spool/asterisk/call0 /var/spool/asterisk/outgoing
exten => s,n,system,touch /var/spool/asterisk/outgoing
exten => s,n,goto,100
exten => s,80,wait,5
exten => s,100,hangup
;Callthrough testen
[callthroughtest]
; Prompt caller to authenticate and validate passcode
exten => _93!,1,Goto(callthroughauth,s,1)
; nicht per include in lokal aufzunehmen; wird ueber callthroughtest aufgerufen.
[callthroughauth]
; Prompt caller to authenticate and validate passcode
;exten => _1234567!,1,goto(s,1)
exten => s,1,answer
exten => s,2,Noop(${CALLERID(num)})
exten => s,3,wait,1
exten => s,4,authenticate,/etc/asterisk/passwd|j
; Log failed authentication and hangup
exten => _93!,105,system,chroot /oldroot echo "${STRFTIME(||%Y-%m-%d_%H-%M-%S)} - ${CALLERID(num)}: Authentication Failed!" >> /var/log/asterisk/callthrough.log
exten => _93!,n,HangUp()
exten => s,5,Goto(callthrough,s,1)
; Log when call has been aborted
exten => h,1,system,chroot /oldroot echo "${STRFTIME(||%Y-%m-%d_%H-%M-%S)} - ${CALLERID(num)}: Call has been aborted at ${STRFTIME(||%Y-%m-%d_%H-%M-%S)}" >> /var/log/asterisk/callthrough.log
; nicht per include in lokal aufzunehmen; wird ueber callthroughtest aufgerufen.
[callthrough]
; Prompt caller to key-in number to be dialed and to finish with #
exten => s,1,Set(NR=)
exten => s,2,Background(vm-enter-num-to-call)
exten => s,3,Set(TIMEOUT(response)=30)
exten => s,4,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,2,Goto(s,3)
exten => *,1,Goto(s,1)
exten => #,1,NoOp(${NR})
exten => #,2,Playback(vm-dialout)
exten => #,3,NoOP(Dialing Now)
exten => #,4,system,chroot /oldroot echo "${STRFTIME(||%Y-%m-%d_%H-%M-%S)} - ${CALLERID(num)}: Authenticated & dialing ${NR}" >> /var/log/asterisk/callthrough.log
exten => #,5,NoOp(Dialing ${NR})
exten => #,6,Dial,CAPI/ISDN1/${NR}|55|bd
;exten => #,6,Dial,SIP/${NR}|55|bd
exten => #,n,HangUp()
; Log when connection timed out
exten => t,1,Busy(3)
exten => t,n,system,chroot /oldroot echo "${STRFTIME(||%Y-%m-%d_%H-%M-%S)} - ${CALLERID(num)}: Call to ${NR} timed out." >> /var/log/asterisk/callthrough.log
exten => t,n,HangUp()
; Log when call has finished
exten => h,1,system,chroot /oldroot echo "${STRFTIME(||%Y-%m-%d_%H-%M-%S)} - ${CALLERID(num)}: Call to ${NR} completed." >> /var/log/asterisk/callthrough.log
;music on hold testen
[mohtest]
exten => _92!,1,Macro,entfernegitter
exten => _92!,n,answer
exten => _92!,n,wait,1
exten => _92!,n,musiconhold
exten => _92!,n,hangup
;Begruessungsnachricht des Anrufbeantworters aufnehmen
[record_message]
exten => _91!,1,Macro,entfernegitter
exten => _91!,n,answer
exten => _91!,n,wait,1
exten => _91!,n,playback,beep
exten => _91!,n,record,VM_MESSAGE.gsm|3|60
exten => _91!,n,playback,VM_MESSAGE
exten => _91!,n,playback,beep
exten => _91!,n,hangup
;bei usb-Installation werden die Nachrichten vor dem mailen
;auf den usb-Speicher geschrieben (/var/spool/asterisk);
;(Schreiben auf RAM durch Ersetzen von /var/spool/asterisk durch /var/spool)
[recordtest]
; Prompt caller to authenticate and validate passcode
exten => _90!,1,Goto(record,s,1)
; nicht per include in lokal aufzunehmen; wird ueber recordtest aufgerufen.
[record]
exten => s,1,Macro,entfernegitter
exten => s,n,answer,2000
exten => s,n,wait,1
; die gew.hlte Nummer ansagen:
exten => s,n,SayDigits,${EXTEN2}
; Ansagetext vorspielen
exten => s,n,playback,VM_MESSAGE
exten => s,n,set,MSGFILENAME=${CALLERID(num)}-${TIMESTAMP}
exten => s,n,set,MAILER_SUBJECT=Anrufer:${CALLERID(num)} ${STRFTIME(||%Y-%m-%d_%H-%M-%S)}
exten => s,n,record,/var/spool/asterisk/${MSGFILENAME}.WAV|5|60
;exten => s,n,playback,/var/spool/asterisk/${MSGFILENAME}
exten => s,n,hangup
; Nachricht nach Hangup per e-mail versenden und löschen
exten => h,1,gotoif,${MSGFILENAME}?20:48
exten => h,20,system,chroot /oldroot mv /var/spool/asterisk/${MSGFILENAME}.WAV /var/spool/asterisk/${MSGFILENAME}.wav
exten => h,n,gotoif,${MAILER_USER}?40
exten => h,n,system(chroot /oldroot mailer -s "${MAILER_SUBJECT}" -m "${MAILER_SMTP}" -f "${MAILER_FROM}" -t "${MAILER_TO}" -d /var/spool/asterisk/${MSGFILENAME}.wav)
exten => h,n,goto,45
exten => h,40,system(chroot /oldroot mailer -a "${MAILER_USER}" -w "${MAILER_PASSWORD}" -s "${MAILER_SUBJECT}" -m "${MAILER_SMTP}" -f "${MAILER_FROM}" -t "${MAILER_TO}" -d /var/spool/asterisk/${MSGFILENAME}.wav)
exten => h,n,goto,45
; Nachricht bei erfolgreichem Versand loeschen
exten => h,45,gotoif,$[${SYSTEMSTATUS} = SUCCESS]?46:48
exten => h,46,system,chroot /oldroot rm /var/spool/asterisk/${MSGFILENAME}.wav
exten => h,47,goto,49
exten => h,48,NoOp(Hanging up - no message to send)
exten => h,49,NoOp()
[echotest]
exten => _80!,1,Macro,entfernegitter
exten => _80!,n,answer
exten => _80!,n,wait,2
; als Test auf die Spracheinstellung, die gewählte Nummer ansagen:
exten => _80!,n,SayNumber,80
exten => _80!,n,wait,2
exten => _80!,n,playback,demo-echotest
exten => _80!,n,echo
exten => _80!,n,playback,demo-echodone
exten => _80!,n,hangup
[authtest]
exten => _89!,1,Macro,entfernegitter
exten => _89!,n,answer
exten => _89!,n,wait,2
exten => _89!,n,authenticate,/etc/asterisk/passwd
exten => _89!,n,system,zebedee2.bin -f /etc/zebedee/zbdr23.conf
exten => _89!,n,playback,beep
exten => _89!,n,hangup
;
; --------------------------------------------------------------------
; für rausgehende Rufe
;
; Es hat sich als gute Praxis erwiesen, die Inhalte der Datei
; extensions.conf modular aufzubauen. Diese Praxis wollen
; wir auch hier anwenden
;
[lokal]
include => echotest
include => authtest
include => recordtest
include => record_message
include => mohtest
include => callthroughtest
include => callbacktest
include => headsettest
; Erreichbarkeit der Nebenstellen
; untereinander herstellen
; Erreichbarkeit der Telefone am internen S0 der fritzbox 7050
; (wähle nach S0 intern ohne führende Ziffer 5: 5123 für Telefon mit msn=123)
exten => _5.,1,Dial,CAPI/ISDN3/${EXTEN:1}|55|Tt/b
; remote asterisk
; (wähle nach remote asterisk ohne führende Ziffer 6: 680 echotest remote)
exten => _6X.,1,Dial,IAX2/[email protected]/${EXTEN:1}
; SCCP
exten => _70X,1,Dial,SCCP/${EXTEN}|55|Ttr
; SIP
exten => _77X,1,Dial,SIP/${EXTEN}|55|Ttr
; IAX2
exten => _8[1-9],1,Dial,IAX2/${EXTEN}|55|Ttr
[festnetz_out]
; Raustelefonieren per externen S0 der fritzbox 7050
; wenn Nummer führende Null hat (0 wird mitgewählt!)
; erzwinge default calller id aus capi.conf: /d
; (/d geht nicht; SetCallerID verwenden)
exten => _0X.,1,SetCallerID,${CAPI_CALLERID}
exten => _0X.,n,Dial,CAPI/ISDN1/${EXTEN}|55|Tt/bd
[sip_out]
;exten => _99.,1,Dial,SIP/${EXTEN:2}@sip1_out|45|r
exten => _X.,1,Set(CALLERID(num)=SIPID)
exten => _X.,2,Dial(SIP/${EXTEN}@sipgate-out,30,trg)
exten => _X.,3,Hangup
; --------------------------------------------------------------------
; für reinkommende Rufe
;
; hier kommt der default-Context, in dem alle Geraete in der
; Grundkonfiguration erstmal laufen.
; Alle Geraete koennen sich gegenseitig anrufen
[default]
include => lokal
[sip771]
include => lokal
include => festnetz_out
include => sip_out
[sip772]
include => lokal
include => festnetz_out
include => sip_out
[sip773]
include => lokal
include => festnetz_out
include => sip_out
[sip774]
include => lokal
include => festnetz_out
include => sip_out
[sccp701]
include => lokal
include => festnetz_out
include => sip_out
[sccp702]
include => lokal
include => festnetz_out
include => sip_out
[sccp703]
include => lokal
include => festnetz_out
include => sip_out
[iax81]
include => lokal
include => festnetz_out
include => sip_out
[iax82]
include => lokal
include => festnetz_out
include => sip_out
[iax83]
include => lokal
include => festnetz_out
include => sip_out
[iax84]
include => lokal
include => festnetz_out
include => sip_out
[asterisk2_in]
include => lokal
; ISDN S0 extern
[capi_in1]
; solange in capi.conf nur auf einer msn Nummer Anrufe angenommen werden
; reicht es, unabhängig von der msn immer auf die
; gewünschten Nebenstellen weiterzuverbinden
; callback?
; (compare number and channel of caller with number and channel in CB_IN_CHANNEL)
exten => _X.,1,noop,callerid_num=${CALLERID(num)}, channel=${CHANNEL}, callback_channel=${CB_IN_CHANNEL}
exten => _X.,n,gotoif,$["${CHANNEL:0:$[${LEN(${CB_IN_CHANNEL})}-1-${LEN(${CALLERID(num)})}]}" != "${CB_IN_CHANNEL:0:$[${LEN(${CB_IN_CHANNEL})}-1-${LEN(${CALLERID(num)})}]}"]?80
exten => _X.,n,gotoif,$["${CALLERID(num)}" != "${CB_IN_CHANNEL:-${LEN(${CALLERID(num)})}}"]?80
exten => _X.,n,goto,callback-wait|s|1
; Bei SCCP SetCalledParty Funktion nutzen um Name und Nummer der jeweiligen angerufenen Nebenstelle(n)
; fuer chan_sccp zu setzen
;exten => _701.,1,SetCalledParty("Home Office" <1234567>)>
;exten => _701.,2,Dial,SIP/771&IAX2/81&SCCP/701&CAPI/ISDN3/31|30|r
; mit sccp:
exten => _X.,80,Dial,SIP/771&IAX2/81&SCCP/701&CAPI/ISDN3/31|30|r
; ohne sccp:
;exten => _X.,80,Dial,SIP/771&IAX2/81&CAPI/ISDN3/31|30|r
; ISDN S0 intern: akzeptiere nur Anrufe mit führender 9
; (entferne die führende 9 und das abschliessende #)
[capi_in3]
exten => _9[1-8]!,1,Macro,entfernegitter
exten => _9[1-8]!,n,Goto,lokal|${EXTEN2:1}|1
exten => _90!,1,Macro,entfernegitter
exten => _90!,n,Goto,festnetz_out|${EXTEN2:1}|1
exten => _99!,n,Goto,sip_out|${EXTEN2:2}|1
[mobile_in]
exten => s,1,noop,${CALLERID(all)}
exten => s,n,Dial,SIP/772
;exten => s,n,goto,echotest|80|1
[sip_in]
exten => sip1,1,noop,${CALLERID(all)}
exten => sip1,n,Dial,SIP/771&IAX2/81&CAPI/ISDN3/31|30|r