ASTERISK IN FUNKTION

Mit dieser Seite versuchen wir mal eine Beispielkonfiguration einer Asterisk zur Verfügung zu stellen,die also schon einige features beinhaltet.
Wir - das sind Mark,Petra und ich - moechten damit aufzeigen,wie man sich auf einem Miet- oder eigenen Server eine super Telefonanlage aufsetzen kann.


Da Asterisk Open Source ist,waeren da nur die Kosten fuer den Mietserver oder dem eigenen Rechner zuhause,der als Server fungiert.
Aber von zuhause aus sollte schon einiges an Speed beim DSL-Anschluss vorhanden sein!
Desweiteren haben viele User eine dynamische IP zuhause,so dass auf jeden Fall mit Dyndns.org oder No-ip.com gearbeitet werden muß. Ein Server zuhause verursacht auch Stromkosten,die nicht unerheblich sein muessen und die Wartung obliegt einem selbst.

Trotzdem kann es u.U. noch preiswerter sein wie ein Mietserver,die es Heute kaum noch unter 40,-- E gibt.
Auf jeden Fall kann und wird ein eigener Server,wo auch immer er sich befindet,vieles einfacher machen und so manche NAT-Problematik ausschliessen.
Wer einen solchen Asterisk betreibt,sollte auch die firewallspezifischen Grundlagen beachten und notfalls auch mal auf die Dus.net " Hilfe " gehen.
Dort in die "FAQ - Wissensdatenbank - VOIP - Router und Firewall verwenden" reinschauen!
Dieses ist eine große Hilfe und sollte für alle Anbieter die richtigen Ports beinhalten.
Wir tendieren zu einem Mietserver,da man sich damit um nichts weiter als der Konfiguration kümmern muß.

Diese Seite ersetzt allerdings nicht einen gewissen Kenntnisstand in Sachen Linux und evtl. php,den sich jeder über Fachliteratur aneignen muss.
Man sollte ja auch in der Lage sein,einige Veraenderungen vornehmen,oder eine Fehlersuche erfolgreich abschliessen zu koennen.
Braucht man nur noch vernuenpftige Hardware und den DSL-Anschluss und schon kann es losgehen.


der Sipura SIP-Adapter

das Elmeg IP 290

oder das softphone X-Lite
Wir werden zusehen,alles so verstaendlich wie moeglich darzustellen und zu erklaeren.
Das gleiche System nutzen wir selbst derzeit erfolgreich und gestalten so unsere gesamte Kommunikation von zuhause und unterwegs.
Fragen und spezielle Probleme kann sicherlich einer unser Administratoren klaeren,da waere vorrangig unser guter Freund Thomas Hoellriegel (Blindi) zu nennen
den man unter Blindi erreichen kann.
Er setzt auch gerne gegen einen abgesprochenen Betrag einen solchen Server auf,weitergehende Konfigurationen kosten dann noch etwas extra.
Sicher wird es auf jeden Fall preiswerter als bei gewerblichen Anbietern.
Wer also gar nicht alleine klarkommt,sollte das investieren und ihn das machen lassen,da weiß man dann,das es auch funktioniert!
Diese Dokumentation gilt für die Version 1.4.,die 1.6 ist etwas anders.

So,nun legen wir mal los:

sip.conf

[general]
allowoverlap=yes
insecure=port,invite
nat=route
disallow=all
allow=g722
allow=alaw
allow=ulaw
allow=g729
canreinvite=yes
allowguest=yes
context=ankommend
bindport=5060
bindaddr=0.0.0.0
externip = IP des Servers
srvlookup=yes
maxexpirey=3600
defaultexpirey=600
useragent=AVM FRITZ!Box Fon WLAN 7170 (UI) 29.04.59 (Jun 27 2008)
language=de
dtmfmode=auto
videosupport=yes

Hier wird der Account registriert
register => Rufnummer:Passwort@Registrar/Rufnummer
register => Rufnummer2:Passwort@Registrar2/Rufnummer2
register => PURtel-ID:Passwort@deu2.purtel.com/PURtel-ID

register => Sipgate-ID:Passwort@sipgate.de/Rufnummer
register => Bellshare-ID:Passwort@bellshare.com/Rufnummer oder Bellshare-ID
register => SC-ID:Passwort@sip.simply-connect.de/Rufnummer
register => bluesip/Bezeichnung:Passwort@bluesip.net/Rufnummer
register => carpo-ID:Passwort@sip.carpo.de/Rufnummer
register => 000387xxxxx:Passwort@voip.dus.net/Rufnummer
register => justvoip-ID:Passwort@sip.justvoip.com/0049-Rufnummer
register => Pepphone-ID:Passwort@sip.pepphone.de/Rufnummer
register => 49-Rufnummer:Passwort@sip.1und1.de/49-Rufnummer
;Rufnummern,die nicht eingehend genutzt werden,brauchen nicht im "register" stehen!
;-------------------------

;justvoip

[0049-Rufnummer]
type=peer
username=justvoip-ID
fromuser=0049-Rufnummer
secret=Passwort
host=sip.justvoip.com
fromdomain=sip.justvoip.com

; Carpo

[Rufnummer]
type=peer
username=carpo-ID
fromuser=carpo-ID
secret=Passwort
host=sip.carpo.de
fromdomain=sip.carpo.de
dtmfmode=auto

; pepphone

[pepphone-Rufnummer]
type=peer
username=Pepphone-ID
fromuser=Pepphone-ID
secret=Passwort
host=sip.pepphone.de
fromdomain=sip.pepphone.de

; PURtel.com

[PURtel-ID]
type=peer
username=PURtel-ID
fromuser=PURtel-ID
secret=Passwort
host=deu2.purtel.com
fromdomain=deu2.purtel.com

; Sipgate.de

[Rufnummer]
type=peer
username=Sipgate-ID
fromuser=Sipgate-ID
secret=Passwort
host=sipgate.de
fromdomain=sipgate.de

;dus.net

[Rufnummer]
type=peer
username=000387xxxxx
host=voip.dus.net
fromdomain=voip.dus.net
fromuser=000387xxxxx
secret=Passwort
relaxdtmf=yes

; 1&1.de United Internet

[49-Rufnummer]
type=peer
username=49-Rufnummer
fromuser=49-Rufnummer
secret=Passwort
host=sip.1und1.de
fromdomain=sip.1und1.de
defaultexpiry=240

; Bellshare.com ehemals sipsnip

[Rufnummer]
type=peer
username=bellshare-ID
fromuser=bellshare-ID
secret=Passwort
host=bellshare.com
fromdomain=bellshare.com

; Simply-connect.de

[Rufnummer]
type=peer
username=SC-ID
fromuser=SC-ID
secret=Passwort
host=sip.simply-connect.de
fromdomain=sip.simply-connect.de

;------------------------
;Nebenstellen:
[300]
callerid=Phone 300 <300>
host=dynamic
user=Nebenstelle1
secret=Passwort
type=friend
mailbox=Mailbox-Pin
context=xxx

[301]
callerid=Phone 301 <301>
host=dynamic
user=301
secret=Passwort
type=friend
dtmfmode=rfc2833
mailbox=Mailbox-Pin
context=yyy

;---------------------------------
[dus.net_in]
type=peer
fromdomain=voip.dus.net
host=voip.dus.net
context=ankommend

[dus.net_in_1]
type=peer
fromdomain=talos.dus.net
host=talos.dus.net
context=ankommend

[dus.net_in_2]
type=peer
fromdomain=zelos.dus.net
host=zelos.dus.net
context=ankommend

[dus.net_in_3]
type=peer
fromdomain=helios.dus.net
host=helios.dus.net
context=ankommend

[dus.net_in_4]
type=peer
fromdomain=eos.dus.net
host=eos.dus.net
context=ankommend

[dus.net_in_5]
type=peer
fromdomain=ares.dus.net
host=ares.dus.net
context=ankommend

[1und1_in]
type=peer
fromdomain=sip.1und1.de
host=sip.1und1.de
context=ankommend

[purtel_com_in]
type=peer
fromdomain=deu2.purtel.com
host=deu2.purtel.com
context=ankommend

[sipgate_de_in]
dtmfmode=auto
dtmf=auto
type=friend
fromdomain=sipgate.de
host=sipgate.de
context=ankommend

[simply_in]
type=peer
fromdomain=sip.simply-connect.de
host=sip.simply-connect.de
context=ankommend

[bellshare_in]
type=peer
fromdomain=bellshare.com
host=bellshare.com
context=ankommend

[bluesip_in]
type=peer
host=bluesip.net
fromdomain=bluesip.net
context=ankommend
dtmfmode=auto
dtmf=auto

[carpo_in]
type=peer
fromdomain=sip.carpo.de
host=sip.carpo.de
context=ankommend

[pepphone_in]
type=peer
fromdomain=sip.pepphone.de
host=sip.pepphone.de
context=ankommend

[justvoip.com_in]
type=peer
fromdomain=sip.justvoip.com
host=sip.justvoip.com
context=ankommend


;extensions.conf:

[general]
static=yes
writeprotect=yes
autofallthrough=no
clearglobalvars=no
priorityjumping=yes

[globals]
ANSWERTRUNK1=13
ANSWERTRUNK2=16
ANSWERTRUNK3=19
CONFMAX => 3 ; max persons in conference
ZEIT=${STRFTIME(Europe/Berlin,"%d-%m-%Y-%H:%M")}) ;S SEC

smstext=Rückruf

[macro-stdmeetme]
; with limit to max number of persons in conference
exten => s,1,MeetMeCount(${MACRO_EXTEN},count)
exten => s,2,Gotoif($[${count} >= ${CONFMAX}]?103)
exten => s,3,MeetMe(${MACRO_EXTEN})
exten => s,4,Goto(s,1)
exten => s,103,NoOP
exten => s,104,Busy

;;say the callerid for imcoming calls
[macro-saycallerid]
exten => s,1,Set(CHANNEL(language)=de)
exten => s,n,Playback(anruf-von)
exten => s,n,SayDigits(${ARG1})
exten => s,n,Hangup

;-------------------------------------
[macro-enterkonf]
exten => s,1,NoOp(Wir sind im Macro enterkonf)
exten => s,2,GotoIf(${DB_EXISTS(konf/teilnehmer)}?4:3)
exten => s,3,Set(DB(konf/teilnehmer)=0)
exten => s,4,Set(DB(konf/teilnehmer)=${MATH(${DB(konf/teilnehmer)}+1)})
exten => s,5,System(echo "${ZEIT}: ${CALLERID(num)} Konferenz betreten." | mail -s Konferenzbenachrichtigung Emailadresse)

