Verbindung nicht abbauen wenn Angerufener auflegt

finnjet

Neuer User
Mitglied seit
16 Mrz 2005
Beiträge
8
Punkte für Reaktionen
0
Punkte
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
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.