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

Verbindung nicht abbauen wenn Angerufener auflegt

Dieses Thema im Forum "Asterisk Rufnummernplan" wurde erstellt von finnjet, 16 März 2005.

  1. finnjet

    finnjet Neuer User

    Registriert seit:
    16 März 2005
    Beiträge:
    8
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hy,

    ich habe mir in den letzten Monaten eine mittlerweile ganz gut funktionierende CallBack Lösung gebatu. Nur ein Problem ärgert mich immer noch. Verbindungen werden aufgebaut und ich kann sie mit * abbrechen. Nur leider fliege ich dann nach eingabe der nächsten Ziffer am "Nummernprompt" raus. Witzigerweise nicht wenn ein fehler aufgetreten ist, es also z.B. besetzt war. Hier mal meine Version

    Code:
    
    [callthrough]
    
    exten => s,1,Noop(EXTEN ${EXTEN} DIALSTATUS ${DIALSTATUS} PriCause ${PRI_CAUSE} DNID  ${DNID} MACRO_RESULT ${MACRO_RESULT})
    exten => s,2,SetVar(NR=)
    exten => s,3,Background(privacy-prompt)
    exten => s,4,Background(additional2/and-prs-pound-whn-finished)
    exten => s,5,ResponseTimeout(20)
    exten => s,6,WaitExten
    
    exten => _X,1,SetVar(NR=${NR}${EXTEN})
    exten => _X,2,Goto(s,6)
    
    exten => **,1,Goto(s,1)
    
    exten => #,1,Playback(auth-thankyou)
    exten => #,2,SetVar(CHKPROVIDER=${NR:0:1})
    exten => #,3,GotoIf($[${CHKPROVIDER} = 9]?callthrough_dialout,s,10)
    exten => #,4,GotoIf($[${CHKPROVIDER} = 8]?callthrough_dialout,s,20)
    exten => #,5,GotoIf($[${CHKPROVIDER} = 7]?callthrough_dialout,s,30)
    
    exten => #,6,Goto(callthrough_dialout,s,1)
    
    exten => t,1,Playback(vm-goodbye)
    exten => t,2,HangUp
    
    exten => h,1,Playback(additional2/thank-you-for-calling)
    exten => h,2,Noop
    exten => h,3,SetVar(EXTEN=)
    exten => h,4,SetVar(PRI_CAUSE=)
    exten => h,5,SetVar(DIALSTATUS=)
    exten => h,6,Goto(callthrough,s,1)
    
    exten => i,1,Answer
    exten => i,2,Playback(pbx-invalid)
    exten => i,3,Hangup
    
    [callthrough_dialout]
    exten => s,1,Macro(dialsip,${NR},gmx,true)
    exten => s,2,Goto(callthrough,s,1)
    
    exten => s,10,SetVar(NR=${NR:1})
    exten => s,11,Macro(dialsip,${NR},sipgate,true)
    exten => s,12,Goto(callthrough,s,1)
    
    exten => s,20,SetVar(NR=${NR:1})
    exten => s,21,Macro(dialsip,${NR},nikotel,true)
    exten => s,22,Goto(callthrough,s,1)
    
    exten => s,30,SetVar(NR=${NR:1})
    exten => s,31,Macro(dialsip,${NR},stanaphone,true)
    exten => s,32,Goto(callthrough,s,1)
    
    exten => t,1,Goto(callthrough,t,1)
    exten => h,1,Goto(callthrough,h,1)
    
    [macro-dialsip]
    ; ARG1 = Number in German Notation
    ; ARG2 = Provider
    ; ARG3 = Handle Errors and results (true/false)
    
    include => parkedcalls
    
    
    exten => s,1,Setvar(MACRO_RESULT=CONTINUE)
    exten => s,2,Goto(s-${ARG2},1)
    
    exten => s-,1,Goto(s-gmx,1)
    
    exten => s-gmx,1,SayAlpha(gmx)
    exten => s-gmx,2,SetCIDName(XXXXXXXX)
    exten => s-gmx,3,Dial(SIP/${ARG1}@gmx,60,tThHg)
    exten => s-gmx,4,Goto(s-result,1)
    
    ...code für die anderen SIP Anbieter gesnipt...
    
    exten => s-result,1,GotoIf($[${DIALSTATUS} = NOANSWER]?50)
    exten => s-result,2,GotoIf($[${DIALSTATUS} = CONGESTION]?60)
    exten => s-result,3,GotoIf($[${DIALSTATUS} = CANCEL]?70)
    exten => s-result,4,GotoIf($[${DIALSTATUS} = BUSY]?80)
    exten => s-result,5,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?90)
    exten => s-result,6,Playback(additional2/good)
    exten => s-result,7,Goto(100)
    
    exten => s-result,50,Playback(additional2/nbdy-avail-to-take-call)
    exten => s-result,51,Setvar(MACRO_RESULT=CONTINUE)
    exten => s-result,52,Goto(100)
    
    exten => s-result,60,Playback(additional2/im-sorry)
    exten => s-result,61,Playback(additional2/channel)
    exten => s-result,62,Playback(additional2/is-curntly-busy)
    exten => s-result,63,Setvar(MACRO_RESULT=CONTINUE)
    exten => s-result,64,Goto(100)
    
    exten => s-result,70,Playback(additional2/im-sorry)
    exten => s-result,71,Playback(additional2/an-error-has-occured)
    exten => s-result,72,Setvar(MACRO_RESULT=CONTINUE)
    exten => s-result,73,Goto(100)
    
    exten => s-result,80,Playback(additional2/the-party-you-are-calling)
    exten => s-result,81,Playback(additional2/is-curntly-busy)
    exten => s-result,82,Setvar(MACRO_RESULT=CONTINUE)
    exten => s-result,83,Goto(100)
    
    exten => s-result,90,Playback(additional2/im-sorry)
    exten => s-result,91,Playback(additional2/channel)
    exten => s-result,92,Playback(additional2/is-curntly-unavail)
    exten => s-result,93,Setvar(MACRO_RESULT=CONTINUE)
    exten => s-result,94,Goto(100)
    
    exten => h,1,Playback(additional2/good)
    exten => h,2,Setvar(MACRO_RESULT=CONTINUE)
    
    exten => a,1,Playback(additional2/good)
    
    exten => s-result,100,Noop
    ;exten => s-result,100,Hangup
    
    
    

    Mir ist klar, dass der Code nicht gerade übersichtlich ist, aber ich dachte wenn jemand da spontan was einfällt und das helfen könnte...
    einige Zeilen sind schon Zeugnis für einigen Stunden Debuging Versuche.

    Das Soundfile good habe ich z.B. noch nie gehört, es wird aslo nie in die entsprechenden Zeilen gesprungen.

    Der Ablauf ist so:
    Ich bekomme meinen CallBack (wenn ich es als Callthrough nutze ist es das selbe) und höre die Ansagen. Die Nummer wird gewählt (wie man auch
    an den Debug ausgaben von Asterisk sieht. Nachdem ich das Gespräch geführt habe (hier mit * beendet) springt er offensichtlich wieder in den Kontext callthrough ich höre auf jeden Fall wieder den Voiceprompt aber nach der ersten Tasteneingabe:

    User hit '*' to disconnect call.
    == Spawn extension (macro-dialsip, s-sipgate, 4) exited non-zero on 'SIP/gmx-3a6c' in macro 'dialsip'
    == Spawn extension (callthrough_dialout, s, 11) exited non-zero on 'SIP/gmx-3a6c'
    -- Executing Goto("SIP/gmx-3a6c", "callthrough|h|1") in new stack
    -- Goto (callthrough,h,1)
    -- Executing Playback("SIP/gmx-3a6c", "additional2/thank-you-for-calling") in new stack
    -- Playing 'additional2/thank-you-for-calling' (language 'en')
    -- Executing SetVar("SIP/gmx-3a6c", "EXTEN=") in new stack
    -- Executing SetVar("SIP/gmx-3a6c", "PRI_CAUSE=") in new stack
    -- Executing SetVar("SIP/gmx-3a6c", "DIALSTATUS=") in new stack
    -- Executing Goto("SIP/gmx-3a6c", "callthrough|s|1") in new stack
    -- Goto (callthrough,s,1)
    -- Executing NoOp("SIP/gmx-3a6c", "EXTEN s DIALSTATUS PriCause DNID MACRO_RESULT CONTINUE") in new stack
    -- Executing SetVar("SIP/gmx-3a6c", "NR=") in new stack
    -- Executing BackGround("SIP/gmx-3a6c", "privacy-prompt") in new stack
    -- Playing 'privacy-prompt' (language 'en')
    RFC3389: 1 bytes, level 4...
    == Spawn extension (callthrough, s, 3) exited non-zero on 'SIP/gmx-3a6c'

    Vielleicht fällt ja jemandem was ein. ich habe die Vermutung es liegt an diesem Rückgabewert (exited non-zero on 'SIP/gmx-3a6c' in macro 'dialsip') aber ich habe keine Ahnung wie man den Überschreiben könnte. Alle anderen Variablen versuche ich ja schon immer wieder auf leer zu setzen.


    Mit freundlichen Grüßen und vielen Dank für das Lesen bis hier ;-)

    Milan