[macro-leavekonf]
exten => s,1,NoOp(Wir sind im Macro leavekonf)
exten => s,2,Set(DB(konf/teilnehmer)=${MATH(${DB(konf/teilnehmer)}-1)})
exten => s,3,System(echo "${ZEIT}: ${CALLERID(num)} Konferenz verlassen." | mail -s Konferenzbenachrichtigung Emailadresse)

[macro-konf]
exten => s,1,NoOp(Wir sind im Macro konf)
exten => s,2,GotoIf(${DB_EXISTS(konf/teilnehmer)}?4:3)
exten => s,3,Set(DB(konf/teilnehmer)=0)
exten => s,4,Set(DB(konf/teilnehmer)=${MATH(${DB(konf/teilnehmer)}+1)})
exten => s,5,System(echo "${ZEIT}: ${CALLERID(num)} Konferenz 2015 betreten." | mail -s Konferenzbenachrichtigung Emailadresse)

[macro-konfer]
exten => s,1,NoOp(Wir sind im Macro konfer)
exten => s,2,Set(DB(konf/teilnehmer)=${MATH(${DB(konf/teilnehmer)}-1)})
exten => s,3,System(echo "${ZEIT}: ${CALLERID(num)} Konferenz verlassen." | mail -s Konferenzbenachrichtigung Emailadresse)

;--------------------------------------------

[macro-ruf]
exten => s,1,NoOp(Wir sind im Macro ruf gelandet)
exten => s,n,Dial(${ARG1}/${ARG2},120,rtTwW)
exten => s,n,Goto(s-${DIALSTATUS},1)

exten => s-BUSY,1,voicemail(${ARG2},b)
exten => s-BUSY,n,Hangup()

exten => s-CHANUNAVAIL,1,voicemail(${ARG2},u)
exten => s-CHANUNAVAIL,n,Hangup()

exten => s-NOANSWER,1,voicemail(${ARG2},u)
exten => s-NOANSWER,n,Hangup()

[sound]
exten => 6667,1,Answer
exten => 6667,n,Record(/var/lib/asterisk/sounds/myansage:gsm,20,1200)
exten => 6667,n,Hangup
exten => 9000,1,Playback(/var/lib/asterisk/sounds/myansage)

