[Frage] Anruflänge begrenzen...

kabelman

Neuer User
Mitglied seit
25 Feb 2007
Beiträge
28
Punkte für Reaktionen
0
Punkte
1
Hallo Leute... ich habe ein kleines Problem.
Ich habe einen kleinen Dialplan... das automatisch Anrufe tätigt.. der Hintergrund ist relativ unwichtig..
Mir geht es nun darum, dass ich jegliche Anrufe vom Asterisk aus, auf eine Dauer von z.B. 60 Min begrenzen möchte...
Gibt es dafür eine generelle Möglichkeit?

Habe nämlich das versucht:
exten => s,n,Set(TIMEOUT(absolute)=3600)

Leider klappt das nur bedingt... wenn irgendwas schief läuft... kA was, dann läuft das Gespräch auch einfach weiter :mad:

Wäre super, wenn jemand nen Tipp hätte ;)

danke schomal!

lg
Tobi
 
Es gibt zwei Timeout Flags für den Dial Befehl.

http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial schrieb:
L(x[:y][:z]): Limit the call to 'x' ms, warning when 'y' ms are left, repeated every 'z' ms) Only 'x' is required, 'y' and 'z' are optional.

S(n): Hangup the call n seconds AFTER called party picks up.
 
Danke... ich hätte wohl noch ergänzen sollen, dass der Anruf über ein callfile getätigt wird... Ein Dial() ist also garnicht vorhanden...
Gibt es hierbei auch eine Möglichkeit?

danke..
 
Ja, das Call-File auf einen Local-Channel schicken und dort das Dial mit Timeout ausführen.
 
Ich habe dazu leider nichts gefunden... kannst du mir dazu vielleicht ein paar Tipps bzw. Beispiele zeigen?
danke dir ;)
 
Hmm... danke erstmal... aber da gibts bei mir Fehler :(
kann ich in dem context dann nach der "exten=>_X.,1,Dial" Zeile normal mit "exten=>s,n,Answer" usw. weitermachen?
 
Äh ja, könntest Du, nur halt mit s,1 und nicht mit s,n. Aber am restlichen Aufbau ändert sich eigentlich nichts, sowohl extensions.conf als auch Call-File bleiben ansonsten unverändert.
 
ahh ok jetzt gehts! danke dir ;)

Aber... S(ms) oder doch sekunden?
Habe jetzt mal S(20) versucht... da bricht aber nichts ab :(

edit:
Ah ok... hatte noch ein exten => s,n,Set(TIMEOUT(absolute)=3300) im context...
Das scheint das L und S aufzuheben....
 
Zuletzt bearbeitet:
Kleiner Tipp, für alle die es interessiert.
Die Funktion S() bzw. L() läuft nicht stabil und darauf ist kein Verlass!
Eine kleine Unstimmigkeit im Callfile o.ä. reicht aus, dass der Anruf nicht nach der angegebenen Zeit abbricht!
 
Nicht parat...
Aber wenn ich heute Abend zuhause bin, werde ich das ganze mal laufen lassen.
Wenn wieder ein Fehler auftritt, werde ich mal meine Scripte + Log hochladen..

Ist wirklich unschön die Sache... da ich einen SIP Anbieter habe, bei dessen Festnetzflat ein Limit von 1 Std. besteht. Anrufe die eine Sekunde länger sind, werden komplett sekundengenau abgerechnet... :(


///

Also hier erstmal die entsprechende Extension:
Code:
[newautocall]
exten => _X.,1,Dial(SIP/${EXTEN}@${ltg},,L(3300000))
exten => s,1,Answer
exten => s,n,Set(TIMEOUT(absolute)=3300)
exten => s,n,Wait(3)
exten => s,n,SendDTMF(${pin})
exten => s,n,NoOp(Leitung:${ltg})
exten => s,n,NoOp(Position:${nr})
exten => s,n,NoOp(Nummer:${numnow})
exten => s,n,Set(i=1)
exten => s,n,While($[${i} < 80])
exten => s,n,NoOp(Runde:${i})
exten => s,n,Background(1minute)
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,EndWhile()
exten => s,n,Hangup()

exten => h,1,System(/etc/asterisk/neu.sh ${ltg} ${nr}+1)

;exten => t,1,System(/etc/asterisk/neu.sh ${ltg} ${nr}+1)
exten => T,1,System(/etc/asterisk/neu.sh ${ltg} ${nr}+1)

und hier noch die shell datei:

Code:
ltg=$1
declare -i nummer=$2

anummern=( 
0466xxx 
0570xxx 
0712xxx
usw.
)

apins=( 
9xxx 
5xxx
6xxx 
usw.
)

declare -i nummer_neu=${#anummern[*]}

echo 'MaxRetries: 5' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'RetryTime: 10' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'WaitTime: 30' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Context: newautocall' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Extension: s' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Priority: 1' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Set: nr='$nummer >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Set: ltg='$ltg >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call

echo 'Set: numnow='${anummern[$nummer]} >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
#
#if [$nummer -gt 8]
#then echo 'Set: numnow=1' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
#else echo 'Set: numnow='${anummern[$nummer]} >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
#
echo 'Set: pin='${apins[$nummer]} >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
echo 'Channel: LOCAL/'${anummern[$nummer]}'@newautocall' >> /var/spool/asterisk/tempcall/neuerAnruf$ltg.call

touch -d "10 seconds" /var/spool/asterisk/tempcall/neuerAnruf$ltg.call
mv /var/spool/asterisk/tempcall/neuerAnruf$ltg.call /var/spool/asterisk/outgoing/

Das Script läuft jetzt erstmal... sobald Fehler auftreten schreibe ich sie noch hier hin.

Bisher jedoch nichts bis auf:
WARNING[24392] res_rtp_asterisk.c: RTP Read too short


danke ;)
 
Zuletzt bearbeitet:
Also wie es der teufel will... heute kommt natürlich kein Fehler... wenn das mal immer so wäre :(

Aber eine andere Sache...
Kann mir jemand einen Tipp für die T bzw. h extension geben?

Wenn eine dieser beiden ausgelöst wird, möchte ich ein shell script ausführen, welches ein neues callfile erstellt.
Wie ich mir das gedacht habe, seht ihr oben im code...
das Problem ist nur, dass der Channel scheinbar noch besetzt ist...
Ich habe es auch schon so probiert:
Code:
exten => h,1,Wait(5)
exten => h,2,System(/etc/asterisk/neu.sh ${ltg} ${nr}+1)

exten => T,1,Wait(5)
exten => T,2,Hangup()

Aber das funktioniert auch nicht...

Würde mich freuen ;)
 
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.