.titleBar { margin-bottom: 5px!important; }

Skript für telefonieren und Voicemail? Hilfe

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von Winterwolf, 21 Okt. 2004.

  1. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo ich bin ganz neu in diesem Forum und habe da ein kleines Problem mit dem schreiben eines Skripts und ich denke ihr könnt mir da prima weiterhelfen.

    Das Skript sollte so aussehen das es folgendes beinhaltet bzw. kann:

    1. Wenn jemand von außen Anruft soll erst eine Willkommensmeldung zu hören sein.
    2. Darauf soll er die Nummer (Durchwählen) die von außen gewählt worden ist.
    3. Wenn dort keiner innerhalb 30 Sekunden keiner meldet, soll der User einen "Willkommen auf der Voicemail von X" Nachricht hören und diese in seinem Voicemailaccount (oder Box oder wie auch immer das am besten Bezeichnet wird) ablegen.
    4. Soll die Verbindung getrennt werden.

    Sobald aber der Angerufene (wiederkommt) und sein Telefon abhebt soll er ein Auswahl Menu erhalten, nach dem Motto "Sie haben Post".
    Und zwar mit den folgenden Möglichkeiten.

    1. Voicemail anhören
    2. Voicemail löschen
    3. Voicemail später anhören (falls nicht zu realisieren , dann später anhören wenn er eine bestimmte Nummer wählt)
    4. Menu schließen (Und danach weiter telefonieren können)

    Des weitern soll es Gruppen geben die nach dem gleichen Prinzip wie oben genannt funktionieren sollen. Auch mit Anrufen, Voicemail, Voicemail Menu.

    Und Transfer und parken soll auch möglich sein (wenn der Anrufer geparkt wird soll eine Melodie erklingen evtl. auch beim parken oder halten vom Anruf).

    Telefonie soll glaub ich über SIP laufen... falls das wichtig sein sollte ;)

    Ich hoffe mir kann da einer helfen. Ich beschäftige mich erst seit 1-2 Tagen mit der Asterix und VOIP.

    Achja und wenn ihr Tips haben solltet in Punkto Forumpost's, immer her damit :lol:
     
  2. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Hallo und Willkommen im Forum.

    Für das was Du machen möchtest braucht es eigentlich keine Skripte, das kann der Rufnummernplan (extensions.conf) schon so.

    mit
    exten => rufnummer,1,Playback(Datei) kannst Du was abspielen

    das erledigt
    exten => rufnummer,2,Dial(wohindannauchimmer)

    Das macht
    exten => rufnummer,2,Dial(ziel,30)
    exten => rufnummer,3,Voicemail(umailboxnr) (das u davor steht für "unavailable" d.h. spielt eine Nachricht "Der Anrufer xy...." ab)

    exten => rufnummer,4,Hangup

    Da Du eh SIP-Endgeräte verwenden willst kannst Du Dir das eigentlich sparen da eigentlich alle Endgeräte irgendwo eine Lampe/Symbol im Display haben das bei eingetroffenen Voicemails aufleuchtet. Ausserdem kann Asterisk auch noch parallel die Voicemails als Datei per e-mail vesenden.

    Am besten schaust Du mal in die FAQ und suchst ein wenig durchs Forum, denn für vieles existiert schon eine (oder sogar mehrere) Lösungen :)

    Gruss,
    rajo
     
  3. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Vielen lieben Dank, also so schnell und Kompetent ist mir noch in keinem Forum geholfen worden ^^.

    Eine Frage hast du jetzt in mir geweckt....

    Wenn ich =

    exten => rufnummer,2,Dial(ziel,30)
    exten => rufnummer,3,Voicemail(umailboxnr) (das u davor steht für "unavailable" d.h. spielt eine Nachricht "Der Anrufer xy...." ab)

    Kann ich das Ziel irgendwie dynamisch einbinden? Ansonsten muss ich ja für jeden User wohl die exten anlegen. Und das ist ein ziemlicher Administrations aufwand.

    Ich dachte da so an ein Macro oder sowas in der art.
    Das ich Quasi ein Bereich in der extensions.conf habe der sich um die User verwaltung kümmert.

    z.B.

    [var]
    GRUPPE1=SIP/gruppe1 ; Erstellen einer globalen variable namens ${GRUPPE1}
    USER1=SIP/user1 ; Erstellen einer globalen variable namens ${USER1}
    USER2=SIP/user2 ; Erstellen einer globalen variable namens ${USER2}

    [intern]
    exten => 1,1,Dial(SIP/user1)
    exten => 2,1,Dial(SIP/user2)
    exten => 3,1,Dial(SIP/gruppe1)

    Also was auch noch schön wäre... wenn er sich die Telefonnummer merken würde und die dann falls der Anruf fehl schlägt diese automatisch in exten => rufnummer,2,Dial(ziel,30) als Ziel einfügen könnte.
     
  4. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Klar :)

    schau Dir mal die extensions.conf an und ggf. das ein oder andere Beispiel hier im Forum oder auf voip-info.org

    Prinzipiell ist es so, dass man zum einen nicht jeder Rufnummer explitzit mit exten => 1234,1,.... angeben muss, sondern reguläre Ausdrücke der Form exten => _123.,1 (irgendwas was mit 123 beginnt) oder exten => _.,1, etc. verwenden. Weiterhin merkt sich Asterisk die aktuell gewählte Rufnummer in der Variable ${EXTEN}

    Genau sowas kann man basteln: Du machst ein Makro das alle Rufnummern akzeptiert und mit denen eben was generisches abarbeitet. Dieses Makro kannst Du dann von allen beliebigen Stellen des Rufnummernplanes aufrufen.
     
  5. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Also sollte das ungefähr so aussehn?

    include => var
    include => user

    [var]

    exten => _,1,Playback(welcome)
    exten => _,2,Dial(${EXTEN},30)
    exten => _,3,Voicemail(u1${EXTEN})
    exten => _,4,Hangup

    [user]

    exten => 111,1,Dial(SIP/user1,,tT)
    exten => 112,1,Dial(SIP/user2,,tT)
     
  6. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    naaa, wenn Du mit Makros arbeiten willst sieht das eher so aus:


    Code:
    [macro-var];
    exten => s,1,Playback(welcome) 
    exten => s,2,Dial(${EXTEN},30) 
    exten => s,3,Voicemail(u1${EXTEN}) 
    exten => s,4,Hangup
    
    ; dann kommt die eigentliche extensions.conf
    
    [default]
    exten => 111,1,Macro(stdexten,SIP/user1,,tT)
    exten => 112,1,Macro(stdexten,SIP/user2,,tT)
    
    

    abgesehen davon bei Pattern nich exten => _,1 sonder exten => _.,1

    _ leitet eine Regexp ein und der . steht für "alles" (quasi *)
     
  7. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Irgendwas mache ich wohl falsch, weil wenn ich das so eintrage... dann schreibt mir mein SJphone = 404 Not Found :(

    Aber mit so Sachen hab ich eigentlich immer pech :(
     
  8. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    joo... mein fehler... copy&paste ;)

    probiers mal hiermit:

    Code:
    [macro-var]; 
    exten => s,1,Playback(welcome) 
    exten => s,2,Dial(${EXTEN},30) 
    exten => s,3,Voicemail(u1${EXTEN}) 
    exten => s,4,Hangup 
    
    ; dann kommt die eigentliche extensions.conf 
    
    [default] 
    exten => 111,1,Macro(var,SIP/user1,,tT) 
    exten => 112,1,Macro(var,SIP/user2,,tT)
    
     
  9. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm also irgendwie ist bei mir hier wo der Wurm drinne....
    Ich kann in Asterisk auch nicht den Dial Befehl in der Asterisk Console benutzen und die Telefonnummern kann ich auch nicht anrufen.
    Ich bekomme dann den Fehler 403 Forbidden :cry:

    Ich poste einfach mal meine extensions.conf *man hat das ja mal das man sowas schnell übersieht*

    Code:
    [general]
    static=yes
    writeprotect=no
    
    [globals]
    CONSOLE=Console/dsp				; Console interface for demo
    ;CONSOLE=Zap/1
    ;CONSOLE=Phone/phone0
    IAXINFO=guest					; IAXtel username/password
    ;IAXINFO=myuser:mypass
    TRUNK=Zap/g2					; Trunk interface
    TRUNKMSD=1					; MSD digits to strip (usually 1 or 0)
    ;TRUNK=IAX2/user:pass@provider
    
    ;[context]
    ;exten => someexten,priority,application(arg1,arg2,...)
    ;exten => someexten,priority,application,arg1|arg2...
    ;include => daytime|9:00-17:00|mon-fri|*|*
    
    [iaxtel700]
    exten => _91700XXXXXXX,1,Dial(IAX2/${IAXINFO}@iaxtel.com/${EXTEN:1}@iaxtel)
    [iaxprovider]
    ;switch => IAX2/user:[key]@myserver/mycontext
    
    [trunkint]
    exten => _9011.,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _9011.,2,Congestion
    
    [trunkld]
    exten => _91NXXNXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91NXXNXXXXXX,2,Congestion
    
    [trunklocal]
    exten => _9NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _9NXXXXXX,2,Congestion
    
    [trunktollfree]
    exten => _91800NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91800NXXXXXX,2,Congestion
    exten => _91888NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91888NXXXXXX,2,Congestion
    exten => _91877NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91877NXXXXXX,2,Congestion
    exten => _91866NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91866NXXXXXX,2,Congestion
    
    [international]
    ignorepat => 9
    include => longdistance
    include => trunkint
    
    [longdistance]
    ignorepat => 9
    include => local
    include => trunkld
    
    [local]
    ignorepat => 9
    include => default
    include => parkedcalls
    include => trunklocal
    include => iaxtel700
    include => trunktollfree
    include => iaxprovider
    include => user
    
    [macro-stdexten];
    exten => s,1,Dial(${ARG2},20)					; Ring the interface, 20 seconds maximum
    exten => s,2,Goto(s-${DIALSTATUS},1)				; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
    
    exten => s-NOANSWER,1,Voicemail(u${ARG1})		; If unavailable, send to voicemail w/ unavail announce
    exten => s-NOANSWER,2,Goto(default,s,1)			; If they press #, return to start
    
    exten => s-BUSY,1,Voicemail(b${ARG1})			; If busy, send to voicemail w/ busy announce
    exten => s-BUSY,2,Goto(default,s,1)				; If they press #, return to start
    
    exten => s-.,1,Goto(s-NOANSWER,1)				; Treat anything else as no answer
    
    exten => a,1,VoicemailMain(${ARG1})				; If they press *, send the user into VoicemailMain
    
    [demo]
    ;
    ; We start with what to do when a call first comes in.
    ;
    exten => s,1,Wait,1			; Wait a second, just for fun
    exten => s,2,Answer			; Answer the line
    exten => s,3,DigitTimeout,5		; Set Digit Timeout to 5 seconds
    exten => s,4,ResponseTimeout,10		; Set Response Timeout to 10 seconds
    exten => s,5,BackGround(demo-congrats)	; Play a congratulatory message
    exten => s,6,BackGround(demo-instruct)	; Play some instructions
    
    exten => 2,1,BackGround(demo-moreinfo)	; Give some more information.
    exten => 2,2,Goto(s,6)
    
    exten => 3,1,SetLanguage(fr)		; Set language to french
    exten => 3,2,Goto(s,5)			; Start with the congratulations
    
    exten => 1000,1,Goto(default,s,1)
    exten => 1234,1,Playback(transfer,skip)		; "Please hold while..." 
    					; (but skip if channel is not up)
    exten => 1234,2,Macro(stdexten,1234,${CONSOLE})
    
    exten => 1235,1,Voicemail(u1234)		; Right to voicemail
    
    exten => 1236,1,Dial(Console/dsp)		; Ring forever
    exten => 1236,2,Voicemail(u1234)		; Unless busy
    
    exten => #,1,Playback(demo-thanks)		; "Thanks for trying the demo"
    exten => #,2,Hangup			; Hang them up.
    
    exten => t,1,Goto(#,1)			; If they take too long, give up
    exten => i,1,Playback(invalid)		; "That's not valid, try again"
    
    exten => 500,1,Playback(demo-abouttotry); Let them know what's going on
    exten => 500,2,Dial(IAX2/guest@misery.digium.com/s@default)	; Call the Asterisk demo
    exten => 500,3,Playback(demo-nogo)	; Couldn't connect to the demo site
    exten => 500,4,Goto(s,6)		; Return to the start over message.
    
    exten => 600,1,Playback(demo-echotest)	; Let them know what's going on
    exten => 600,2,Echo			; Do the echo test
    exten => 600,3,Playback(demo-echodone)	; Let them know it's over
    exten => 600,4,Goto(s,6)		; Start over
    
    exten => 8500,1,VoicemailMain
    exten => 8500,2,Goto(s,6)
    ;exten => 1265,1,Dial(Phone/phone0,15)
    ;exten => 1265,2,Goto(s,5)
    
    ;[mainmenu]
    ;exten => s,1,Answer
    ;exten => s,2,Background(thanks)		; "Thanks for calling press 1 for sales, 2 for support, ..."
    ;exten => 1,1,Goto(submenu,s,1)
    ;exten => 2,1,Hangup
    include => default
    
    ;[submenu]
    ;exten => s,1,Ringing					; Make them comfortable with 2 seconds of ringback
    ;exten => s,2,Wait,2
    ;exten => s,3,Background(submenuopts)	; "Thanks for calling the sales department.  Press 1 for steve, 2 for..."
    ;exten => 1,1,Goto(default,steve,1)
    ;exten => 2,1,Goto(default,mark,2)
    
    [default]
    include => demo
    ;exten => _41X.,1,Dial(SIP/${EXTEN:2}@sipprovider,,r)
    ;exten => _42X.,1,Dial(SIP/user:passwd@${EXTEN:2}@otherprovider.net,30,rT)
    ;exten => 6245,1,Dial(SIP/Grandstream1,20,rt)	; permit transfer
    ;exten => 6245,1,Dial(SIP/Grandstream1&SIP/Xlite1,20,rtT)
    ;exten => 6361,1,Dial(IAX2/JaneDoe,,rm)		; ring without time limit
    ;exten => 6389,1,Dial(MGCP/aaln/1@192.168.0.14)
    ;exten => 6394,1,Dial(Local/6275/n)		; this will dial ${MARK}
    ;exten => 6275,1,Macro(stdexten,6275,${MARK})	; assuming ${MARK} is something like Zap/2
    ;exten => mark,1,Goto(6275|1)			; alias mark to 6275
    ;exten => 6536,1,Macro(stdexten,6236,${WIL})	; Ditto for wil
    ;exten => wil,1,Goto(6236|1)
    ;exten => 8500,1,VoicemailMain
    ;exten => 8500,2,Hangup
    ;exten => 8600,1,Meetme(1234)
    ;exten = 8700,1,Dial(${MARK}cro-var]; 
    
    ; Advanced include
    ;
    include => macro-var
    include => user
    ;
    ; Advanced exten
    ;
    
    [macro-var];
    ;exten => s,1,Playback(welcome)
    exten => s,1,Dial(${EXTEN},30)
    exten => s,2,Voicemail(u1${EXTEN})
    exten => s,3,Hangup
    
    [user]
    exten => 111,1,Macro(var,SIP/user2,,tT)
    exten => 112,1,Macro(var,SIP/user1,,tT) 
    exten => 113,1,Macro(var,SIP/user3,,tT)
    extem => 114,1,Macro(var,SIP/user4,,tT)
    
    ;exten => 111,1,Dial(SIP/user2,,tT)
    ;exten => 111,2,Congestion
    ;exten => 111,102,Busy
    ;exten => 111,103,Hangup
    
    ;exten => 112,1,Dial(SIP/ninah,,tT)
    ;exten => 112,2,Congestion
    ;exten => 112,102,Busy
    
    ;exten => 113,1,Dial(SIP/user3,,tT)
    ;exten => 113,2,Congestion
    ;exten => 113,102,Busy
    
    ;exten => 114,1,Dial(SIP/user4,,tT)
    ;exten => 114,2,Congestion
    ;exten => 114,102,Busy
    
    ----
    edit rajo: bitte die code-funktion für lange configs benutzen :)
    ----
    edit Winterwolf: Thx ;)

    _________________________
    Auf dem Asterisk Server erhalte ich folgende Meldung =

    Code:
       -- Executing Macro("SIP/user4-acd6", "var|SIP/user2||tT") in new stack
        -- Executing Dial("SIP/user4-acd6", "s|30") in new stack
    Oct 22 11:00:37 WARNING[1112767280]: app_dial.c:694 dial_exec: Dial argument takes format (technology1/[device:]number1&technology2/[device:]number2...|optional timeout)
      == Spawn extension (macro-var, s, 1) exited non-zero on 'SIP/user4-acd6' in macro 'var'
      == Spawn extension (default, 111, 1) exited non-zero on 'SIP/user-acd6
    
    '
     
  10. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Wenn ich das Playback wieder anschalte dann wählt er nur kurz und das wars dann irgendwie... aber wenn ich die demo anwähle dann gehts auch so.

    :(
     
  11. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    mann.... ich sollte wirklich erstmal aufwachen ;)

    [macro-var]
    ;exten => s,1,Playback(welcome)
    exten => s,1,Dial(${ARG1},30)
    exten => s,2,Voicemail(u1${ARG1})
    exten => s,3,Hangup
     
  12. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm ich wähle die Nummer 111 und er tut wieder nur so als würde er verbinden und legt dann irgendwie wieder auf. Ich weiss echt nicht wo der Fehler noch sein könnte. *verzweifel* :lamer: :bluescre:
     
  13. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    naaa... keine Panik! Das kriegen wir schon hin :)

    Poste mal die Ausgabe von Asterisk wenn du 111 anrufst.
     
  14. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Die Macht sei mit dir ;) *bg*

    Also hier ist erstmal der Auszug aus Asterisk =

    Code:
    
       -- Executing Macro("SIP/user4-1f92", "var|SIP/user1||tT") in new stack
        -- Executing Playback("SIP/user4-1f92", "welcome") in new stack
    Oct 25 08:09:54 WARNING[1112767280]: file.c:475 ast_openstream: File welcome does not exist in any format
    Oct 25 08:09:54 WARNING[1112767280]: file.c:779 ast_streamfile: Unable to open welcome (format ULAW): No such file or directory
    Oct 25 08:09:54 WARNING[1112767280]: app_playback.c:83 playback_exec: ast_streamfile failed on SIP/user4-1f92 for welcome
        -- Executing Dial("SIP/user4-1f92", "s|30") in new stack
    Oct 25 08:09:54 WARNING[1112767280]: app_dial.c:694 dial_exec: Dial argument takes format (technology1/[device:]number1&technology2/[device:]number2...|optional timeout)
      == Spawn extension (macro-var, s, 2) exited non-zero on 'SIP/user4-1f92' in macro 'var'
      == Spawn extension (default, 111, 1) exited non-zero on 'SIP/user4-1f92'
    
    
    Das er Welcome nicht findet ist ok, weil die Datei gibts noch nicht ;) allerdings dürfte da auch kein Problem sein. *denke ich mal*

    Weil wenn ich die Playback Regel raus nehme dann schreibt er mich immer noch das Problem ;)

    Code:
       -- Executing Macro("SIP/user4-64ce", "var|SIP/user1||tT") in new stack
    Oct 25 08:15:26 WARNING[1112767280]: app_macro.c:92 macro_exec: Context 'macro-var' for macro 'var' lacks 's' extension, priority 1
    
    =D
     
  15. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    [user]
    exten => 111,1,Macro(var,SIP/user2) statt exten => 111,1,Macro(var,SIP/user2,,tT)

    abgesehen davon: user2 existiert auch in der sip.conf?

    Beim rausnehmen der Playback-Regel solltest Du auch die Priorität von exten => s,2,Dial .... von 2 auf 1 ändern damit Asterisk weiss, dass dies zuerst ausgeführt weden soll, also exten => s,1,Dial...

    HTH
    rajo

    ---
    edit:
    nochn Fehler (thx to betateilchen)

    ersetze
    exten => s,3,Voicemail(u1${ARG1})
    exten => s,3,Voicemail(u${ARG1})

    (die 1 hinter dem u ist völliger quatsch... hab ich beim kopieren übersehen ;) )
     
  16. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hmm scheint immernoch nicht zu funktionieren...

    Ich Poste mal am besten meine sip.conf und extension.conf komplett,
    damit wir diese Fehler ausschliessen können.

    extensions.conf
    Code:
    ;
    ; Static extension configuration file, used by
    ; the pbx_config module. This is where you configure all your 
    ; inbound and outbound calls in Asterisk. 
    ; 
    
    ;
    ; The "General" category is for certain variables.  
    ;
    [general]
    ;
    ; If static is set to no, or omitted, then the pbx_config will rewrite
    ; this file when extensions are modified.  Remember that all comments
    ; made in the file will be lost when that happens. 
    ;
    ; XXX Not yet implemented XXX
    ;
    static=yes
    ;
    ; if static=yes and writeprotect=no, you can save dialplan by
    ; CLI command 'save dialplan' too
    ;
    writeprotect=no
    
    ; You can include other config files, use the #include command (without the ';')
    ; Note that this is different from the "include" command that includes contexts within 
    ; other contexts. The #include command works in all asterisk configuration files.
    ;#include "filename.conf"
    
    ; The "Globals" category contains global variables that can be referenced
    ; in the dialplan with ${VARIABLE} or ${ENV(VARIABLE)} for Environmental variable
    ; ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid
    ;
    [globals]
    CONSOLE=Console/dsp				; Console interface for demo
    ;CONSOLE=Zap/1
    ;CONSOLE=Phone/phone0
    IAXINFO=guest					; IAXtel username/password
    ;IAXINFO=myuser:mypass
    TRUNK=Zap/g2					; Trunk interface
    TRUNKMSD=1					; MSD digits to strip (usually 1 or 0)
    ;TRUNK=IAX2/user:pass@provider
    
    ;
    ; Any category other than "General" and "Globals" represent 
    ; extension contexts, which are collections of extensions.  
    ;
    ; Extension names may be numbers, letters, or combinations
    ; thereof. If an extension name is prefixed by a '_'
    ; character, it is interpreted as a pattern rather than a
    ; literal.  In patterns, some characters have special meanings:
    ;
    ;   X - any digit from 0-9
    ;   Z - any digit from 1-9
    ;   N - any digit from 2-9
    ;   [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9)
    ;   . - wildcard, matches anything remaining (e.g. _9011. matches 
    ;	anything starting with 9011 excluding 9011 itself)
    ;
    ; For example the extension _NXXXXXX would match normal 7 digit dialings, 
    ; while _1NXXNXXXXXX would represent an area code plus phone number
    ; preceeded by a one.
    ;
    ; Each step of an extension is ordered by priority, which must
    ; always start with 1 to be considered a valid extension.
    ;
    ; Contexts contain several lines, one for each step of each
    ; extension, which can take one of two forms as listed below,
    ; with the first form being preferred.  One may include another
    ; context in the current one as well, optionally with a
    ; date and time.  Included contexts are included in the order
    ; they are listed.
    ;
    ;[context]
    ;exten => someexten,priority,application(arg1,arg2,...)
    ;exten => someexten,priority,application,arg1|arg2...
    ;
    ; Timing list for includes is 
    ;
    ;   <time range>|<days of week>|<days of month>|<months>
    ;
    ;include => daytime|9:00-17:00|mon-fri|*|*
    ;
    ; ignorepat can be used to instruct drivers to not cancel dialtone upon
    ; receipt of a particular pattern.  The most commonly used example is
    ; of course '9' like this:
    ;
    ;ignorepat => 9
    ;
    ; so that dialtone remains even after dialing a 9.
    ;
    
    ;
    ; Here are the entries you need to participate in the IAXTEL
    ; call routing system.  Most IAXTEL numbers begin with 1-700, but
    ; there are exceptions.  For more information, and to sign
    ; up, please go to [url]www.gnophone.com[/url] or [url]www.iaxtel.com[/url]
    ;
    [iaxtel700]
    exten => _91700XXXXXXX,1,Dial(IAX2/${IAXINFO}@iaxtel.com/${EXTEN:1}@iaxtel)
    
    ;
    ; The SWITCH statement permits a server to share the dialplain with
    ; another server. Use with care: Reciprocal switch statements are not
    ; allowed (e.g. both A -> B and B -> A), and the switched server needs
    ; to be on-line or else dialing can be severly delayed.
    ;
    [iaxprovider]
    ;switch => IAX2/user:[key]@myserver/mycontext
    
    [trunkint]
    ;
    ; International long distance through trunk
    ;
    exten => _9011.,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _9011.,2,Congestion
    
    [trunkld]
    ;
    ; Long distance context accessed through trunk
    ;
    exten => _91NXXNXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91NXXNXXXXXX,2,Congestion
    
    [trunklocal]
    ;
    ; Local seven-digit dialing accessed through trunk interface
    ;
    exten => _9NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _9NXXXXXX,2,Congestion
    
    [trunktollfree]
    ;
    ; Long distance context accessed through trunk interface
    ;
    exten => _91800NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91800NXXXXXX,2,Congestion
    exten => _91888NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91888NXXXXXX,2,Congestion
    exten => _91877NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91877NXXXXXX,2,Congestion
    exten => _91866NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}})
    exten => _91866NXXXXXX,2,Congestion
    
    [international]
    ;
    ; Master context for international long distance
    ;
    ignorepat => 9
    include => longdistance
    include => trunkint
    
    [longdistance]
    ;
    ; Master context for long distance
    ;
    ignorepat => 9
    include => local
    include => trunkld
    
    [local]
    ;
    ; Master context for local, toll-free, and iaxtel calls only
    ;
    ignorepat => 9
    include => default
    include => parkedcalls
    include => trunklocal
    include => iaxtel700
    include => trunktollfree
    include => iaxprovider
    include => user
    ;
    ; You can use an alternative switch type as well, to resolve
    ; extensions that are not known here, for example with remote 
    ; IAX switching you transparently get access to the remote
    ; Asterisk PBX
    ; 
    ; switch => IAX2/user:password@bigserver/local
    
    [macro-stdexten];
    ;
    ; Standard extension macro:
    ;   ${ARG1} - Extension  (we could have used ${MACRO_EXTEN} here as well
    ;   ${ARG2} - Device(s) to ring
    ;
    exten => s,1,Dial(${ARG2},20)					; Ring the interface, 20 seconds maximum
    exten => s,2,Goto(s-${DIALSTATUS},1)				; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
    
    exten => s-NOANSWER,1,Voicemail(u${ARG1})		; If unavailable, send to voicemail w/ unavail announce
    exten => s-NOANSWER,2,Goto(default,s,1)			; If they press #, return to start
    
    exten => s-BUSY,1,Voicemail(b${ARG1})			; If busy, send to voicemail w/ busy announce
    exten => s-BUSY,2,Goto(default,s,1)				; If they press #, return to start
    
    exten => s-.,1,Goto(s-NOANSWER,1)				; Treat anything else as no answer
    
    exten => a,1,VoicemailMain(${ARG1})				; If they press *, send the user into VoicemailMain
    
    [demo]
    ;
    ; We start with what to do when a call first comes in.
    ;
    exten => s,1,Wait,1			; Wait a second, just for fun
    exten => s,2,Answer			; Answer the line
    exten => s,3,DigitTimeout,5		; Set Digit Timeout to 5 seconds
    exten => s,4,ResponseTimeout,10		; Set Response Timeout to 10 seconds
    exten => s,5,BackGround(demo-congrats)	; Play a congratulatory message
    exten => s,6,BackGround(demo-instruct)	; Play some instructions
    
    exten => 2,1,BackGround(demo-moreinfo)	; Give some more information.
    exten => 2,2,Goto(s,6)
    
    exten => 3,1,SetLanguage(fr)		; Set language to french
    exten => 3,2,Goto(s,5)			; Start with the congratulations
    
    exten => 1000,1,Goto(default,s,1)
    ;
    ; We also create an example user, 1234, who is on the console and has
    ; voicemail, etc.
    ;
    exten => 1234,1,Playback(transfer,skip)		; "Please hold while..." 
    					; (but skip if channel is not up)
    exten => 1234,2,Macro(stdexten,1234,${CONSOLE})
    
    exten => 1235,1,Voicemail(u1234)		; Right to voicemail
    
    exten => 1236,1,Dial(Console/dsp)		; Ring forever
    exten => 1236,2,Voicemail(u1234)		; Unless busy
    
    ;
    ; # for when they're done with the demo
    ;
    exten => #,1,Playback(demo-thanks)		; "Thanks for trying the demo"
    exten => #,2,Hangup			; Hang them up.
    
    ;
    ; A timeout and "invalid extension rule"
    ;
    exten => t,1,Goto(#,1)			; If they take too long, give up
    exten => i,1,Playback(invalid)		; "That's not valid, try again"
    
    ;
    ; Create an extension, 500, for dialing the
    ; Asterisk demo.
    ;
    exten => 500,1,Playback(demo-abouttotry); Let them know what's going on
    exten => 500,2,Dial(IAX2/guest@misery.digium.com/s@default)	; Call the Asterisk demo
    exten => 500,3,Playback(demo-nogo)	; Couldn't connect to the demo site
    exten => 500,4,Goto(s,6)		; Return to the start over message.
    
    ;
    ; Create an extension, 600, for evaulating echo latency.
    ;
    exten => 600,1,Playback(demo-echotest)	; Let them know what's going on
    exten => 600,2,Echo			; Do the echo test
    exten => 600,3,Playback(demo-echodone)	; Let them know it's over
    exten => 600,4,Goto(s,6)		; Start over
    
    ;
    ; Give voicemail at extension 8500
    ;
    exten => 8500,1,VoicemailMain
    exten => 8500,2,Goto(s,6)
    ;
    ; Here's what a phone entry would look like (IXJ for example)
    ;
    ;exten => 1265,1,Dial(Phone/phone0,15)
    ;exten => 1265,2,Goto(s,5)
    
    ;[mainmenu]
    ;
    ; Example "main menu" context with submenu
    ;
    ;exten => s,1,Answer
    ;exten => s,2,Background(thanks)		; "Thanks for calling press 1 for sales, 2 for support, ..."
    ;exten => 1,1,Goto(submenu,s,1)
    ;exten => 2,1,Hangup
    include => default
    ;
    ;[submenu]
    ;exten => s,1,Ringing					; Make them comfortable with 2 seconds of ringback
    ;exten => s,2,Wait,2
    ;exten => s,3,Background(submenuopts)	; "Thanks for calling the sales department.  Press 1 for steve, 2 for..."
    ;exten => 1,1,Goto(default,steve,1)
    ;exten => 2,1,Goto(default,mark,2)
    
    [default]
    ;
    ; By default we include the demo.  In a production system, you 
    ; probably don't want to have the demo there.
    ;
    include => demo
    ;
    ; Extensions like the two below can be used for FWD, Nikotel, sipgate etc.
    ; Note that you must have a [sipprovider] section in sip.conf whereas
    ; the otherprovider.net example does not require such a peer definition
    ;
    ;exten => _41X.,1,Dial(SIP/${EXTEN:2}@sipprovider,,r)
    ;exten => _42X.,1,Dial(SIP/user:passwd@${EXTEN:2}@otherprovider.net,30,rT)
    
    ; Real extensions would go here. Generally you want real extensions to be 4 or 5
    ; digits long (although there is no such requirement) and start with a single
    ; digit that is fairly large (like 6 or 7) so that you have plenty of room to
    ; overlap extensions and menu options without conflict.  You can alias them with
    ; names, too and use global variables
    
    ;exten => 6245,1,Dial(SIP/Grandstream1,20,rt)	; permit transfer
    ;exten => 6245,1,Dial(SIP/Grandstream1&SIP/Xlite1,20,rtT)
    ;exten => 6361,1,Dial(IAX2/JaneDoe,,rm)		; ring without time limit
    ;exten => 6389,1,Dial(MGCP/aaln/1@192.168.0.14)
    ;exten => 6394,1,Dial(Local/6275/n)		; this will dial ${MARK}
    
    ;exten => 6275,1,Macro(stdexten,6275,${MARK})	; assuming ${MARK} is something like Zap/2
    ;exten => mark,1,Goto(6275|1)			; alias mark to 6275
    ;exten => 6536,1,Macro(stdexten,6236,${WIL})	; Ditto for wil
    ;exten => wil,1,Goto(6236|1)
    ;
    ; Some other handy things are an extension for checking voicemail via
    ; voicemailmain
    ;
    ;exten => 8500,1,VoicemailMain
    ;exten => 8500,2,Hangup
    ;
    ; Or a conference room (you'll need to edit meetme.conf to enable this room)
    ;
    ;exten => 8600,1,Meetme(1234)
    ;
    ; Or playing an announcement to the called party, as soon it answers
    ;
    ;exten = 8700,1,Dial(${MARK}cro-var]; 
    ;
    ; For more information on applications, just type "show applications" at your
    ; friendly Asterisk CLI prompt.
    ;
    ; 'show application <command>' will show details of how you
    ; use that particular application in this file, the dial plan. 
    
    ;
    ; Advanced include
    ;
    include => macro-var
    include => user
    ;
    ; Advanced exten
    ;
    [macro-var];
    exten => s,1,Playback(welcome)
    exten => s,2,Dial(${EXTEN},30)
    exten => s,3,Voicemail(u1${EXTEN})
    exten => s,4,Hangup
    
    ; dann kommt die eigentliche extensions.conf
    
    [user]
    exten => 111,1,Macro(var,SIP/ninah,,tT)
    exten => 112,1,Macro(var,SIP/danielr,,tT) 
    exten => 113,1,Macro(var,SIP/chris,,tT)
    exten => 114,1,Macro(var,SIP/ben,,tT)
    
    sip.conf
    Code:
    ;
    ; SIP Configuration for Asterisk
    ;
    ; Syntax for specifying a SIP device in extensions.conf is
    ; SIP/devicename where devicename is defined in a section below.
    ;
    ; You may also use 
    ; SIP/username@domain to call any SIP user on the Internet
    ; (Don't forget to enable DNS SRV records if you want to use this)
    ; 
    ; If you define a SIP proxy as a peer below, you may call
    ; SIP/proxyhostname/user or SIP/user@proxyhostname 
    ; where the proxyhostname is defined in a section below 
    ; 
    ; Useful CLI commands to check peers/users:
    ;   sip show peers		Show all SIP peers (including friends)
    ;   sip show users		Show all SIP users (including friends)
    ;   sip show registry		Show status of hosts we register with
    ;
    ;   sip debug			Show all SIP messages
    ;
    
    [general]
    context=default			; Default context for incoming calls
    ;recordhistory=yes		; Record SIP history by default 
    				; (see sip history / sip no history)
    ;realm=mydomain.tld		; Realm for digest authentication
    				; defaults to "asterisk"
    				; Realms MUST be globally unique according to RFC 3261
    				; Set this to your host name or domain name
    port=5060			; UDP Port to bind to (SIP standard port is 5060)
    bindaddr=192.168.245.29		; IP address to bind to (0.0.0.0 binds to all)
    srvlookup=yes			; Enable DNS SRV lookups on outbound calls
    				; Note: Asterisk only uses the first host 
    				; in SRV records
    				; Disabling DNS SRV lookups disables the 
    				; ability to place SIP calls based on domain 
    				; names to some other SIP users on the Internet
    				
    ;pedantic=yes			; Enable slow, pedantic checking for Pingtel
    				; and multiline formatted headers for strict
    				; SIP compatibility (defaults to "no")
    tos=184                        ; Set IP QoS to either a keyword or numeric val
    tos=lowdelay                   ; lowdelay,throughput,reliability,mincost,none
    maxexpirey=3600		; Max length of incoming registration we allow
    defaultexpirey=120		; Default length of incoming/outoing registration
    ;notifymimetype=text/plain	; Allow overriding of mime type in MWI NOTIFY
    ;videosupport=yes		; Turn on support for SIP video
    
    ;disallow=all			; First disallow all codecs
    ;allow=ulaw			; Allow codecs in order of preference
    ;allow=ilbc			; Note: codec order is respected only in [general]
    allow=ilbc
    ;musicclass=default		; Sets the default music on hold class for all SIP calls
    				; This may also be set for individual users/peers
    ;language=en			; Default language setting for all users/peers
    language=de
    				; This may also be set for individual users/peers
    ;relaxdtmf=yes			; Relax dtmf handling
    ;rtptimeout=60			; Terminate call if 60 seconds of no RTP activity
    				; when we're not on hold
    ;rtpholdtimeout=300		; Terminate call if 300 seconds of no RTP activity
    				; when we're on hold (must be > rtptimeout)
    ;trustrpid = no			; If Remote-Party-ID should be trusted
    ;progressinband=no		; If we should generate in-band ringing always
    ;useragent=Asterisk PBX		; Allows you to change the user agent string
    ;nat=no				; NAT settings 
                                    ; yes = Always ignore info and assume NAT
                                    ; no = Use NAT mode only according to RFC3581 
                                    ; never = Never attempt NAT mode or RFC3581 support
    ;promiscredir = no      ; If yes, allows 302 or REDIR to non-local SIP address
    ; Asterisk can register as a SIP user agent to a SIP proxy (provider)
    ; Format for the register statement is:
    ;       register => user[:secret[:authuser]]@host[:port][/extension]
    ;
    ; If no extension is given, the 's' extension is used. The extension
    ; needs to be defined in extensions.conf to be able to accept calls
    ; from this SIP proxy (provider)
    ;
    ; host is either a host name defined in DNS or the name of a 
    ; section defined below.
    ;
    ; Examples:
    ;
    ;register => 1234:password@mysipprovider.com	
    ;
    ;     This will pass incoming calls to the 's' extension
    ;
    ;
    ;register => 2345:password@sip_proxy/1234
    ;
    ;    Register 2345 at sip provider 'sip_proxy'.  Calls from this provider connect to local 
    ;    extension 1234 in extensions.conf default context, unless you define 
    ;    unless you configure a [sip_proxy] section below, and configure a context.
    ;	 Tip 1: Avoid assigning hostname to a sip.conf section like [provider.com]
    ;        Tip 2: Use separate type=peer and type=user sections for SIP providers
    ;                      (instead of type=friend) if you have calls in both directions
      
    
    externip = 192.168.245.29	; Address that we're going to put in outbound SIP messages
    				; if we're behind a NAT
    
    				; The externip and localnet is used
    				; when registering and communicating with other proxies
    				; that we're registered with
    				; You may add multiple local networks.  A reasonable set of defaults
    				; are:
    localnet=192.168.245.0/255.255.0.0; All RFC 1918 addresses are local networks
    ;localnet=10.0.0.0/255.0.0.0	; Also RFC1918
    ;localnet=172.16.0.0/12		; Another RFC1918 with CIDR notation
    ;localnet=169.254.0.0/255.255.0.0 ;Zero conf local network
    
    ;-----------------------------------------------------------------------------------
    ; Users and peers have different settings available. Friends have all settings,
    ; since a friend is both a peer and a user
    ;
    ; User config options:        Peer configuration:
    ; --------------------        -------------------
    ; context                     context
    ; permit                      permit
    ; deny                        deny
    ; auth                        auth
    ; secret                      secret
    ; md5secret                   md5secret
    ; dtmfmode                    dtmfmode
    ; canreinvite                 canreinvite
    ; nat                         nat
    ; callgroup                   callgroup
    ; pickupgroup                 pickupgroup
    ; language                    language
    ; allow                       allow
    ; disallow                    disallow
    ; insecure                    insecure
    ; trustrpid                   trustrpid
    ; progressinband              progressinband
    ; promiscredir                promiscredir
    ; callerid
    ; accountcode
    ; amaflags
    ; incominglimit
    ; restrictcid
    ;                             mailbox
    ;                             username
    ;                             template
    ;                             fromdomain
    ;                             fromuser
    ;                             host
    ;                             mask
    ;                             port
    ;                             qualify
    ;                             defaultip
    ;                             rtptimeout
    ;                             rtpholdtimeout
    ;[sip_proxy]
    ; For incoming calls only. Example: FWD (Free World Dialup)
    ;type=user
    ;context=from-fwd
    
    ;[sip_proxy-out]
    ;type=peer          		; we only want to call out, not be called
    ;secret=guessit
    ;username=yourusername		; Authentication user for outbound proxies
    ;fromuser=yourusername		; Many SIP providers require this!
    ;host=box.provider.com
    
    ;[grandstream1]
    ;type=friend 			; either "friend" (peer+user), "peer" or "user"
    ;context=from-sip
    ;fromuser=grandstream1		; overrides the callerid, e.g. required by FWD
    ;callerid=John Doe <1234>
    ;host=192.168.0.23		; we have a static but private IP address
    ;nat=no				; there is not NAT between phone and Asterisk
    ;canreinvite=yes		; allow RTP voice traffic to bypass Asterisk
    dtmfmode=info			; either RFC2833 or INFO for the BudgeTone
    ;incominglimit=1		; permit only 1 outgoing call at a time
    				; from the phone to asterisk
    ;mailbox=1234@default  ; mailbox 1234 in voicemail context "default"
    ;disallow=all			; need to disallow=all before we can use allow=
    ;allow=ulaw			; Note: In user sections the order of codecs
    				; listed with allow= does NOT matter!
    ;allow=alaw
    ;allow=g723.1			; Asterisk only supports g723.1 pass-thru!
    ;allow=g729			; Pass-thru only unless g729 license obtained
    
    
    ;[xlite1]
    ;Turn off silence suppression in X-Lite ("Transmit Silence"=YES)!
    ;Note that Xlite sends NAT keep-alive packets, so qualify=yes is not needed
    ;type=friend
    ;username=xlite1
    ;callerid="Jane Smith" <5678>
    ;host=dynamic
    ;nat=yes                       ; X-Lite is behind a NAT router
    ;canreinvite=no                ; Typically set to NO if behind NAT
    ;disallow=all
    ;allow=gsm                     ; GSM consumes far less bandwidth than ulaw
    ;allow=ulaw
    ;allow=alaw
    
    
    ;[snom]
    ;type=friend			; Friends place calls and receive calls
    ;context=from-sip		; Context for incoming calls from this user
    ;secret=blah
    ;language=de			; Use German prompts for this user 
    ;host=dynamic			; This peer register with us
    ;dtmfmode=inband		; Choices are inband, rfc2833, or info
    ;defaultip=192.168.0.59		; IP used until peer registers
    ;username=snom			; Username to use in INVITE until peer registers
    ;mailbox=1234,2345		; Mailboxes for message waiting indicator
    ;restrictcid=yes		; To have the callerid restriced -> sent as ANI
    ;disallow=all
    ;allow=ulaw                     ; dtmfmode=inband only works with ulaw or alaw!
    ;mailbox=1234@context,2345      ; Mailbox(-es) for message waiting indicator
    
    
    ;[pingtel]
    ;type=friend
    ;username=pingtel
    ;secret=blah
    ;host=dynamic
    ;insecure=yes			; To match a peer based by IP address only and not peer
    ;insecure=very			; To allow registered hosts to call without re-authenticating
    ;qualify=1000			; Consider it down if it's 1 second to reply
    				; Helps with NAT session
    				; qualify=yes uses default value
    ;callgroup=1,3-4		; We are in caller groups 1,3,4
    ;pickupgroup=1,3-5		; We can do call pick-p for call group 1,3,4,5
    ;defaultip=192.168.0.60		; IP address to use if peer has not registred
    
    ;[cisco1]
    ;type=friend
    ;username=cisco1
    ;secret=blah
    ;qualify=200			; Qualify peer is no more than 200ms away
    ;nat=yes			; This phone may be natted
    				; Send SIP and RTP to  IP address that packet is 
    				; received from instead of trusting SIP headers 
    ;host=dynamic			; This device registers with us
    ;canreinvite=no			; Asterisk by default tries to redirect the
    				; RTP media stream (audio) to go directly from
    				; the caller to the callee.  Some devices do not
    				; support this (especially if one of them is 
    				; behind a NAT).
    ;defaultip=192.168.0.4
    
    ;[cisco2]
    ;type=friend
    ;username=cisco2
    ;fromuser=markster		; Specify user to put in "from" instead of callerid
    ;fromdomain=yourdomain.com	; Specify domain to put in "from" instead of callerid
    				; fromuser and fromdomain are used when Asterisk
    				; places calls to this account.  It is not used for
    				; calls from this account.
    ;secret=blah
    ;host=dynamic
    ;defaultip=192.168.0.4
    ;amaflags=default		; Choices are default, omit, billing, documentation
    ;accountcode=markster		; Users may be associated with an accountcode to ease billing
    
    [ninah]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.162
    callerid="ninah" <111>
    secret=test1
    context=default
    dtmfmode=rfc2833
    fromuser=ninah
    username=ninah
    canreinvite=yes
    transfer=yes
    quality=200
    codec1=PCMU
    codec2=PCMA
    codec3=G727
    codec4=G720
    
    [danielr]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="danielr" <112>
    secret=test2
    context=default
    dtmfmode=rfc2833
    fromuser=danielr
    username=danielr
    canreinvite=yes
    transfer=yes
    quality=200
    codec1=PCMU
    codec2=PCMA
    codec3=G727
    codec4=G720
    
    
    [chris]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="chris" <113>
    secret=test3
    context=default
    dtmfmode=rfc2833
    fromuser=chris
    username=chris
    canreinvite=yes
    quality=200
    codec1=PCMU
    codec2=PCMA
    codec3=G727
    codec4=G720
    
    [ben]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="ben" <114>
    secret=test4
    context=default
    dtmfmode=rfc2833
    fromuser=ben
    username=ben
    canreinvite=yes
    transfer=yes
    ransfer=yes
    quality=200
    codec1=PCMU
    codec2=PCMA
    codec3=G727
    codec4=G720
    
    Folgende Fehlermeldungen erhalte ich

    Code:
    *CLI>     -- Executing Macro("SIP/ben-fc7e", "var|SIP/ninah") in new stack
        -- Executing Playback("SIP/ben-fc7e", "welcome") in new stack
    Oct 25 09:30:55 WARNING[1112767280]: file.c:475 ast_openstream: File welcome does not exist in any format
    Oct 25 09:30:55 WARNING[1112767280]: file.c:779 ast_streamfile: Unable to open welcome (format ULAW): No such file or directory
    Oct 25 09:30:55 WARNING[1112767280]: app_playback.c:83 playback_exec: ast_streamfile failed on SIP/ben-fc7e for welcome
        -- Executing Dial("SIP/ben-fc7e", "s|30") in new stack
    Oct 25 09:30:55 WARNING[1112767280]: app_dial.c:694 dial_exec: Dial argument takes format (technology1/[device:]number1&technology2/[device:]number2...|optional timeout)
      == Spawn extension (macro-var, s, 2) exited non-zero on 'SIP/ben-fc7e' in macro 'var'
      == Spawn extension (default, 111, 1) exited non-zero on 'SIP/ben-fc7e'
        -- Executing Macro("SIP/ninah-d93f", "var|SIP/danielr") in new stack
        -- Executing Playback("SIP/ninah-d93f", "welcome") in new stack
    Oct 25 09:31:10 WARNING[1112767280]: file.c:475 ast_openstream: File welcome does not exist in any format
    Oct 25 09:31:10 WARNING[1112767280]: file.c:779 ast_streamfile: Unable to open welcome (format ILBC): No such file or directory
    Oct 25 09:31:10 WARNING[1112767280]: app_playback.c:83 playback_exec: ast_streamfile failed on SIP/ninah-d93f for welcome
        -- Executing Dial("SIP/ninah-d93f", "s|30") in new stack
    Oct 25 09:31:10 WARNING[1112767280]: app_dial.c:694 dial_exec: Dial argument takes format (technology1/[device:]number1&technology2/[device:]number2...|optional timeout)
      == Spawn extension (macro-var, s, 2) exited non-zero on 'SIP/ninah-d93f' in macro 'var'
      == Spawn extension (default, 112, 1) exited non-zero on 'SIP/ninah-d93f'
        -- Executing Macro("SIP/ninah-62a8", "var|SIP/chris") in new stack
        -- Executing Playback("SIP/ninah-62a8", "welcome") in new stack
    Oct 25 09:31:25 WARNING[1112767280]: file.c:475 ast_openstream: File welcome does not exist in any format
    Oct 25 09:31:25 WARNING[1112767280]: file.c:779 ast_streamfile: Unable to open welcome (format ILBC): No such file or directory
    Oct 25 09:31:25 WARNING[1112767280]: app_playback.c:83 playback_exec: ast_streamfile failed on SIP/ninah-62a8 for welcome
        -- Executing Dial("SIP/ninah-62a8", "s|30") in new stack
    Oct 25 09:31:25 WARNING[1112767280]: app_dial.c:694 dial_exec: Dial argument takes format (technology1/[device:]number1&technology2/[device:]number2...|optional timeout)
      == Spawn extension (macro-var, s, 2) exited non-zero on 'SIP/ninah-62a8' in macro 'var'
      == Spawn extension (default, 113, 1) exited non-zero on 'SIP/ninah-62a8'
    
    Das ist wahrscheinlich wieder so ein kleiner total schwachsinniger Fehler denn ich gemacht habe... :(

    Aber naja man ist ja lern Fähig :D
     
  17. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    1.) Du solltest mal das Playback der Datei "Welcome" einfach auskommentieren, solange Du noch gar keine Datei hast, die so heißt und eine WIllkommensnachricht enthält.

    2.)
    Du mußt Asterisk natürlich auch sagen, WIE er wählen soll - SIP IAX CAPI oder was auch immer !

    Also schreib mal in den Makro folgendes:

    exten => s,1,Dial(SIP/${EXTEN},30)
    exten => s,2,Voicemail(u${EXTEN}) ; ACHTUNG ! Die 1 mußt Du weglassen !
    exten => s,3,HangUp

    -----------
    Mach mal diese beiden Änderungen und poste dann entsprechende Fehlermeldungen

    Ich habe mir gerade mal Deine SIP.conf und EXTENSIONS.conf vorgenommen und mir die mal "sortiert" - da war es ja schon ziemlich schwierig, durchzublicken.

    Keine Sorge - das ist schon alles lösbar :wink:
     
  18. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Also das Macro habe ich jetzt so eingefügt =

    Code:
    ;
    ; Advanced exten
    ;
    [macro-var];
    ;exten => s,1,Playback(welcome)
    exten => s,1,Dial(SIP/${EXTEN},30)
    ;exten => s,2,Dial(${EXTEN},30)
    exten => s,3,Voicemail(u1${EXTEN})
    exten => s,4,Hangup
    
    ; dann kommt die eigentliche extensions.conf
    
    [user]
    exten => 111,1,Macro(var,SIP/ninah)
    exten => 112,1,Macro(var,SIP/danielr)
    exten => 113,1,Macro(var,SIP/chris)
    exten => 114,1,Macro(var,SIP/ben)
    
    Und es kommt folgende Fehlermeldung =

    Code:
    *CLI> sip show registry
    Host                            Username       Refresh State
    *CLI>     -- Executing Macro("SIP/ben-883b", "var|SIP/ninah") in new stack
        -- Executing Dial("SIP/ben-883b", "SIP/s|30") in new stack
    Oct 25 09:55:53 WARNING[1112767280]: chan_sip.c:1375 create_addr: No such host: s
    Oct 25 09:55:53 NOTICE[1112767280]: app_dial.c:742 dial_exec: Unable to create channel of type 'SIP'
      == Everyone is busy/congested at this time
        -- Saved useragent "SJLabs-SJphone/1.30.248" for peer ben
    
     
  19. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Gut - Die Fehlermeldungen haben also rapide abgenommen.

    Als nächstes nehmen wir uns Deine conf-Dateien vor - da ist auch noch manches im Argen.

    1.) Wir ändern mal in der SIP.Conf die Namen auf die entsprechenden Rufnummern. Deine Tippfehler habe ich in Deiner SIP.conf auch schonmal soweit wie möglich entfernt.

    Code:
    ; SIP.conf
    
    [general]
    context=default
    port=5060
    bindaddr=192.168.245.29
    srvlookup=yes
    tos=184
    tos=lowdelay
    maxexpirey=3600
    defaultexpirey=120
    disallow=all
    allow=ulaw
    allow=ilbc
    language=de
    
    externip = 192.168.245.29   ; Address that we're going to put in outbound SIP messages
    localnet=192.168.245.0/255.255.0.0; All RFC 1918 addresses are local networks
    
    
    [111]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.162
    callerid="ninah" <111>
    secret=test1
    context=default
    dtmfmode=rfc2833
    fromuser=ninah
    username=ninah
    canreinvite=yes
    transfer=yes
    
    [112]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="danielr" <112>
    secret=test2
    context=default
    dtmfmode=rfc2833
    fromuser=danielr
    username=danielr
    canreinvite=yes
    transfer=yes
    
    [113]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="chris" <113>
    secret=test3
    context=default
    dtmfmode=rfc2833
    fromuser=chris
    username=chris
    canreinvite=yes
    
    [114]
    type=friend
    host=dynamic
    ;defaultip=192.168.245.168
    callerid="ben" <114>
    secret=test4
    context=default
    dtmfmode=rfc2833
    fromuser=ben
    username=ben
    canreinvite=yes
    transfer=yes
    
    

    Dann habe ich mal versucht, Deine extensions.conf ein bißchen übersichtlicher zu machen.

    Code:
    [general]
    static=yes
    writeprotect=no
    
    [globals]
    CONSOLE=Console/dsp            ; Console interface for demo
    
    [local]
    
    [default]
    include => macro-var
    include => user
    
    [macro-var];
    exten => s,1,NoOp(Playback(welcome))
    exten => s,2,Dial(${ARG1},30)
    exten => s,3,Voicemail(u${ARG1})
    exten => s,4,Hangup
    
    [user]
    exten => _.,1,Macro(var,${EXTEN})
    
    
     
  20. Winterwolf

    Winterwolf Neuer User

    Registriert seit:
    21 Okt. 2004
    Beiträge:
    30
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Also wenn ich diese beiden Config's benutzte meldet mir mein SJphone = SIP = not registered