[voicemenue]
exten => 130,1,set(TIMEOUT(response(=10)
exten => 130,n,Answer
exten => 130,n,Ringing()
exten => 130,n,Wait(2)
exten => 130,n,Background(myansage)

exten => 1,1,Dial(SIP/300,20)
exten => 1,n,System(echo "Passwort#Handy-Empfaenger#Standard#" | mail -s "${ZEIT}: Von: ${CALLERID(num):} bittet um ${smstext}" email2sms@sms77.de)
exten => 1,n,Dial(Local/Handy@01567,60,)
exten => 1,n,Hangup
exten => 2,1,Dial(SIP/Rufnummer@Sipgate,30)
exten => 2,n,Dial(Local/2.Handynummer@01567,60)
exten => 2,n,Hangup
exten => 3,1,Dial(Local/3.Handynummer@01567,40,)
exten => 3,n,Hangup
exten => 4,1,Dial(Local/4.Handynummer@01567,40)
exten => 4,n,Hangup
exten => 5,1,Dial(Local/5.Handynummer@01567,40)
exten => 5,n,Hangup
exten => 51,1,Dial(SIP/Rufnummer@Sipgate,40)
exten => 51,n,Hangup
exten => 52,1,Dial(SIP/Rufnummer@Sipgate,40)
exten => 52,n,Hangup

exten => i,1,Playback(invalid)

[infophone]
exten => 299,1,answer()
exten => 299,n,Ringing()
exten => 299,n,Wait(2)
exten => 299,n,Playback(dusnet)
exten => 299,n,hangup()

[mailbox]
exten => 80,1,answer()
exten => 80,n,wait(1)
exten => 80,n,voicemailmain()
exten => 80,n,hangup()

[mailbox_own]
exten => 88,1,answer()
exten => 88,n,wait(1)
exten => 88,n,voicemailmain(${CALLERID(num)},s)
exten => 88,n,hangup()

[echotest]
exten => 81,1,answer()
exten => 81,n,wait(1)
exten => 81,n,playback(demo-echotest)
exten => 81,n,echo()
exten => 81,n,playback(demo-echodone)
exten => 81,n,hangup()

;---------------------------------------
[konferenz]
exten => 3050,1,Ringing
exten => 3050,n,Wait(1)
exten => 3050,n,Macro(enterkonf)
exten => 3050,n,MeetMe(1000,Micx)
exten => 3050,n,Macro(leavekonf)
exten => 3050,n,hangup

[konferenz 2]
exten => 2015,1,Ringing
exten => 2015,n,Wait(1)
exten => 2015,n,Macro(konf)
exten => 2015,n,Dial(SIP/SC-Konferenz-ID@SC-Rufnummer,60,rwW)
exten => 2015,n,Macro(konfer)
exten => 2015,n,hangup
;----------------

[lokal]
exten => _3X,1,NoCDR()
exten => _3X,n,macro(ruf,SIP,${EXTEN})

exten => _7X,1,NoCDR()
exten => _7X,n,macro(ruf,SIP,${EXTEN})

exten => _31X,1,NoCDR()
exten => _31X,n,macro(ruf,SIP,${EXTEN})

; IAX
exten => 320,1,NoCDR()
exten => 320,n,Dial(IAX2/320,55,Ttr)

exten => 300,1,Dial(SIP/300,20,rtTwW)
exten => 300,n,System(echo "${ZEIT}: ${CALLERID(num)} hat angerufen." | mail -s anruf Emailadresse)
exten => 300,n,System(echo "Passwort#Empfaenger-Handy#Standard#" | mail -s "${ZEIT}: Von: ${CALLERID(num):} bittet um ${smstext}" email2sms@sms77.de)
exten => 300,n,Playback(weiterleitung)
exten => 300,n,Dial(Local/Handynummer@01567,90,rtTMwW(saycallerid^${CALLERID(num)}))

exten => 301,1,Dial(SIP/301,20,rtTwW)
exten => 301,n,System(echo "${ZEIT}: ${CALLERID(num)} hat angerufen." | mail -s anruf Emailadresse)
exten => 301,n,System(echo "Passwort#Empfaenger-Handy#Standard#" | mail -s "${ZEIT}: Von: ${CALLERID(num):} bittet um ${smstext}" email2sms@sms77.de)
exten => 301,n,Playback(weiterleitung)
exten => 301,n,Dial(Local/Handynummer@01567,90,rtTMwW(saycallerid^${CALLERID(num)}))

[besuch]
exten => 301,1,Dial(SIP/Weiterleitungsziel@Sipgate,60,rtT)
exten => 302,1,Dial(SIP/Weiterleitungsziel@Sipgate,60,rtT)
exten => 303,1,Dial(SIP/Weiterleitungsziel@Sipgate,60,rtT)
exten => 306,1,Dial(SIP/Weiterleitungsziel@Sipgate,60,rtT)
exten => 7005,1,Dial(SIP/Weiterleitungsziel@Sipgate,60,rtT)

;---------------------------------------------------

[verwandte]
exten => 73872,1,Dial(Local/Handynummer@01567,60,rM(saycallerid^${CALLERID(num)})) ;petra = 73872
exten => 7272,1,Dial(SIP/Rufnummer@Sipgate,60,rtTM(saycallerid^${CALLERID(num)})) ;papa= 7272 (Telefontastatur))

;;Schwiegereltern
[thomas-eltern]

exten => s,1,Answer
exten => s,2,Set(TIMEOUT(response)=60)
exten => s,3,DISA(no-password,thomas-eltern-dial)
exten => s,4,Hangup
exten => s,102,Busy

[thomas-eltern-dial]

exten => _0[2-9].,1,Dial(SIP/${EXTEN}@1und1-Nummer,60,Ttr)
include => lokal
include => dusnet_out
include => directkonf
exten => 290,1,Dial(Local/Handy@01567,60,r);Moni
exten => 291,1,Dial(SIP/Rufnummer@1und1-Nummer,60,r);zuhause

;----------------------------------------------
[dus.net-support]
exten => 100,1,Dial(SIP/021123704140@voip.dus.net)
;----------------------------------------------------------------

[dtmf]
exten => 101,1,Dial(SIP/000387804816@voip.dus.net)
;------------------------------------------------------------------

[ts]
exten => 87,1,Dial(SIP/teamspeak-Nummer@Sipgate,60,rtTwW)
;-------------------------------------------------

[uri]
exten => 55,1,Dial(SIP/10000@bellshare.com)
;-----------------------------------------------

[02-09]
;exten => _0[2-9].,1,Set(GROUP()=Sipgate1)
exten => _0N.,1,Set(GROUP()=Sipgate1)
exten => _0N.,2,GotoIf($["${GROUP_COUNT(Sipgate1)}">"1"]?4:3)
exten => _0N.,3,Dial(SIP/0049${EXTEN:1}@Sipgate1,)

exten => _0N.,4,Set(GROUP()=Sipgate2)
exten => _0N.,5,GotoIf($["${GROUP_COUNT(Sipgate2)}">"1"]?7:6)
exten => _0N.,6,Dial(SIP/0049${EXTEN:1}@Sipgate2,)

exten => _0N.,7,Set(GROUP()=Sipgate3)
exten => _0N.,8,GotoIf($["${GROUP_COUNT(Sipgate3)}">"1"]?10:9)
exten => _0N.,9,Dial(SIP/0049${EXTEN:1}@Sipgate3,)
exten => _0N.,10,Answer
exten => _0N.,11,wait(1)
exten => _0N.,12,Playback(bad)
exten => _0N.,13,hangup

[national]
exten => _49N.,1,Set(GROUP()=Sipgate1)
exten => _49N.,2,GotoIf($["${GROUP_COUNT(Sipgate1)}">"1"]?4:3)
exten => _49N.,3,Dial(SIP/0049${EXTEN:2}@Sipgate1,)

exten => _49N.,4,Set(GROUP()=Sipgate2)
exten => _49N.,5,GotoIf($["${GROUP_COUNT(Sipgate2)}">"1"]?7:6)
exten => _49N.,6,Dial(SIP/0049${EXTEN:2}@Sipgate2,)

exten => _49N.,7,Set(GROUP()=Sipgate3)
exten => _49N.,8,GotoIf($["${GROUP_COUNT(Sipgate3)}">"1"]?10:9)
exten => _49N.,9,Dial(SIP/0049${EXTEN:2}@Sipgate3,)
exten => _49N.,10,Answer
exten => _49N.,11,wait(1)
exten => _49N.,12,Playback(bad)
exten => _49N.,13,hangup

exten => _+49N.,1,Set(GROUP()=Sipgate1)
exten => _+49N.,2,GotoIf($["${GROUP_COUNT(Sipgate1)}">"1"]?4:3)
exten => _+49N.,3,Dial(SIP/0049${EXTEN:3}@Sipgate1,)

exten => _+49N.,4,Set(GROUP()=Sipgate2)
exten => _+49N.,5,GotoIf($["${GROUP_COUNT(Sipgate2)}">"1"]?7:6)
exten => _+49N.,6,Dial(SIP/0049${EXTEN:3}@Sipgate2,)

exten => _+49N.,7,Set(GROUP()=Sipgate3)
exten => _+49N.,8,GotoIf($["${GROUP_COUNT(Sipgate3)}">"1"]?10:9)
exten => _+49N.,9,Dial(SIP/0049${EXTEN:3}@Sipgate3,)
exten => _+49N.,10,Answer
exten => _+49N.,11,wait(1)
exten => _+49N.,12,Playback(bad)
exten => _+49N.,13,hangup

exten => _0049N.,1,Set(GROUP()=Sipgate1)
exten => _0049N.,2,GotoIf($["${GROUP_COUNT(Sipgate1)}">"1"]?4:3)
exten => _0049N.,3,Dial(SIP/0049${EXTEN:1}@Sipgate1,)

exten => _0049N.,4,Set(GROUP()=Sipgate2)
exten => _0049N.,5,GotoIf($["${GROUP_COUNT(Sipgate2)}">"1"]?7:6)
exten => _0049N.,6,Dial(SIP/0049${EXTEN:1}@Sipgate2,)

exten => _0049N.,7,Set(GROUP()=Sipgate3)
exten => _0049N.,8,GotoIf($["${GROUP_COUNT(Sipgate3)}">"1"]?10:9)
exten => _0049N.,9,Dial(SIP/0049${EXTEN:1}@Sipgate3,)
exten => _0049N.,10,Answer
exten => _0049N.,11,wait(1)
exten => _0049N.,12,Playback(bad)
exten => _0049N.,13,hangup
;-------------------------------------------------------------------

[ausland]
exten => _00Z.,1,Dial(SIP/00${EXTEN:2}@Purtel-ID,60,rtTwW)

[frankreich]
exten => _0033.,1,Dial(SIP/00${EXTEN:4}@Sipgate,60,rtTwW)

[01805]
exten => _01805.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01805.,n,Dial(SIP/01805${EXTEN:5}@PURtel-ID,45,rtTwW)br>
exten => _01803.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01803.,n,Dial(SIP/01803${EXTEN:5}@PURtel-ID,45,rtTwW)

exten => _01801.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01801.,n,Dial(SIP/01801${EXTEN:5}@PURtel-ID,45,rtTwW)

exten => _01802.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01802.,n,Dial(SIP/01802${EXTEN:5}@PURtel-ID,45,rtTwW)

[01567]
exten => _01[5-7].,1,GotoIfTime(00:00-04:00,*,*,*?10)
exten => _01[5-7].,n,GotoIfTime(04:00-08:00,*,*,*?10)
exten => _01[5-7].,n,GotoIfTime(08:00-12:00,*,*,*?20)
exten => _01[5-7].,n,GotoIfTime(12:00-16:00,*,*,*?20)
exten => _01[5-7].,n,GotoIfTime(16:00-20:00,*,*,*?30)
exten => _01[5-7].,n,GotoIfTime(20:00-00:00,*,*,*?40)
exten => _01[5-7].,10,Dial(SIP/${EXTEN:}@pepphone-Nummer.,99,)
exten => _01[5-7].,11,Hangup()
exten => _01[5-7].,20,Dial(SIP/${EXTEN:}@Sipgate-Nummer,99,)
exten => _01[5-7].,21,Hangup()
exten => _01[5-7].,30,Dial(SIP/${EXTEN:}@Dus.net-Nummer,99,)
exten => _01[5-7].,31,Hangup
exten => _01[5-7].,40,Dial(SIP/${EXTEN:}@bellshare-Nummer,99,)
exten => _01[5-7].,41,Hangup
exten => _01[5-7].,50,Dial(SIP/${EXTEN:}@PURtel-ID,99,)
exten => _01[5-7].,51,Hangup
exten => _01[5-7].,60,Dial(SIP/${EXTEN:}@justvoip-Nummer,99,)
exten => _01[5-7].,61,Hangup

exten => _00491[5-7].,1,GotoIfTime(00:00-04:00,*,*,*?10)
exten => _00491[5-7].,n,GotoIfTime(04:00-08:00,*,*,*?10)
exten => _00491[5-7].,n,GotoIfTime(08:00-12:00,*,*,*?20)
exten => _00491[5-7].,n,GotoIfTime(12:00-16:00,*,*,*?20)
exten => _00491[5-7].,n,GotoIfTime(16:00-20:00,*,*,*?30)
exten => _00491[5-7].,n,GotoIfTime(20:00-00:00,*,*,*?40)
exten => _00491[5-7].,10,Dial(SIP/${EXTEN:}@Pepphone-Nummer,99,)
exten => _00491[5-7].,11,Hangup()
exten => _00491[5-7].,20,Dial(SIP/${EXTEN:}@Sipgate-Nummer,99,)
exten => _00491[5-7].,21,Hangup()
exten => _00491[5-7].,30,Dial(SIP/${EXTEN:}@Dus.net-Nummer,99,)
exten => _00491[5-7].,31,Hangup
exten => _00491[5-7].,40,Dial(SIP/${EXTEN:}@bellshare-Nummer,99,)
exten => _00491[5-7].,41,Hangup
exten => _00491[5-7].,50,Dial(SIP/${EXTEN:}@PURtel-ID,99,)
exten => _00491[5-7].,51,Hangup
exten => _00491[5-7].,60,Dial(SIP/${EXTEN:}@justvoip-Nummer,99,)
exten => _00491[5-7].,61,Hangup

exten => _491[5-7].,1,GotoIfTime(00:00-04:00,*,*,*?10)
exten => _491[5-7].,n,GotoIfTime(04:00-08:00,*,*,*?10)
exten => _491[5-7].,n,GotoIfTime(08:00-12:00,*,*,*?20)
exten => _491[5-7].,n,GotoIfTime(12:00-16:00,*,*,*?20)
exten => _491[5-7].,n,GotoIfTime(16:00-20:00,*,*,*?30)
exten => _491[5-7].,n,GotoIfTime(20:00-00:00,*,*,*?40)
exten => _491[5-7].,10,Dial(SIP/00491${EXTEN:3}@Pepphone-Nummer,99,tT)
exten => _491[5-7].,11,Hangup()
exten => _491[5-7].,20,Dial(SIP/00491${EXTEN:3}@Sipgate-Nummer,99,tT)
exten => _491[5-7].,21,Hangup()
exten => _491[5-7].,30,Dial(SIP/00491${EXTEN:3}@Dus.net-Nummer,99,rtTwW)
exten => _491[5-7].,31,Hangup
exten => _491[5-7].,40,Dial(SIP/00491${EXTEN:3}@bellshare-Nummer,99,rtTwW)
exten => _491[5-7].,41,Hangup
exten => _491[5-7].,50,Dial(SIP/00491${EXTEN:3}@PURtel-ID,99,rtTwW)
exten => _491[5-7].,51,Hangup
exten => _491[5-7].,60,Dial(SIP/00491${EXTEN:3}@justvoip-Nummer,99,rtTwW)
exten => _491[5-7].,61,Hangup

exten => _+491[5-7].,1,GotoIfTime(00:00-04:00,*,*,*?10)
exten => _+491[5-7].,n,GotoIfTime(04:00-08:00,*,*,*?10)
exten => _+491[5-7].,n,GotoIfTime(08:00-12:00,*,*,*?20)
exten => _+491[5-7].,n,GotoIfTime(12:00-16:00,*,*,*?20)
exten => _+491[5-7].,n,GotoIfTime(16:00-20:00,*,*,*?30)
exten => _+491[5-7].,n,GotoIfTime(20:00-00:00,*,*,*?40)
exten => _+491[5-7].,10,Dial(SIP/0049${EXTEN:4}@Pepphone-Nummer,99,)
exten => _+491[5-7].,11,Hangup()
exten => _+491[5-7].,20,Dial(SIP/0049${EXTEN:4}@Sipgate-Nummer,99,)
exten => _+491[5-7].,21,Hangup()
exten => _+491[5-7].,30,Dial(SIP/01${EXTEN:4}@Dus.net-Nummer,99,rtTwW)
exten => _+491[5-7].,31,Hangup
exten => _+491[5-7].,40,Dial(SIP/01${EXTEN:4}@bellshare-Nummer,99,rtTwW)
exten => _+491[5-7].,41,Hangup
exten => _+491[5-7].,50,Dial(SIP/01${EXTEN:4}@PURtel-ID,99,rtTwW)
exten => _+491[5-7].,51,Hangup
exten => _+491[5-7].,60,Dial(SIP/01${EXTEN:4}@justvoip-Nummer,99,rtTwW)
exten => _+491[5-7].,61,Hangup

[dusnet_out]
exten => _000.,1,Dial(SIP/000${EXTEN:3}@Dus.net-Nummer,60,rtTwW)

---------------
[mbeuster]
exten => _0.,1,Set(CALLERID(num)=0049-Rufnummer)
exten => _0.,n,Set(CALLERID(name)=0049-Rufnummer)
exten => _0.,n,Dial(SIP/${EXTEN}@justvoip-Nummer,120,rtT)
exten => _0.,n,Hangup
exten => _222.,1,Dial(SIP/${EXTEN:3}@PURtel-ID,60,rtT)
exten => _444.,1,Dial(SIP/${EXTEN:3}@Dus.net-Nummer,60,rtT)
exten => _555.,1,Dial(SIP/${EXTEN:3}@SC-Nummer,60,rtT)
exten => _888.,1,Dial(SIP/${EXTEN:3}@Sipgate-Nummer,60,rtT)
exten => t,1,Playback(skinny)
exten => t,2,Hangup

[wilderebi]
exten => _667.,1,Dial(SIP/&{EXTEN:3}@Dus.net-Nummer,60,rtT)
exten => _777.,1,Dial(SIP/&{EXTEN:3}@Sipgate-Nummer,60,rtT)

[anbieter]

exten => _500.,1,Dial(SIP/${EXTEN:3}@carpo-Nummer,60,rtT)
exten => _501.,1,Dial(SIP/${EXTEN:3}@Dus.net-Nummer,60,rtT)
exten => _502.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _502.,2,Dial(SIP/${EXTEN:3}@PURtel-ID,60,rtT)
u.s.w.

[anbieter_extra]
exten => _516.,1,Dial(SIP/${EXTEN:3}@1und1-Nummer,60,rtT)

;;dialout Konferenz
[directkonf]
exten => 666,1,Goto(meetme-dialout,s,1)

[queues-manip] ;fuer einen Radiosender
exten => _[IO]6121,1,queue-addremove(radio,10)
exten => _[IO]6121,n,queue-success()

[warteschlange] ;fuer einen Radiosender

exten => radiom,1,Set(GROUP()=radio)
exten => radiom,2,GotoIf($["${GROUP_COUNT(radio)}">"1"]?4:3)
exten => radiom,3,Goto(112,1)
exten => radiom,4,Set(GROUP()=radio1)
exten => radiom,5,GotoIf($["${GROUP_COUNT(radio1)}">"1"]?7:6)
exten => radiom,6,Goto(113,1)
exten => radiom,7,Set(GROUP()=radio2)
exten => radiom,8,GotoIf($["${GROUP_COUNT(radio2)}">"1"]?10:9)
exten => radiom,9,Goto(114,1)
exten => radiom,10,Goto(112,1)

exten => 112,1,Set(MUSICCLASS()=default)
exten => 112,n,Queue(radio,thH)
exten => 113,1,Set(MUSICCLASS()=default)
exten => 113,n,Queue(radio1,thH)
exten => 114,1,Set(MUSICCLASS()=default)
exten => 114,n,Queue(radio2,thH)
exten => 115,1,Set(MUSICCLASS()=default)
exten => 115,n,Queue(radio3,thH)

exten => 111,1,Set(CHANNEL(language)=de)
exten => 111,n,Macro(stdmeetme,8081)

exten => 222,1,Answer()
exten => 222,n,Set(MUSICCLASS()=default)
exten => 222,n,WaitMusicOnHold(20)
exten => 222,n,Hangup()

;----------------------------------------
[webcall]
exten => _X.,1,NoOp(${var_account})
exten => _X.,2,Dial(local/${EXTEN}@${SIPPEER(${var_account}:context)},60,rtT)
exten => _X.,3,Hangup

; callback

[dialout_test]
exten => s,1,Answer
exten => s,2,Set(TIMEOUT(response)=60)
exten => s,3,DISA,no-password,dialout_neu
exten => s,4,Hangup
exten => s,102,Busy

[dialout_neu]
exten => _0N.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _0N.,2,Dial(SIP/${EXTEN}@Sipgate-Nummer,60,Ttr)

exten => _01[5-7].,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01[5-7].,2,Dial(SIP/${EXTEN}@PURtel-ID,60,Ttr)

exten => _00Z.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _00Z.,2,Dial(SIP/${EXTEN}@Dus.net-Nummer,60,Ttr)

; Kurzwahlen
exten => 1000,1,Dial(SIP/Rufnummer@Sipgate-Nummer,60,r);Zuhause
exten => 2000,1,Dial(Local/Handynummer@01567,60,r);Ebis Handy

include => lokal
include => dusnet_out
include => 01805

;[fluse]
;exten => detlef,1,Answer
;exten => detlef,2,Wait(10)
;exten => detlef,3,System(cp /etc/asterisk/call/detlef /var/spool/asterisk/outgoing/)
;exten => detlef,4,Hangup

;-------------------------------------------------------

[fluse-callthrough]

exten => 631,1,Dial(Local/Handynummer@01567,60,r);Flusi
exten => 632,1,Dial(SIP/Rufnummer@Sipgate-Nummer,60,r);Pit

exten => _01[5-7].,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _01[5-7].,2,Dial(Local/${EXTEN}@01567,80,rtTwW)

exten => _0N.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _0N.,2,Dial(SIP/${EXTEN}@Sipgate-Nummer,80,rtTwW)

exten => _00Z.,1,Set(CALLERID(all)=0049-Rufnummer)
exten => _00Z.,2,Dial(SIP/${EXTEN}@Dus.net-Nummer,80,rtTwW)

include => lokal
include => dusnet_out
include => 01805
;---------------------------------------------
[ankommend]
exten => 992,1,Dial(Local/radiom@warteschlange)

;;radio
exten => 99991,1,Set(MUSICCLASS()=default)
exten => 99991,n,Queue(radio,thH) exten => 99992,1,AgentLogin() ; Agent zum einloggen

;für callback
;exten => Sipgate-Nummer/eigene Handynummer,1,System(cp /etc/asterisk/call/detlef2 /var/spool/asterisk/outgoing/)
;exten => Sipgate-Nummer/eigene Handynummer,2,Hangup

;besserer callback
;;detlef
exten => Sipgate-Nummer/eigene Handynummer,1,EAGI(thomas-eltern.sh,eigene Handynummer)
exten => Sipgate-Nummer/eigene Handynummer,n,Ringing
exten => Sipgate-Nummer/eigene Handynummer,n,Wait(1)
exten => Sipgate-Nummer/eigene Handynummer,n,Busy

;die erste Nummer ist die Nummer,die man anruft,um den CB auszuloesen,die zweite Nummer die eigene Handynummer!

;so muß das Script aussehen,was in "var/lib/asterisk/agi-bin" liegt
Dieser Ordner "agi-bin" wird wohl erst angelegt werden muessen.

;#!/bin/sh
;##tommy callingscript
;if [ "$1" = "" ]; then
;exit 0
;fi
;cat </var/spool/asterisk/outgoing/$1
;Channel: Local/004915156xxxxxx@reinholen-delay
;#Channel: SIP/${1}@PURtel-ID
;Context: thomas-eltern
;Extension: s
;MaxRetries: 80
;RetryTime: 1

;#Callerid: 0049-Rufnummer
;#Callerid: Anonymous
;SetVar: LANGUAGE=de

;EOF

;;callback only ; Universal-CB,den man von jedem Anschluß ausloesen kann
exten => Dus.net-Nummer,1,Ringing
exten => Dus.net-Nummer,n,Wait(1)
exten => Dus.net-Nummer,n,EAGI(tommy1.sh,${CALLERID(num):})

;das dazugehoerige Script
;#!/bin/sh
;##tommy callingscript
;if [ "$1" = "" ]; then
;exit 0
;fi
;cat </var/spool/asterisk/outgoing/$1
;#Channel: Local/${1}@tommy-world-delay
;Channel: Local/${1}@reinholen-delay
;Context: reinholen
;Extension: passwd
;MaxRetries: 80
;RetryTime: 1

;Callerid: 0049-Rufnummer
;#Callerid: Anonymous
;SetVar: LANGUAGE=de

;EOF

Die " ; " natürlich entfernen beim Einsetzen!

;;tommy vater
exten => Sipgate-Nummer/eigene Handynummer,1,EAGI(thomas-eltern.sh,eigene Handynummer)
exten => Sipgate-Nummer/eigene Handynummer,n,Ringing
exten => Sipgate-Nummer/eigene Handynummer,n,Wait(1)
exten => Sipgate-Nummer/eigene Handynummer,n,Busy

;---------------------------Callthrough-------------------------
exten => Sipgate-Nummer/eigene Handynummer,1,Answer
exten => Sipgate-Nummer/eigene Handynummer,n,Set(TIMEOUT(response)=60)
exten => Sipgate-Nummer/eigene Handynummer,n,Goto(fluse-dialout,s,1)

;;kossy
exten => Sipgate-Nummer/eigene Handynummer,1,Answer
exten => Sipgate-Nummer/eigene Handynummer,n,Set(TIMEOUT(response)=60)
exten => Sipgate-Nummer/eigene Handynummer,n,Goto(fluse-dialout,s,1)
;----------------------------------
Weiterleitungen----------------------------------
exten => Sipgate-Nummer,1,Dial(SIP/SC-Konferenz-ID@SC-Nummer,60,rwW)
exten => Dus.net-Nummer,1,Goto(konferenz 2,2015,1)
exten => Dus.net-Nummer,1,Goto(infophone,299,1)
exten => carpo-Nummer,1,Goto(voicemenue,130,1)

;Petra
exten => carpo-Nummer,1,Dial(Local/Petras Handy@01567&SIP/mein Handy@PURtel-ID,80,rtTM(saycallerid^${CALLERID(num)}))
exten => carpo-Nummer,2,hangup

;Detlef
exten => carpo-Nummer,1,Dial(Local/Detlefs Handy@01567,90,rtTM(saycallerid^${CALLERID(num)}))
exten => carpo-Nummer,2,hangup

;---------------------------------------------------------------
;Anruf gleich mitschneiden
exten => carpo-Nummer,1,Answer()
exten => carpo-Nummer,n,Monitor(wav,,mb)
exten => carpo-Nummer,n,Dial(SIP/302,45,rtTwW)
exten => carpo-Nummer,n,Hangup()

;ankommende Anrufe
;300
exten => Sipgate-Nummer,1,Dial(SIP/300,20,rtT)
exten => Sipgate-Nummer,2,Playback(weiterleitung)
exten => Sipgate-Nummer,3,Dial(Local/015156009295@01567,80,rtTM(saycallerid^${CALLERID(num)}))
exten => Sipgate-Nummer,4,VoiceMail(300,u)
;-------------------------------------------------
;301
exten => PURtel-ID,1,Dial(SIP/301,20,rtT)
exten => PURtel-ID,2,Playback(weiterleitung)
exten => PURtel-ID,3,Dial(Local/015156009295@01567,80,rtTM(saycallerid^${CALLERID(num)}))
exten => PURtel-ID,4,VoiceMail(301,u)
;u.s.w.
;------------------------------------------------
[default]
include => lokal
exten => Dus.net-Nummer,1,Goto(konferenz 2,2015,1)
include => parkedcalls
include => konferenz
include => konferenz 2
include => warteschlange
include => sound
include => besuch|14:00-19:00|sun|*|*
include => ts
include => infophone

[yyy]
include => default
include => echotest
include => mailbox
include => mailbox_own
include => verwandte
include => anbieter
include => 01567
include => 01805
include => national
include => ausland
include => dusnet_out
include => wilderebi

[xxx]
include => default
include => echotest
include => mailbox
include => mailbox_own
include => verwandte
include => anbieter
include => 02-09
include => 01567
include => dus.net-support
include => dtmf
include => national
include => ausland
include => dusnet_out
include => voicemenue
exten => carpo-Nummer,1,Goto(voicemenue,130,1)
exten => Dus.net-Nummer,1,Goto(infophone,299,1)
include => directkonf
include => 01805
;-----------------------------
[reinholen]
exten => s,1,Goto(meetme-dialout,s,1)
exten => _0X.,1,noop
exten => _0X.,n,EAGI(callme.sh,${EXTEN})
exten => _0X.,n,MeetMe(9628413204,adpsx,1234)
exten => _0X.,n,Goto(meetme-dialout,s,1)

exten => _NX.,1,noop
exten => _NX.,n,EAGI(callme.sh,${EXTEN})
exten => _NX.,n,MeetMe(9628413204,adpsx,1234)
exten => _NX.,n,Goto(meetme-dialout,s,1)

exten => *,1,MeetMe(9628413204,apdsx,1234)
exten => *,n,Goto(meetme-dialout,s,1)
;;anzahl conf users
exten => 11,1,Playback(conf-users)
exten => 11,2,MeetMeCount,9628413204
exten => 11,3,MeetMe(9628413204,apcds,1234)
exten => 11,4,Goto(meetme-dialout,s,1)

;;alle kicken
exten => 14,1,Playback(kick-alle)
exten => 14,2,system(/usr/sbin/asterisk -rx "meetme kick 9628413204 all")
exten => 14,3,MeetMe(9628413204,apcds,1234)
exten => 14,4,Goto(meetme-dialout,s,1)
exten => passwd,1,Set(CHANNEL(language)=de)
exten => passwd,n,Authenticate(1510)
exten => passwd,n,Goto(meetme-dialout,s,1)

[reinholen-delay]
exten => _X.,1,Wait(10)
exten => _X.,n,Dial(SIP/${EXTEN:}@PURtel-ID,60,r)

[reinholen-delay2]
exten => _X.,1,Wait(10)
exten => _X.,n,Dial(SIP/${EXTEN:}@bellshare-Nummer,60,r)

[konfdialoutadv]
include=default
exten => _0X.,1,noop
exten => _0X.,n,Dial(SIP/${EXTEN}@PURtel-ID,60,tT)

[meetme-dialout]
exten => s,1,Set(NR=)
exten => s,2,Background(outcall-de)
exten => s,3,Set(TIMEOUT(response)=300)
exten => s,4,Set(TRANSFER_CONTEXT=konfdialoutadv)
exten => s,5,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,2,Goto(s,3)
exten => *,1,Goto(reinholen,${NR},1)
exten => #,1,Set(CALLERID(all)=0049-Rufnummer)
exten => #,2,Dial(Local/${NR}@konfdialoutadv,60,HgtT)
exten => #,3,GotoIf($[${DIALSTATUS} = NOANSWER]?5)
exten => #,4,GotoIf($[${DIALSTATUS} = CONGESTION]?5:6)
exten => #,5,Playback(vm-nobodyavail)
exten => #,6,Goto(s,1)
exten => #,104,Playback(tt-allbusy)
exten => #,105,Goto(s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup

[fluse-dialout]
exten => s,1,Set(CHANNEL(language)=de) ; Set language to french
exten => s,n,Noop
exten => s,n,Set(NR=)
exten => s,n,Background(privacy-prompt&vm-then-pound&vm-star-cancel)
exten => s,n,Set(TIMEOUT(response)=100)
exten => s,n,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,n,Goto(s,5)
exten => *,1,Goto(s,3)

exten => #,1,Dial(Local/${NR}@fluse-callthrough,90,Hg)
exten => #,n,GotoIf($[${DIALSTATUS} = NOANSWER]?4)
exten => #,n,GotoIf($[${DIALSTATUS} = CONGESTION]?4:5)
exten => #,n,Playback(vm-nobodyavail)
exten => #,n,Goto(s,1)
exten => #,102,Playback(tt-allbusy)
exten => #,103,Goto(s,1)

exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup

;--------------------------------
;iax.conf:

[general]
context=default
bindport=4569
bindaddr=IP des Servers
srvlookup=yes
insecure=very
maxexpirey=3600
defaultexpirey=600
context=ankommend
nat=yes
useragent=FritzBoxFon
language=de
disallow=all
allow=alaw allow=GSM
allow=g726
dtmfmode=auto
jitterbuffer=yes
dropcount=1

; Thomas
[320]
type=friend
username=320
secret=Passwort
host=dynamic
callerid=IAX Phone <320>
mailbox=320
notransfer=yes
context=xyz

;features.conf: so muß diese dann aussehen

;
; Sample Parking configuration
;

[general]
parkext => 700 ; What extension to dial to park
parkpos => 701-720 ; What extensions to park calls on. These needs to be
; numeric, as Asterisk starts from the start position
; and increments with one for the next parked call.
context => parkedcalls ; Which context parked calls are in
parkingtime => 1000 ; Number of seconds a call can be parked for
; (default is 45 seconds)
transferdigittimeout => 5 ; Number of seconds to wait between digits when transferring a call
;courtesytone = beep ; Sound file to play to the parked caller
; when someone dials a parked call
xfersound = beep ; to indicate an attended transfer is complete
;xferfailsound = beeperr ; to indicate a failed transfer
;adsipark = yes ; if you want ADSI parking announcements
;findslot => next ; Continue to the 'next' free parking space.
; Defaults to 'first' available
pickupexten = *8 ; Configure the pickup extension. Default is *8
featuredigittimeout = 500 ; Max time (ms) between digits for
; feature activation. Default is 500

[featuremap]
blindxfer => # ; Blind transfer
;disconnect => *0 ; Disconnect
automon => *1 ; One Touch Record
atxfer => *2 ; Attended transfer
[applicationmap]
; Note that the DYNAMIC_FEATURES channel variable must be set to use the features
; defined here. The value of DYNAMIC_FEATURES should be the names of the features
; to allow the channel to use separated by '#'. For example:
; Set(DYNAMIC_FEATURES=myfeature1#myfeature2#myfeature3)
;
;testfeature => #9,callee,Playback,tt-monkeys ;Play tt-monkeys to
;callee if #9 was pressed


meetme.conf: ;fuer die Konferenzraeume

;
; Configuration file for MeetMe simple conference rooms for Asterisk of course.
;
; This configuration file is read every time you call app meetme()

[general]
;audiobuffers=32 ; The number of 20ms audio buffers to be used
; when feeding audio frames from non-Zap channels
; into the conference; larger numbers will allow
; for the conference to 'de-jitter' audio that arrives
; at different timing than the conference's timing
; source, but can also allow for latency in hearing
; the audio from the speaker. Minimum value is 2,
; maximum value is 32.
;
[rooms]
;
; Usage is conf => confno[,pin][,adminpin]
;
; Note that once a participant has called the conference, a change to the pin
; number done in this file will not take effect until there are no more users
; in the conference and it goes away. When it is created again, it will have
; the new pin number.
;
;conf => 1234
;conf => 2345,9938
conf => 1000
;conf => 1000,1234,4567

;----------------------------------------------
voicemail.conf:
;
; Each mailbox is listed in the form =,,,,
;
; tz=central ; Timezone from zonemessages above. Irrelevant if envelope=no.
; attach=yes ; Attach the voicemail to the notification email *NOT* the pager email
; saycid=yes ; Say the caller id information before the message. If not described,
; or set to no, it will be in the envelope
; cidinternalcontexts=intern ; Internal Context for Name Playback instead of extension digits when saying caller id.
; sayduration=no ; Turn on/off the duration information before the message. [ON by default]
; saydurationm=2 ; Specify the minimum duration to say. Default is 2 minutes
; dialout=fromvm ; Context to dial out from [option 4 from the advanced menu]
; if not listed, dialing out will not be permitted
sendvoicemail=yes ; Context to Send voicemail from [option 5 from the advanced menu]
; if not listed, sending messages from inside voicemail will not be permitted
; searchcontexts=yes ; Current default behavior is to search only the default context
; if one is not specified. The older behavior was to search all
contexts.
; This option restores the old behavior [DEFAULT=no]
; callback=fromvm ; Context to call back from
; if not listed, calling the sender back will not be permitted
; review=yes ; Allow sender to review/rerecord their message before saving it [OFF by default
; operator=yes ; Allow sender to hit 0 before/after/during leaving a voicemail to
; reach an operator [OFF by default]
; envelope=no ; Turn on/off envelope playback before message playback. [ON by default]
; This does NOT affect option 3,3 from the advanced options
menu
; delete=yes ; After notification, the voicemail is deleted from the server. [per-mailbox only]
; This is intended for use with users who wish to receive their
voicemail ONLY by email.
; Note: deletevoicemail is provided as an equivalent option for Realtime configuration.
; nextaftercmd=yes ; Skips to the next message after hitting 7 or 9 to delete/save current message.
; [global option only at this time]
; forcename=yes ; Forces a new user to record their name. A new user is
; determined by the password being the same as the mailbox number. The default is "no".
; forcegreetings=no ; This is the same as forcename, except for recording greetings. The default is "no".
; hidefromdir=yes ; Hide this mailbox from the directory produced by app_directory The default is "no".
[zonemessages]
eastern=America/New_York|'vm-received' Q 'digits/at' IMp
central=America/Chicago|'vm-received' Q 'digits/at' IMp
central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours'
military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p'

[default]
; Define maximum number of messages per folder for partcular context.
;maxmsg=50

1234 => 4242,Example Mailbox,root@localhost
;4200 => 9855,Mark Spencer,markster@linux-support.net,mypager@digium.com,attach=no|serveremail=myaddy@digium.com|tz=central|maxmsg=10
tz=central|attach=yes|saycid=yes|dialout=fromvm|callback=fromvm|review=yes|operator=yes|envelope=yes|sayduration=yes|saydurationm=1
300 => Passwort,Tom,Emailadresse
301 => Passwort,Robby,Emailadresse
;u.s.w.

[other]
;The intro can be customized on a per-context basis
;directoryintro=dir-company2
1234 => 5678,Company2 User,root@localhost

Jetzt nochmal zum Callback,wofuer ja callfiles unter "cd call" erstellt werden muessen.
Also,zuerst den Ordner "call" erstellen mit "mkdir call",dann "cd call" und das callfile reinschreiben!
Man sollte zwei erstellen,um den Rueckruf verzoegern zu koennen,weil das manchmal sehr schnell geht.
;tom
Channel: SIP/Handynummer@SIP-Account
Callerid: SIP-Account
Context: dialout_test
Extension: s
SetVar: CALLERIDNUM=SIP-Account
MaxRetries: 3
Retrytime: 30
WaitTime: 30
Priority: 1

;tom2
Channel: Local/Name des callfiles@context
Context: context
Extension: Name des callfiles
Maxretries: 0
RetryTime: 30
WaitTime: 60
Priority: 1
;in unserem Beispiel waere "tom"der Name des callfiles und "callfer" der context.
Diese Methode entfaellt aber bei der callback-Version mit agi-scripts.
In Bezug auf das Voicemenue waere zu sagen,man muß die 6666 waehlen,wie im context "sound" beschrieben und nimmt somit seine Ansage auf.
Abhören kann man dann mit der 9000,um die Qualitaet zu kontrollieren.
Dieses landet im Verzeichnis /home/asterisk/sounds/ unter dem Namen "myansage.gsm" und muss von dort nach /var/lib/asterisk/sounds/ kopiert werden - fertig!
Allerdings ist das neu geloest,wie man ja jetzt bei "sound" sehen kann,da wuerde das kopieren wegfallen!
Es ist anzuraten,sich das Programm "WIN SCP" zu besorgen,da man damit wie mit einem normalen Editor in den Verzeichnissen schreiben und kopieren kann.
Mit Putty macht man dann noch den "reload" zum Sichern.
Es wird schon vorausgesetzt,dass man mit Putty oder anderen ssh-Programmen umgehen kann,das lernt man u.a. im Asterisk-Kurs im IP-Phone-Forum.
Dann mal viel Spass,Fragen werden hier nicht beantwortet,das wuerde den Rahmen sprengen,erkundigt Euch bitte in einschlaegigen Foren und Fachliteratur,darum kommt man bei Asterisk nicht drumrum.
Oder aber unser Tommi (Blindi) ist fuer Euch da,wie vorher erwaehnt.
Diese Seite soll nur Anregungen geben und eine kleine Hilfestellung darstellen,wie man einiges umsetzen kann.
Mit einer Asterisk wuerden sich so manche Probleme in Nichts aufloesen,das kann nur empfohlen werden!

Wir weisen hier nochmal auf spezielle Seiten hin,die man fuer VOIP beachten sollte.
Dus.net GmbH
Bellshare
und
Simply-Connect
PURtel GmbH
und zur Information
Opis Homepage .
VOIP fuer Anfaenger .
Auch noch ein Link für Leute,die online etwas mehr speichern moechten,oder gar Ihr backup online sichern wollen: Mozy

ERKLAERUNGEN ZUM DIALPLAN DES ASTERISK

Hier gehen wir jetzt mal genauer auf den Dialplan des Asterisk ein,den wir auf der vorherigen Seite mal aufgesetzt haben,damit man die Hintergruende besser verstehen kann.
Natuerlich kann nicht auf alles eingegangen werden,aber die Grundlagen werden wir hier klar darlegen!
Die "[general]" ist die Einleitung in der extensions.conf,sie gibt wichtige Details vor,die Asterisk erfüllen muss.
Dass der Asterisk statisch ist und schreibgeschuetzt,aber auch in den Contexten jeweils Prioritaetenspruenge zulaesst,um einen reibungslosen Ablauf der Aufgaben eines Vorganges zu gewaehrleisten.
Der Context "[globals]" ist fuer eine Konferenzschaltung wichtig,in der maximal gleichzeitig 3 Leute miteinander sprechen können,was z.B. bei einem Radiosender wichtig ist,bei dem Zuhoerer anrufen koennen.
Das sehen wir noch im Context "[warteschlange]",zu dem wir spaeter noch kommen.
Wichtig ist jetzt der naechste Context "[macro-saycallerid]",den brauchen wir,damit uns bei Weiterleitungen die Rufnummer des Anrufers angesagt wird.
Normalerweise brauchen wir das nicht,da ein Provider diese eh durchschleift,aber bei Weiterleitungen werden wir hoechstwahrscheinlich die Nummer des Anschlusses sehen,der die Weiterleitung realisiert.
Somit schaffen wir uns trotzdem die Gelegenheit,den Anrufer identifizieren zu koennen.


Die Contexte "[macro-enterkonf] / [macro-leavekonf] / [macro-konf] / [macro-konfer]" sind zustaendig für die Konferenzen,damit wir benachrichtigt werden,wann jemand die Konferenz betritt oder verläßt.
Sonst wüßten wir ja nicht,wann jemand mit uns eine Konferenz machen möchte.
Man kann dazu z.B. einen Emailanbieter nehmen,ueber den durch Filterregeln eine SMS an unser Handy geschickt wird,so dass wir auch unterwegs wissen,ob jemand im Konferenzraum wartet!
Es geht natürlich auch direkt,wie man im nachfolgenden noch sehen wird über ein SMS-Gateway wie bei sms77.de z.B.


Der Context "[macro-ruf]" ist auch für unsere interne Telefonie zwischen den Nebenstellen wichtig,damit wir wissen,wann besetzt,oder niemand erreichbar ist.
Bei "[sound]" werden die ganzen Ansagen aufgenommen,die man braucht und die oft bei Anwendungen gebraucht werden,sei es bei Konferenzen oder Warteschlangen u.s.w.,man findet diese im Verzeichnis /home/asterisk/sounds/
Ganz besonders aber im Falle des "[voicemenue]",da hier mehrere Ansagen zum Teil gemacht werden muessen,damit der Anrufer weiß,was ueberhaupt los ist und was er machen muss.
Das "[voicemenue]" dient dazu,einen Anrufer an mehrere Anschluesse zu vermitteln,wobei er dann entscheidet,welchen Anschluss er erreichen moechte!

Nun kommen wir zum "[infophone]",welches eingerichtet wurde,um z.B. wichtige Mitteilungen fuer Anrufer zu hinterlassen,damit diese informiert sind.
Zur "[mailbox]" und zum "[echotest]" braucht man wohl nicht viel zu sagen,die sprechen fuer sich.
Der Context "[lokal]" regelt alles intern,hier wird definiert,welche Nebenstellen untereinander telefonieren koennen und wie!
Da haben wir als Erstes schon ein Beispiel fuer das Versenden einer SMS mittels SMS-Gateway,so daß der Angerufene weiss,wer ihn erreichen wollte.
Desweiteren kommt nun der Context "[besuch]",welcher dafuer verantwortlich ist,dass wir auch an bestimmten Tagen zu einer fest vorgegeben Zeit woanders erreicht werden koennen,diese Angaben sind im eigenen Context xxx und yyy definiert.


Unser Context "[verwandte]" ist mit einer sogenannten Vanity-Wahl versehen,hier kann man wichtige Leute direkt anwaehlen durch Wahl ihres Namens z.B.
Auf der Telefontastatur stehen auch fuer jede Zahl ein paar Buchstaben,will man nun Petra erreichen,muß man 73872 waehlen.


Jetzt kommen wir schon zu einem verhaeltnismaessig wichtigen Context "[thomas-eltern]",denn da geht es um einen Callback.
Callback ist nichts anderes wie Rueckruf auf dem Handy,um dann kostenguenstig von unterwegs telefonieren zu koennen.
Man ruft eine Ortsnetznummer an,erhaelt ein Besetzt,registriert sich damit am Server,dieser ruft nun das Handy zurueck,gibt ein Freizeichen und der Anrufer kann nun von unterwegs ueber das Internet telefonieren.
Dieser Context definiert,was der Anrufer darf und was er erreichen kann.
Auf die kleineren Contexte wie "[dtmf]" z.B. gehen wir weiter nicht ein,da sie sich selbst erklaeren.
Aber der Context "[02-09]" ist wieder wichtig,hier wird so gearbeitet,dass wenn ein Channel belegt ist,gleich der naechste einsetzt,falls mehrere Leute gleichzeitig telefonieren wollen und der verwendete Anbieter nicht genuegend Lines zur Verfuegung stellt.
Er ist zustaendig fuer Festnetzgespraeche,wobei die Eingabe egal ist,ob nun mit 0... oder mit 49... u.s.w.
Die Contexte "[ausland] und [frankreich]" sind wieder fuer jeden verstaendlich!
Der "[01805]" unterteilt sich in mehrere 0180-Nummern,die man erreichen kann und wofuer man evtl.verschiedene Anbieter benoetigt.


Der naechste wichtige Context heisst bei uns "[01567]",er ist besonders zu betrachten,da er sich unterteilt in der Zeit und den Anbietern.
Um nicht nur einen Anbieter zu belasten und es zu verschiedenen Zeiten ueber unterschiedliche Provider preiswerter ist,Handys anzurufen,haben wir hier eine zeitliche Abfolge der Zustaendigkeiten verschiedener Provider.
Hinzu kommt auch noch die Aufteilung der Eingabe,ob nun mit 0... oder 49... z.B.
Der Context "[dusnet_out]" ist extra für die interne Telefonie unter Dus.net-Kunden angelegt,so dass man am Telefon nur noch die SIP-ID eingeben muß,um mit einem anderen Dus.net-Kunden verbunden zu werden.


Unter dem Context "[anbieter]" verteilt man seine verschiedenen Provider,die man dann explizit mit einer bestimmten Vorwahl nutzen kann.
[anbieter_extra] nutzt man,wenn man jemanden auf dem Server mit drauf hat und dieser auch kostenlose Festnetzgespraeche fuehren kann.
Der Context "[directkonf]" spiegelt eine Anwendung im Konferenzsystem wieder,mit deren Hilfe man im Zusammenspiel mit "[meetme-dialout]" und "[reinholen]" Leute selbst in eine Konferenz reinholen kann und darin auch noch weitere Teilnehmer zuholen koennte.
Man waehlt hier die 666,um eine Konferenz einzuleiten,tippt dann die Rufnummer des gewuenschten Teilnehmers ein und drueckt das Sternchen.
Sollen jetzt noch weitere Teilnehmer hinzu,drueckt man die Raute,waehlt die naechste Rufnummer und wieder das Sternchen.
Man kann die gesamte Konferenz ueber das Telefon leiten mit Kicken und Muten u.s.w.,das sieht man spaeter im Context "[reinholen]".


[queues-manip] ist wieder wichtig fuer die Warteschlange bei der Radiosender-Loesung,womit wir schon beim Context "[warteschlange]" sind.
Da geht es darum,dass ein Zuhoerer anruft und mit dem Moderator sprechen moechte,im gleichen Moment ruft der Naechste an,dieser kann hinzugeschaltet werden (wir erinnern uns - 3 Leute in der Konferenz [globals])
Ruft dann noch jemand an,gelangt er in die Warteschlange und hoert Musik,bis wieder ein Platz frei geworden ist.
Der Context "[webcall]" dient dem Aufbau von Webcalls,so dass man ueber eine Webseite Calls ausloesen kann.
Die Contexte "[dialout_test] und [dialout_neu]" umfassen wieder den Bereich Callback,dazu muß z.B. ein callfile "detlef" in "cd call" gepackt werden und im Context "[ankommend] dann definiert werden (schon erwaehnt).
[fluse] bestimmt den Vorgang,wo es hingeht,um den Callback durchzufuehren.
Das Pendant dazu ist der Callthrough,der sich bei einer mobilen Festnetzflat anbietet,weil einfach nur eine Festnetznummer angerufen wird und man dann weiterwaehlen kann.
Dazu benoetigt man den Context "[fluse-dialout] und [fluse-callthrough]",die miteinander diesen Vorgang einleiten,dazu aber noch spaeter mehr!


Jetzt gelangen wir zu den eingehenden Gespraechen,also zum Context "[ankommend]",der eingeleitet wird mit der Anwendung Warteschlange fuer den Radiosender.
Dann der erste callback mit der Version des callfiles (detlef),der aber etwas besser gemacht werden kann ueber sogenannte "agi-scripte".
Dieses sehen wir nun darunter mit EAGI,wo jetzt unser Context "[thomas-eltern]"wieder eine Rolle spielt,wie schon erwaehnt,da er bestimmt,was geht und was nicht!
Das agi-script muss genauso aussehen,wie es dargestellt ist.
Gleiches gilt dann fuer den callthrough,auch hier treffen wir wieder auf einen bekannten Context "[fluse-dialout]".
Zu den Weiterleitungen muss nicht viel gesagt werden,diese sehen wir in den eigenen Contexten xxx und yyy wieder,da sie dort genehmigt sind.
Dann gibt es die Moeglichkeit,Anrufe sofort automatisch mitschneiden zu koennen,was wir im Verzeichnis /home/asterisk/sounds wiederfinden werden.
Definiert ist sowas in der "features.conf",genauso wie Transfers und Callparking z.B.
Danach sehen wir,wie wir unsere Rufnummern bei den jeweiligen Providern auf den zugeordneten Nebenstellen erreichbar machen koennen.
Und nun kommen endlich die wichtigsten Contexte "[default] / [yyy] und [xxx]",denn diese bestimmen,was jeder Nutzer kann und darf!
Dabei faellt auf,dass jeder Nutzer auch den "[default]" hat,da in ihm die allgemeinen Nutzungsrechte definiert sind.


Noch ein Hinweis fuer Dus.net-Kunden,die mit IAX2 arbeiten wollen,da gibt es eine kleine Besonderheit,die wir nicht vergessen moechten zu erwaehnen:
IAX-Konf für Dus.net

einmal der Eintrag für den besagten „Username:s“ der bei Anrufeingang übermittelt wird.
(Rausbekommen durch „iax set debug“)
Allerdings wird jetzt nicht mehr mit 4 Peereinträgen gearbeitet,denn ab dem 12.05.09 gilt für IAX2 nur noch "iax.dus.net" als Registrar!!!
IAX-Konf für Dus.net

einmal der Eintrag für den besagten „Username:s“ der bei Anrufeingang übermittelt wird.

(Rausbekommen durch „iax set debug“)


iax.conf:

[general]
;bindport=4569 ; bindport and bindaddr may be specified
;bindaddr=192.168.0.1 ; more than once to bind to multiple
;bindaddr=217.172.180.108
bindaddr=62.75.223.248:4569
disallow=all
allow=ulaw
allow=alaw
jitterbuffer=no
delayreject=yes
language=de
bandwidth=high
forcejitterbuffer=no
autokill=yes


register=> 000387....:pass@iax.dus.net

[s]
host=iax.dus.net
username=s
secret=semcelud
context=dusnet1
type=friend
disallow=all
allow=alaw
allow=gsm

[000387....]
type=user
username=000387....
secret=semcelud
host=iax.dus.net
context=dusnet1

[trunk1]
type=peer
username=000387....
secret=semcelud
host=iax.dus.net
context=iaxkunde1


Extensions.conf:

[dus.net_out]

exten => _X.,1,Dial(IAX2/trunk1,60,rtT)
exten => _X.,2,Congestion
exten => _X.,102,Busy
exten => _X.,3,Hangup
exten => t,1,Playback(skinny)
exten => t,2,Hangup


[ankommend]

[dusnet1]
exten => s,1,Wait(1)
exten => s,n,Dial(SIP/302,60,rtT)
exten => s,n,Hangup()

Contexte:

[opilein]
.
.
.
include => dus-iax

[iaxkunde1]
exten => s,1,Wait(1)
exten => s,n,Dial(SIP/301,60,r)
exten => s,n,Hangup()

Kommen wir nochmal zu sip zurück.
Man kann auch noch einen Schritt weitergehen und trägt den Dus.net-Account 4 mal auch in der Registerzeile in der sip.conf ein
mit allen 4 Servern,dann ist das Problem einer rotierenden Erreichbarkeit auch beseitigt.
Das gilt sowohl für SIP,als auch für IAX2 !
Jedoch reicht die Registrierung im normalfall mit "voip.dus.net" völlig aus und sollte so auch erstmal durchgeführt werden.

Fuer Liebhaber des besonderen Callbacks hier noch ein Beispiel,wie man Kunden z.B.einen kostenlosen Anruf zukommen lassen kann.
Das bedeutet,der Kunde ruft an,loest den Callback aus,wird vom System zurueckgerufen und automatisch mit Dir verbunden.
;;opionly am Beispiel Dus.net
exten => 08654684xxxxx,1,Ringing
exten => 08654684xxxxx,n,Wait(1)
exten => 08654684xxxxx,n,EAGI(opionly.sh,${CALLERID(num):})
exten => 08654684xxxxx,n,Busy

;so sieht das script aus: var/lib/asterisk/agi-bin
#!/bin/sh
##tommy callingscript
if [ "$1" = "" ]; then
exit 0
fi
cat </var/spool/asterisk/outgoing/$1
#Channel: Local/${1}@tommy-world-delay
Channel: Local/${1}@reinholen-delay
Context: default ;da hier der Context "lokal" integriert ist
Extension: 302
MaxRetries: 8
RetryTime: 1

Callerid: ${1}
#Callerid: Anonymous
SetVar: LANGUAGE=de

EOF


Ein callback mit Ansage,was zutun ist,gibt es auch zu realisieren,hat aber den Nachteil,dass er schlecht aus dem Telefonbuch zu realisieren ist.
exten => 0302023xxxx/01768006yyyy,1,Answer
exten => 0302023xxxx/01768006yyyy,n,Set(TIMEOUT(response)=60)
exten => 0302023xxxx/01768006yyyy,n,Goto(fluse-dialout,s,1)

[fluse-dialout]
exten => s,1,Set(CHANNEL(language)=de) ; Set language to french
exten => s,n,Noop
exten => s,n,Set(NR=)
exten => s,n,Background(privacy-prompt&vm-then-pound&vm-star-cancel)
exten => s,n,Set(TIMEOUT(response)=100)
exten => s,n,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,n,Goto(s,5)
exten => *,1,Goto(s,3)

exten => #,1,Dial(Local/${NR}@fluse-callthrough,90,Hg)
exten => #,n,GotoIf($[${DIALSTATUS} = NOANSWER]?4)
exten => #,n,GotoIf($[${DIALSTATUS} = CONGESTION]?4:5)

exten => #,n,Playback(vm-nobodyavail)
exten => #,n,Goto(s,1)
exten => #,102,Playback(tt-allbusy)
exten => #,103,Goto(s,1)

exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup

Nun noch ein callback für auslaendische Simkarten.
Also z.B,wenn man im Ausland ein einheimisches Netz benutzt.

In der extensions.conf unterhalb der General:

#include worldflat.inc

;;;;mark bulgarien
[callback-zwei]
exten => s,1,Goto(worldflat-dialout,s,1)


;dieses script befindet sich unter var/lib/asterisk/agi.bin

;---------------script Anfang-----------------------------
[worldflat]
include=lokal
include=dusnet_out

;;wasserdicht
exten => i,1,NoOp(Undefinierte Nummer ${INVALID_EXTEN} wurde gewaehlt.)
exten => i,n,Answer()
exten => i,n,Playback(invalid)
exten => i,n,Hangup()

;;dialtrunk

exten => _01[5-7].,1,Dial(SIP/${EXTEN:}@PURtel,60,Hg)
exten => _01[5-7].,n,Goto(worldflat-dialout,s,1)

;;national
exten => _0N.,1,Dial(SIP/${EXTEN}@1&1-Account,60,Hg)
exten => _0N.,n,Goto(worldflat-dialout,s,1)


;;blacklist
exten => _0900.,1,Goto(i,1)
exten => _032.,1,Goto(i,1)

[worldflat-dialout]

exten => s,1,Set(CHANNEL(language)=de) ; Set language to french
exten => s,n,Noop
exten => s,n,Set(NR=)
exten => s,n,Background(privacy-prompt&vm-then-pound&vm-star-cancel)
exten => s,n,Set(TIMEOUT(response)=100)
exten => s,n,WaitExten

exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,n,Goto(s,5)
exten => *,1,Goto(s,3)

exten => #,1,Dial(Local/${NR}@worldflat,99,Hg)
exten => #,n,GotoIf($[${DIALSTATUS} = NOANSWER]?4)
exten => #,n,GotoIf($[${DIALSTATUS} = CONGESTION]?4:5)
exten => #,n,Playback(vm-nobodyavail)
exten => #,n,Goto(s,1)
exten => #,102,Playback(tt-allbusy)
exten => #,103,Goto(s,1)

exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup
;------------------script Ende---------------------

[ankommend] ;in der extensions.conf

;;;mark bulgarien
exten => sipgate/00359885xxxxxx,1,EAGI(callback-zwei.sh,00359885xxxxxx)
exten => sipgate/00359885xxxxxx,n,Ringing
exten => sipgate/00359885xxxxxx,n,Wait(1)
exten => sipgate/00359885xxxxxx,n,Busy

Alles weitere ist ja erklaert und sollte auch so angewendet werden.
Wie nun jeder seine Contexte benennt,bleibt jedem selbst ueberlassen,aber wir hoffen,das Prinzip ist klar geworden.
Gute Dienste,mit denen man wirklich einwandfrei ueber einen Asterisk arbeiten kann (Stichwort auch DDI ) sind nun mal
Dus.net GmbH
und
PURtel GmbH
Aber auch "Bellshare und Simply-Connect" waren da noch zu nennen.

Speziell fuer Dus.net-Kunden:
;sip.conf:
register => SIP-ID1:Passwort@voip.dus.net/Rufnummer1
register => SIP-ID2:Passwort@voip.dus.net/Rufnummer2
register => SIP-ID3:Passwort@voip.dus.net/Rufnummer3

[Rufnummer1]
type=peer
username=SIP-ID1
host=voip.dus.net
fromdomain=voip.dus.net
fromuser=SIP-ID1
secret=Passwort
relaxdtmf=yes

[Rufnummer2]
type=peer
username=SIP-ID2
host=voip.dus.net
fromdomain=voip.dus.net
fromuser=SIP-ID2
secret=Passwort
relaxdtmf=yes

[Rufnummer3]
type=peer
username=SIP-ID3
host=voip.dus.net
fromdomain=voip.dus.net
fromuser=SIP-ID3
secret=Passwort
relaxdtmf=yes

[dus.net_in]
type=peer
fromdomain=voip.dus.net
host=voip.dus.net
context=ankommend

[dus.net_in_1]
type=peer
fromdomain=talos.dus.net
host=talos.dus.net
context=ankommend

[dus.net_in_2]
type=peer
fromdomain=zelos.dus.net
host=zelos.dus.net
context=ankommend

[dus.net_in_3]
type=peer
fromdomain=helios.dus.net
host=helios.dus.net
context=ankommend

[dus.net_in_4]
type=peer
fromdomain=eos.dus.net
host=eos.dus.net
context=ankommend

[dus.net_in_5]
type=peer
fromdomain=ares.dus.net
host=ares.dus.net
context=ankommend

;extensions.conf
;ausgehend:
[02-09]
exten => _0NXX.,1,Set(GROUP()=Rufnummer1)
exten => _0NXX.,2,GotoIf($["${GROUP_COUNT(Rufnummer1)}">"1"]?4:3)
exten => _0NXX.,3,Dial(SIP/0049${EXTEN:1}@Rufnummer1,)

exten => _0NXX.,4,Set(GROUP()=Rufnummer2)
exten => _0NXX.,5,GotoIf($["${GROUP_COUNT(Rufnummer2)}">"1"]?7:6)
exten => _0NXX.,6,Dial(SIP/0049${EXTEN:1}@Rufnummer2,)

exten => _0NXX.,7,Set(GROUP()=Rufnummer3)
exten => _0NXX.,8,GotoIf($["${GROUP_COUNT(Rufnummer3)}">"1"]?10:9)
exten => _0NXX.,9,Dial(SIP/0049${EXTEN:1}@Rufnummer3,)
exten => _0NXX.,10,Answer
exten => _0NXX.,11,wait(1)
exten => _0NXX.,12,Playback(bad)
exten => _0NXX.,13,hangup

[national]
exten => _49NX.,1,Set(GROUP()=Rufnummer1)
exten => _49NX.,2,GotoIf($["${GROUP_COUNT(Rufnummer1)}">"1"]?4:3)
exten => _49NX.,3,Dial(SIP/0049${EXTEN:2}@Rufnummer1,)

exten => _49NX.,4,Set(GROUP()=Rufnummer2)
exten => _49NX.,5,GotoIf($["${GROUP_COUNT(Rufnummer2)}">"1"]?7:6)
exten => _49NX.,6,Dial(SIP/0049${EXTEN:2}@Rufnummer2,)

exten => _49NX.,7,Set(GROUP()=Rufnummer3)
exten => _49NX.,8,GotoIf($["${GROUP_COUNT(Rufnummer3)}">"1"]?10:9)
exten => _49NX.,9,Dial(SIP/0049${EXTEN:2}@Rufnummer3,)
exten => _49NX.,10,Answer
exten => _49NX.,11,wait(1)
exten => _49NX.,12,Playback(bad)
exten => _49NX.,13,hangup

exten => _+49NX.,1,Set(GROUP()=Rufnummer1)
exten => _+49NX.,2,GotoIf($["${GROUP_COUNT(Rufnummer1)}">"1"]?4:3)
exten => _+49NX.,3,Dial(SIP/0049${EXTEN:3}@Rufnummer1,)

exten => _+49NX.,4,Set(GROUP()=Rufnummer2)
exten => _+49NX.,5,GotoIf($["${GROUP_COUNT(Rufnummer2)}">"1"]?7:6)
exten => _+49NX.,6,Dial(SIP/0049${EXTEN:3}@Rufnummer2,)

exten => _+49NX.,7,Set(GROUP()=Rufnummer3)
exten => _+49NX.,8,GotoIf($["${GROUP_COUNT(Rufnummer3)}">"1"]?10:9)
exten => _+49NX.,9,Dial(SIP/0049${EXTEN:3}@Rufnummer3,)
exten => _+49NX.,10,Answer
exten => _+49NX.,11,wait(1)
exten => _+49NX.,12,Playback(bad)
exten => _+49NX.,13,hangup

exten => _0049NX.,1,Set(GROUP()=Rufnummer1)
exten => _0049NX.,2,GotoIf($["${GROUP_COUNT(Rufnummer1)}">"1"]?4:3)
exten => _0049NX.,3,Dial(SIP/${EXTEN:}@Rufnummer1,)

exten => _0049NX.,4,Set(GROUP()=Rufnummer2)
exten => _0049NX.,5,GotoIf($["${GROUP_COUNT(Rufnummer2)}">"1"]?7:6)
exten => _0049NX.,6,Dial(SIP/${EXTEN:}@Rufnummer2,)

exten => _0049NX.,7,Set(GROUP()=Rufnummer3)
exten => _0049NX.,8,GotoIf($["${GROUP_COUNT(Rufnummer3)}">"1"]?10:9)
exten => _0049NX.,9,Dial(SIP/${EXTEN:}@Rufnummer3,)
exten => _0049NX.,10,Answer
exten => _0049NX.,11,wait(1)
exten => _0049NX.,12,Playback(bad)
exten => _0049NX.,13,hangup

Gleiches macht man für Mobilfunk und Sonderrufnummern.
Die Contexte werden natürlich nacher in den eigenen includiert.

[ankommend]
;SIP-ID1
exten => Rufnummer1,1,Dial(SIP/Nebenstelle1,30,rtT)
exten => Rufnummer1,2,VoiceMail(Nebenstelle1,u)

;SIP-ID2
exten => Rufnummer2,1,Dial(SIP/Nebenstelle2,30,rtT)
exten => Rufnummer2,2,VoiceMail(Nebenstelle2,u)

;SIP-ID3
exten => Rufnummer3,1,Dial(SIP/Nebenstelle3,30,rtT)
exten => Rufnummer3,2,VoiceMail(Nebenstelle3,u)

[eigener Context]
include => default
include => echotest
include => mailbox
include => mailbox_own
include => 02-09
include => national
u.s.w.

Auch wieder eine Alternative für Dus.net-Kunden,bei der man sich die Geschichte mit dem Eintrag der 4 Peers (vier Server) dann sparen kann und die Erreichbarkeit immer gegeben ist.

Wer damit nicht zurecht kommt,kontaktiert einfach unseren Tommi (Blindi) oder mich,wie schon auf der ersten Seite erwähnt!

sip.conf

[general]
context=ankommend
relaxdtmf=yes
allowoverlap=yes
bindport=5060
bindaddr=0.0.0.0
externip = 217.172.xxx.xxx
srvlookup=yes
insecure=port,invite
nat=yes
language=de
disallow=all
allow=alaw
dtmfmode=auto
canreinvite=no

#include sip.inc (register)

#include sip.cus/*.inc (Userverwaltung)

Extensions.conf:

[general]
static=yes
writeprotect=no
autofallthrough=no
clearglobalvars=no
priorityjumping=yes

;userscontext=default

[globals] ANSWERTRUNK1=13
ANSWERTRUNK2=16
ANSWERTRUNK3=19
ANSWERTRUNK4=20

MONITOR_EXEC=/usr/local/bin/2alaw2alaw

[default]

;;context der vor Systemfehlern geschützt werden soll
include=ankommend

[ankommend]

#include demo.inc
;#include blacklist.inc
#include extensions_cus.inc
#include fromvmb.inc
#include contexte.inc
#include callers-confirm.inc
#include callers-fw.inc
#include callback_only.inc
#include gruss.inc
#include callback_fwd.inc
#include genion.inc
#include callerid-spoof.inc
#include peterzahlt.inc
#include linelimit.inc
#include mailbox-nicole-auth.inc
#include weiterleitung_only.inc
#include gitarre.inc
#include adminmenu.inc
#include callback-setup.inc
#include calltrough-setup.inc
#include callback_any.inc
#include billing.inc
#include adv/*.inc
#include voicespam.inc
#include umpluss.inc
#include linebretter.inc
#include voiptalk.inc
#include ext.cus/*.inc
#include cleanup-bretter.inc
#include datingboxen.inc
#include freunde.inc
#include basti1.inc
#include callback_callerid.inc

Fuer Leute,die fallweise Ihre Clip aendern moechten,kommt folgende Loesung in Frage:
Man sollte P-Preferred -Identity für die Nummer nutzen und Name für Displaynamen.

Siehe SIPAddHeader()
sip:49xxxxxxxx@dus.net

Tipp:

Nimmt man jetzt in der sip.conf die Zeile fromuser=00038xxx raus,setzt dafür
usereqphone=yes und dann in der extensions.conf CALLERID(num)=0211xxxxx ,kommt der
Displayname bei SIP-Gesprächen durch und die Rufnummer bei PSTN-Gesprächen. Es funktioniert übrigens sowohl mit 0211xxx als auch mit 49211xxx, aber nicht mit vorangestelltem "+".
Der fromuser-Parameter hatte wohl zuvor immer verhindert, dass CALLERID(num) eine Auswirkung hatte,warum es nur mit CALLERID(name) funktionierte.

Es könnte sich in der Zwischenzeit etwas verändert haben, weil wir seit 2 Jahren bei Dus.net keinen Einblick mehr haben, jedoch dürfte die Basis noch stimmen und die Server haben ihre Bezeichnung behalten.

Blindi

Eure VOIP-Enthusiasten
Tom und Mark


gratis Counter