Verzögerung bei Callfile

Dani_CH

Neuer User
Mitglied seit
23 Okt 2004
Beiträge
68
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen

Wenn ich mit meinem Handy den Asterisk-Server anrufe, nimmt der gar nicht ab, sondern startet direkt ein Callback auf mein Handy.

Dies wird mit einem Callfile realisiert.

Leider versucht der jeweils gerade anzurufen, wenn ich den Anruf noch nicht mal abgebrochen habe. Deshalb kommt es zu einer enormen Verzögerung.

Kann mir jemand sagen, wie ich eine Verzögerung ins Callfile einbaue?

Ich habe ursprünglich in die Callback-Extension am Anfang ein wait(5) reingebaut, aber dies funktioniert komischerweise nicht...

Besten Dank für Eure Hilfe!!
 
Am einfachsten mit dem Programm, dass auch den Callfile erzeugt. Im Callfile selbst kann man nicht verzögern (soweit ich weiß).
Elegant wäre es, fork zu verwenden und den einen Teil zum Asterisk zurück kehren zu lassen.
 
Das Callfile wird eben direkt in der Extension drin erstellt....
 
*grübel* wie das - dafür muss in eine Datei geschrieben werden.
Am einfachsten wäre wohl, einen eigenen Context zu definieren, in dessen h extension zu warten und den file zu schreiben... sprich

[normalerAnrufContext]
exten => 1234,1,Goto(callback,callme,1)

[callback]
exten => callme,1,Ringing
exten => callme,2,Wait(15)
exten => callme,3,Hangup

exten => h,1,Wait(5)
exten => h,2,Callfileerzeugen
 
Dani!

Wie wäre es, wenn Asterisk gleich mit
einer Fehlermeldung antwortet, ansatt es
klingeln zu lassen?

Ich meine einen Anruf abzulehnen, ohne abgehoben
zu haben. So wie ich verstanden habe gibt
es dafür 2 Lösungen:
durch das setzen der PRI_CAUSE Variable und
durch priindication=oob.

Mehr dazu hier:
http://www.mail-archive.com/[email protected]/msg84393.html


Wäre nett zu hören, ob es funktioniert.

Gruß
britzelfix
 
ecco schrieb:
*grübel* wie das - dafür muss in eine Datei geschrieben werden.

dies mache ich mit folgendem code:

