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
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
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