Callback Reloaded

Ich habe mit dem wunderbaren (ich mein das ernst) Skript leider ein kleines Problemchen ...

Wenn ich mit dem Handy den Asterisk-Rechner anrufe, wird die Verbindung nicht beendet. Das heißt wenn ich nicht selber rechtzeitig auflege, wird die Rückverbindung nicht aufgebaut - mein Handy ist ja noch besetzt.

Mache ich da was falsch?
Ist mein Handy falsch eingestellt?
Oder kann der Skript / die Config noch irgendwie gefixt werden um solche Probleme zu vermeiden?

Grüsse und *Danke*

Sebastian Nerz

PS Keine Ahnung ob es weiterhilft, aber ich hatte die schon erwähnten Probleme mit dem "Speicherfehler" nach dem Hangup / beim Wiederaufbau der Verbindung.
Behoben wurde das Problem mit einem Update von Asterisk von der Debian-Version 1.1.0.7 auf die neue Beta ...

PPS Zum Thema ` und ' ...
' markiert Beginn und Ende eines Strings - also einer Zeichenkette die als Einheit betrachtet werden soll (Wer hat eine bessere, kurze Erklärung?)

` ` ist in diesem Fall eine Spezialität der Verwendeten Shell. Der Befehl dazwischen wird ausgeführt und seine Ausgabe in der angegebenen Variable gespeichert.
Der Code ist durchaus korrekt ;)
 
Hallo Sebastian,
bei mir trat der Fehler, dass Hangup nicht richtig funktionierte, auch mal auf. Inzwischen geht es zwar wieder (keine Ahnung wieso?!?), doch hatte ich das ganze damals wie folgt hinbekommen...

Da der Rückruf aufgrund der besetzten Leitung nicht erfolgen konnte, habe ich die Retries ganz einfach auf 3 hochgesetzt.

Also einfach folgende Zeile im AGI:
Code:
        echo "MaxRetries: 0"                                    >> $callfile
durch
Code:
        echo "MaxRetries: 3"                                    >> $callfile
ersetzen.

Dann wird zwar weiterhin ein Wählversuch gestartet, welcher Besetzt sein wird, doch folgen im 10 Sekundenabstand noch 2 weitere Anrufversuche.

Sollte damit funktionieren...

Viele Grüße,
Andreas
 
Jupp, habe ich jetzt auch so drinne - aber ich fände es schöner, wenn das auflegen klappen würde ;-)
 
Hallo zusammen,

ich habe mich jetzt auch mal hingesetzt und angefangen mir ein Callback zusammen zu basteln. Ich habe die Lösung vom Threadersteller versucht, wobei ich das ganze etwas abgespeckt habe (brauche nur einen User :wink:).

Ich habe bei der Fehlersuche festgestellt, das der Callback nicht über jeden SIP-Provider erfolgreich auf meinem Genion-Handy ankommt. Das Handy klingelt in allen Fällen, aber spätestens wenn ich das Gespräch annehme (manchmal auch nach dem ersten Klingeln), ist die Verbindung weg. Getestet habe ich das, indem ich das Callfile von Hand erstellt habe und jeweils einen anderen SIP-Provider habe wählen lassen:

Code:
Channel: SIP/voipbuster/0049MEINEGENIONNUMMEROHNENULLVORNE
Callerid: "MEINETELEFONNUMMER"
Context: callback-go
Extension: s
WaitTime: 15
MaxRetries: 3
RetryTime: 10

Voipbuster wie hier im Beispiel geht nicht. Ich habe aber auch schon SIP/MEINEGENIONNUMMER@sipgate (geht) und SIP/MEINEGENIONNUMMER@sipnetworks (geht auch nicht) probiert. Normales raustelefonieren über voipbuster geht allerdings. Was auch klappt ist ein Anruf auf einer lokalen Rufnummer mit SIP/1234.

Im Context callback-go wird zu Testzwecken ein Echo-Test ausgeführt.

Hat jemand eine Ahnung woran das liegen könnte, das hier nicht alle Provider für die Ausführung des Callbacks funktionieren, über die ich normalerweise anrufen kann?

Edit: Ich habe grade rausgefunden wie es mit Voipbuster klappt. Ich habe in dem Kontext callback-go als erste Regel noch ein Answer eingefügt, danach ging es doch mit Voipbuster. Seltsam...

Edit 2: Das einzige Problem, das ich jetzt noch habe betrifft DTMF. Auch nach studieren des Forums und intensiver Tests habe ich Asterisk nicht dazu bewegen können die DTMF-Töne vom Handy zu erkennen.

Volker
 
Problem mit Script Anrufannahme

Hallo Leute,

habe das Script und die Einstellungen von FlashIT germacht und der Rückruf über SIP oder DTAG klappt auch. Sobald ich allerdings das Callbackgespräch annehme erscheint sofort im Hörer ein Besetztzeichen. Ich kann also gar nicht meine Nummer wählen. Was habe ich denn falsch gemacht??

Muss sonst noch etwas eingestellt werden? Evtl. die Soundfiles ???

Danke
 
Re: Problem mit Script Anrufannahme

dudeldoedel schrieb:
habe das Script und die Einstellungen von FlashIT germacht und der Rückruf über SIP oder DTAG klappt auch. Sobald ich allerdings das Callbackgespräch annehme erscheint sofort im Hörer ein Besetztzeichen. Ich kann also gar nicht meine Nummer wählen. Was habe ich denn falsch gemacht??

Vielleicht hast Du ja das selbe Problem wie ich. Bei mir hat es geholfen ein Answer am Anfang einzufügen (siehe mein Beitrag vom 25.10.).

Volker
 
@voja

Danke für Deine Antwort. Also es ist zwar derselbe Fehler aber komischerweise habe ich den Rückruf des Asterisk auch mal über ZAP versucht und damit klappte es auch nicht.

Schreib mir doch bitte mal Deinen Answer-String. Das wäre toll.

Gruss

dudeldoedel
 
dudeldoedel schrieb:
Danke für Deine Antwort. Also es ist zwar derselbe Fehler aber komischerweise habe ich den Rückruf des Asterisk auch mal über ZAP versucht und damit klappte es auch nicht.

Schreib mir doch bitte mal Deinen Answer-String. Das wäre toll.

Im callback-go Context steht da bei mir einfach am Anfang noch das drin:

Code:
exten => s,1,Answer

(nicht vergessen die restlichen Prioritäten hochzuzählen)

Ich wüßte nicht das man Answer noch irgendwelche Parameter geben kann.

Volker
 
Hmmm, danke für den Tip,

aber .... es klappt nicht.

Immer, wenn ich den Rückruf annehme ist sofort im Hörer besetzt. Es entsteht auch keine Verbindung. Und auch keine Gebühren.

Komisch ist das schon.

Noch ne Idee Volker ???

Schönes WE

Gruss dudeldoedel
 
dudeldoedel schrieb:
Hmmm, danke für den Tip,
aber .... es klappt nicht.
Immer, wenn ich den Rückruf annehme ist sofort im Hörer besetzt. Es entsteht auch keine Verbindung. Und auch keine Gebühren.
Komisch ist das schon.
Noch ne Idee Volker ???

Wie sieht denn Dein Callfile aus? Ich habe das glaub etwas angepasst (siehe mein Post vom 25.10.), gibt es da bei Dir irgendwelche Unterschiede? Stimmen da die Extension und der Context der angesprungen werden soll? Kannst Du von Hand ein Callfile erstellen und testen obs damit geht?

Ansonsten habe ich keine weiteren Ideen, ich habe das grundsätzlich nur mit SIP getestet.

Volker
 
Also ich habe Sipgate genutzt, allerdings auch mit dem ZAP Treiber, der die ISDN Karte direkt anspricht.

Hier mal ein Auszug aus meiner extension.conf

Code:
;Callbacklösung

exten => 516xxx,1,GotoIf($[${CALLERIDNUM} = Anonymous]?callback-withoutcallid,s,1:callback-withcallid,s,1)

[callback-withoutcallid]
exten => s,1,Set(LANGUAGE()=de)
exten => s,2,Answer
exten => s,3,Wait,1

; EingabeSchleife zur Zieleingabe
exten => s,4,Set(MYNR=)
exten => s,5,Background(privacy-prompt)
exten => s,6,Set(TIMEOUT(response)=10)
exten => s,7,WaitExten
exten => _X,1,Set(MYNR=${MYNR}${EXTEN})
exten => _X,2,Goto(s,6)

; Zuruecksetzen
exten => *,1,Goto(s,4)

; Eigene Rufnummer uebergeben
exten => #,1,Background(queue-thankyou)
exten => #,2,SetCallerID(${MYNR})
exten => #,3,AGI(callback.agi)
exten => #,4,Hangup

; Handling fuer Timeout & bye
exten => t,1,Playback(vm-goodbye)
exten => t,2,HangUp

[callback-withcallid]
exten => s,1,AGI(callback.agi)
exten => s,2,Hangup

[callback-dial]
;Wahl über SIPGATE
exten => _X.,1,SetCallerId,6268xxx
exten => _X.,2,Dial(SIP/${EXTEN}@sipgate2,,)

;Wahl über ISDN alternativ
;exten => _X.,1,Dial(Zap/g2/${EXTEN},60)

[callback-go]
exten => s,1,Answer
exten => s,2,Set(LANGUAGE()=de)
exten => s,3,Wait,1

; Soll ein Passwort abgefragt werden?
exten => s,4,GotoIf($[${ask4pass} = true]?4:7)

; Erstmal Passwort ueberpruefen
exten => s,5,DigitTimeout(5)
exten => s,6,Set(TIMEOUT(response)=10)
exten => s,7,Authenticate(${password})

; EingabeSchleife zur Zieleingabe
exten => s,3,Set(NR=)
exten => s,4,Background(vm-enter-num-to-call)
exten => s,5,Set(TIMEOUT(response)=10)
exten => s,6,WaitExten
exten => _X,1,Set(NR=${NR}${EXTEN})
exten => _X,2,Goto(s,9)

; Zuruecksetzen
exten => *,1,Goto(s,7)

; Nummer uebergeben
exten => #,1,Dial(SIP/${EXTEN}@sipgate2,,)
exten => #,2,Goto(#-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)

; DialingStates
exten => #-NOANSWER,1,Playback(vm-nobodyavail)
exten => #-NOANSWER,2,Goto(s,7)
exten => #-BUSY,1,Playback(tt-allbusy)
exten => #-BUSY,2,Goto(#,1)

exten => #-CHANUNAVAIL,1,Playback(tt-somethingwrong)
exten => #-CHANUNAVAIL,2,Goto(t,1)

exten => #-CONGESTION,1,Playback(vm-nobodyavail)
exten => #-CONGESTION,2,Goto(s,7)

exten => _#-.,1,Goto(t,1)

; Handling fuer Timeout & bye
exten => t,1,Playback(vm-goodbye)
exten => t,2,HangUp

Ich habe eigendlich nur die Sip nummer und die Aktivierungsnummer geändert. Und natürlich Dein answer eingefügt. Schau bitte mal rüber ob ich sonst noch etwas falsch haben könnte.

Vielen Dank

dudeldoedel
 
dudeldoedel schrieb:
Ich habe eigendlich nur die Sip nummer und die Aktivierungsnummer geändert. Und natürlich Dein answer eingefügt. Schau bitte mal rüber ob ich sonst noch etwas falsch haben könnte.

Ich sehe sonst nichts.

Ich würde beim Callfile mit der Fehlersuche weitermachen. Das Callfile nehmen, alles von Hand eintragen und dann in den Ordner von Hand kopieren (Rechte vorher richtig setzen). Ich mußte am Callfile noch ein paar Sachen ändern, damit es bei mir richtig funktioniert hat (ich habe allerdings das Orginal-Callback für meine Zwecke angepasst).

Ggf. würde ich auch mal das Callfile in einen Context springen lassen, das nur ein Answer macht, einen Beep abspielt und wieder auflegt. Das kann man dann auch mal mit den lokalen SIP-Telefonen testen, dann braucht man nicht so viel Telefongebühren verschwenden.

Wenn allerdings der Callback mit SIP tut und nur mit ZAP nicht, weiß ich ohnehin nicht woran es liegen könnte, da ich noch nie mit ZAP gearbeitet habe.

Volker
 
Ach Volker,

ich bastel hier schon mit Deinen Tips rum. Also Telefongebühren entstehen ja nicht. Ich weiss auch nicht. Telefon klingelt aber es kommt nach dem Abheben direkt ein Besetzt. Frage mich nur, wo er abbricht. In der full Datei unter /var/log/asterisk steht etwas von

error 1538 cdr_mysql: cannot connect to database server localhost Call will not be logged

Hilft das evtl. weiter ???

Gruss
dudeldoedel
 
Hallo,

habe das erste Scrict, extension usw. übernommen, angepasst (statt SIP/1&1 auf CAPI, da Telefonflat...) und dann losgelegt.

Er ruft auch zurück sofern die CID übermittelt wird, aber dann legt er auf. Im CLI bekomme ich folgenden Fehler:

[php:1:281cc127a3]
WARNING[6597]: pbx.c:1295 pbx_extension_helper: No application 'Set' for extension (callback-go, s, 1)
== Spawn extension (callback-go, s, 1) exited non-zero on 'Local/05116763348@callback-dial-3a13,1'
[/php:1:281cc127a3]

Ich habe die aktuelle Bristuff stable installiert. Gibt es dort das Set Commando nicht?

Gruß
Sascha
 
Ich habe dasselbe Problem wie tirsales und nach der Erhöhung von MaxRetries, wie von aha vorgeschlagen, klappt es auch, schließe mich aber
tirsales schrieb:
Jupp, habe ich jetzt auch so drinne - aber ich fände es schöner, wenn das auflegen klappen würde ;-)
an. Wie bringe ich Asterisk also bei, daß dem Anrufer zuerst ein Besetzt signalisiert wird, bevor der Callback rausgeht? Danke.
 
das sollte doch mit exten x,y => busy gehen.

Ich hätte da noch eine Anregung für die Script Profis hier:
Einige Provider im Ausland bekommen es immer noch hin, die Nummer falsch zu signalisieren, d.h. der Callback geht entweder in die Wüste oder (falls z.B. die Nr. der Zentrale angezeigt wird) an die falsche Nummer.

Jetzt wäre es klasse, wenn der Asterisk beim erfolglosen Callback (zu erkennen am timeout oder error oder daran, dass die Zentrale keine DTMF-Signale schickt) diese Nummer in seiner Liste markiert und beim nächsten Anruf von dieser Nummer rangeht und eine Rückrufnummer erfragt. Die müsste er dann für die Zukunft speichern.

Damit könnte man auch flexibel Genion-HZ-Nummern einrichten: 1x anrufen, bei Rückruf nicht rangehen, nochmal anrufen und Ortsnetznummer festlegen und ab sofort immer auf der Ortsnetznummer zurückgerufen werden.

Das wäre toll! Wer bekommt das hingescriptet?
 
e18 schrieb:
Damit könnte man auch flexibel Genion-HZ-Nummern einrichten: 1x anrufen, bei Rückruf nicht rangehen, nochmal anrufen und Ortsnetznummer festlegen und ab sofort immer auf der Ortsnetznummer zurückgerufen werden.
Wie oft ändert sich denn deine Ortsnetznummer? Meine ändert sich nie, daher sehe ich auch keine Notwendigkeit, die Rückrufnummer zu ändern.
 
Das ist ja auch nur ein Nebeneffekt.

Was schon öfter vorkommt, ist, dass ich von einer NEbenstelle anrufe und die Zentrale (oder völliger schrott (im Ausland) signalisiert wird. Dafür wäre so eine Ergänzung klasse!

Auch, dass ich nicht jedesmal die Callback-Nr. neu eingeben muss
 
Hallo zusammen,
ich lerne eifrig und komme mittlerweile schon recht gut zurecht. Jedoch bei der Verfeinerung des Callbacks hier bremst es mich aus! :confused:

Ich rufe von meinem O2-Handy auf meinem Sipgate-Anschluss an. Dieser arbeitet das Callback-Script ab.
Ich werde durch eine Leitung eines anderen Anbieters zurückgerufen und zur Rufnummereingabe aufgefordert (anderer Anbieter, da Sipgate DTMF nicht durchläst).
Die eingegebene Rufnummer wird per SparVoip angeufen.

Mein Vorhaben: Jetzt soll Asterisk die Leitung, die zur DTMF-Übergabe genutzt wurde beenden, mich ebenfalls über SparVoip (weil billiger) zurückrufen und mich mit meinem Zielpartner verbinden.

Habt Ihr einen Tipp?

Torben
 
Dann lass Dich doch über SparVOIP zurückrufen für die DTMF-Eingabe. Das kannst Du in der extensions.conf unter callback-dial einstellen.
Code:
[callback-dial]
exten => _X.,1,Dial(SIP/${EXTEN}@1und1_callback,,)
heisst es im Original und das @1und1_Callback muss ersetzt werden durch die Angaben für SparVOIP.
Ich hoffe es hilft
Matthias
 
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.