Code:
exten => 2,1,system(echo "Channel: SIP/${CALLERIDNUM}@sipcall" > /etc/asterisk/c
exten => 2,2,system(echo "Context: callback" >> /etc/asterisk/call-files/callbac
exten => 2,3,system(echo "Extension: s" >> /etc/asterisk/call-files/callback.cal
exten => 2,4,system(echo "SetVar: CALLERIDNUM=xxx" >> /etc/asterisk/call-f
exten => 2,5,system(echo "MaxRetries: 2" >> /etc/asterisk/call-files/callback.ca
exten => 2,6,system(echo "RetryTime: 5" >> /etc/asterisk/call-files/callback.cal
exten => 2,7,system(echo "WaitTime: 5" >> /etc/asterisk/call-files/callback.call

exten => 2,8,system(cp /etc/asterisk/call-files/callback.call /var/spool/asteris

Bis ich dann aber aufgehänt habe, hat der Asterisk bereits den ersten erfolglosen Anruf-Versuch hinter sich.
 
britzelfix schrieb:
Ich meine einen Anruf abzulehnen, ohne abgehoben
zu haben.

Besten Dank für den Vorschlag. Der Anruf wird aber gar nicht abgenommen. Wenn Asterisk merkt, dass ich mit meinem Handy anrufe, wird nur das Callfile generiert und mehr passiert nicht.
 
Dani_CH schrieb:
ecco schrieb:
*grübel* wie das - dafür muss in eine Datei geschrieben werden.

dies mache ich mit folgendem code:
OK, das ist natürlich die brutalst mögliche Variante.
Aber letzlich müsstest du deine Callfile-Erzeugung mit meinem Vorschlag realisieren können: http://www.ippf.tk/forum/viewtopic.php?p=109047#109047

Einfach bei CreateCallFile durch die Befehlsfolgen ersetzen und natürlich die 2 durch h ersetzen ;)
 
Ja, hat nun bestens geklappt!! Vielen herzlichen Dank!
 
hier eben hat es auch geklappt,
allerdings benutze ich dafür
DeadAgi. Ich rufe an, höre den ersten Ton
und breche ab. Danach kommt schon der
Anruf von *.

Wie von ecco vorgeschlagen:

[callback]
exten => s,1,Ringing
exten => s,2,Wait(25)
exten => s,3,HangUp
exten => h,1,DeadAGI(callback.agi|SIP/1234/HandyNr)

[incoming-context]

exten => _0HandyNr,1,Goto(callback,s,1)

Was mir noch fehlt: ich möchte gerne den callback-context
etwas universeller gestallten und die anzurufende Nummer
z.B. im Goto mit zu übergeben.

exten => _0HandyNr,1,Goto(callback,s,1,0123456)

geht das?


Gruß
britzelfix
 
[globals]

CBEXTEN => 99

[incoming-context]

exten => _0HandyNr,1,SetGlobalVar(CBEXTEN=${EXTEN})
exten => _0HandyNr,2,Goto(callback,s,1)

[callback]
exten => s,1,Ringing
exten => s,2,Wait(25)
exten => s,3,HangUp
exten => h,1,DeadAGI(callback.agi|SIP/1234/${CBEXTEN})

Sollte aber wahrscheinlich auch mit lokaler channel Variable statt einer globalvar gehen.

[Edit]
Wenn mehr als ein callback auf einmal ausgeführt wird/zu erwarten ist sollte man sowieso eher eine channel variable nehmen, einfach SetVar statt SetGlobalVar und Eintrag unter [globals] sparen.

Gruß,
Tin
 
danke, das klappt schon ganz gut.

Ich habe den callback-context noch
in ein Macro gepackt, so daß ich jetzt
nur

exten => _XHandyNr,1,Macro(callback,SIP/012345/${EXTEN})

ausführen brauche.

Gruß
britzelfix
 
Man könnte dem Callfile auch ein Erzeugungsdatum in der Zukunft geben (Asterisk sollte es zu der Zeit dann ausführen) oder im Callfile einfach die Option für eine Wiederholung des Rufes reinsetzen. Dann geht es auch.
 
Hi
also ich mache das auch direkt im Anrufcontext.
Zuerst ein Wait(1)
dann ein System(cp xxxx.call nach ..../outgoing)
und danach ein Hangup()

Die Callfiles habe ich vorher erstellt - da ich callback nur auf fest definierten nummern erlaube. durch das hangup() ist mein Handy sofort wieder erreichbar. ansonsten sind noch 3 retry´s konfiguriert...

cu
thorsten gehrig
 
britzelfix schrieb:
[callback]
exten => s,1,Ringing
exten => s,2,Wait(25)
exten => s,3,HangUp
exten => h,1,DeadAGI(callback.agi|SIP/1234/HandyNr)

Das hangup wird dennoch erst wirklich NACH dem AgiScript-Return durcheführt.
Denn genau da liegt derzeit mein Problem mit meinem CallbackScript.
Denn der User hört leider kein Auflegen, sondern "nichts"...

Laut Debug ist dies auch korrekt, da das callback.agi ein paar Sekunden wartet, dann das erstellte Callfile verschiebt und zurückkehrt.
Und erst DANN wird das Hangup abgeschlossen und im Tel kommt das "tuten"...
 
Hmm... Mitlerweil glaub ich das ich unrecht hab und es eigentlich funzen müsste...
Scheinbar liegt das problem, dass mein Client(Handy) kein Aufleg-Signal bekommt woanders:

Code:
-- Executing Hangup("SIP/49xxxxxxxxx-f5af", "") in new stack
== Spawn extension (callback-withoutcallid, t, 3) exited non-zero on 'SIP/49xxxxxxxxx-f5af'

jemand Ahnung?
 
@Flash

Ehrlich gesagt ich weiß nicht. DeadAgi agiert wenn eine der 2 Seiten
aufgelegt hat. Ich habe es verwendet, weil mein Handy etwas lahm
reagiert wenn die Gegenseite auflegt.
Also habe ich * angerufen, 1-2 Klingeln lassen, dann am Handy aufgelegt.
* hat garnicht erst abgenommen, reagiert aber auf das Auflegen
der Gegenseite und versucht nicht mehr ein Gespräch aufzubauen,
sondern löst beide Channel auf und vorher oder nachher wird das
script ausgeführt, welches den Rückruf initiert.

Gruß
britzelfix
 
Natürlich funktioniert an sich alles, da ich ja auch auflege nach 1-2 Sekunden und das callback.agi eh 10Sekunden wartet und dann die Channels eh aufgelöst sind und der Rückruf funzt...

Aber jemand anders, der nun auf ein auflegen bzw. abweisen der Gegenstelle (der CallbackServer) wartet, wartet ewig und bekommt dann wohl den Callback garnicht mit, da dieser ein Besetzt bekommt...

Das ist ärgerlich und ich will nun herausbekommen, ob das Auflegen Asterisk-Seitig nicht funzt, oder woran obiger Fehler liegen könnte...
 
hi
ich würde dann das verhalten des callbackscripts verändern....
ich schiebe das callfile direkt in den outgoing ordner - und habe trotzdem auf meinem mobiltelefon einige sekunden zwischen besetztzeichen und dem rückruf.
und im zweifelsfall kommt halt erst der 2. versuch durch - dafür hat man ja die einstellung der rückrufversuche....

gruß
Thorsten Gehrig
 
ach aufs einfachste kommt man nicht... *betriebsblind*

natürlich hast du recht und ich hab die 10sekunden warten aus dem callback.agi rausgenommen...
somit schliesst das DeadAgi sofort ab und der Anrufer bekommt das Abweisen direkt...

nun hab ich einfach vor dem Dial in der Extension die sekunden warten lassen und gut ist ;-) Retry's sind da ja eh nicht nötig, da der User nach 10 Sekunden getute locker aufgelegt haben sollte :p
 
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.