Script ausführen bei eingehenden Anrufen?

Status
Für weitere Antworten geschlossen.
monotek schrieb:
funzt das ganze nur mit ner fritz box oder kann man auch nen grandstream device überwachen?
sicher nciht :roll:
wie siehts mit nem asterisk server aus?
Zu Grandstream-Adapter kann ich nichts sagen, aber bei Asterisk kann man per Definition Skripte ausführen lassen, wenn bestimmte Ereignisse (z.B. Anrufe) eintreten.
 
@crusader
Hi ich hab grad auf der Suche nach einer Möglichkeit bestimmte QoS Regeln auf meinem Linux Router zu starten dein Script
#! /bin/sh
# Signalisierung ankommender Anrufe auf Fritz!Box
#
logtype=
logline=
calltype="IncomingCall:"
#
while true
do
read logtype logline
if [ "$logtype" = "$calltype" ]; then
echo $logline
fi
done
gefunden
Un dann kam mir die Idee das is ja mit wget ein CGI Script laden könnte was die QoS Einstellungen bei einem eingehenden Telefonat läd.
Gut es läd sie zwar dummer weise auch bei nicht VoIP telefonaten aber na ja hab keine andere Lösung gefunden wie man es machen könnte das sie nur bei VoIP Telefonaten geladen werden.
Nun hab ich nur noch das Problem das ich ein zweites CGI Script laden muss das nach Ende des Telefonats die QoS Regeln wieder löscht.
Lässt sich das auch noch irgendwie ähnlich diesem Script realisieren und weist du vielleicht wie ?
Und noch was wie sieht es bei dem Script nach einem Reboot der Fritz Box ATA aus ?
Muss ich es dann mit der debug.cfg laden lassen ?
einfach so mit /pfadzumscript/Scriptmane <telfifo
?
Ich hoffe du oder jemand anderes kann mir weiter helfen :)
Bin nämlich langsam am verzweifeln :cry:
 
Bin nämlich langsam am verzweifeln
OK, das muß natürlich nicht sein.
Versuch's mal hiermit:
Code:
#!/bin/sh

QoS=false
while read line
do
	case $line in
		IncomingCall*)
			MSISDN=`echo $line | sed 's/^.*caller: .\(.*\). called:.*/\1/'`
			CALLED=`echo $line | sed 's/^.*called: .\(.*\)".*/\1/'`
			if  [ `expr "$CALLED" : SIP` -eq 3 ]
			then
				wget "Juhuu Router! Schalte jetzt QoS ein!"
				QoS=true
			fi
			;;
		*Disconnected*)
			if [ "$QoS" = true ]
			then
				wget "Router? OK, Du kannst das QoS-Dingsda wieder ausschalten"
				Qos=false
			fi
			;;
	esac
done
Mußt du natürlich noch die wirklichen wget-Adressen eintragen, mit denen deine Router-Skripts aufgerufen werden.
Wenn's klappt, reden wir noch mal über das Thema: 'Skript nach reboot automatisch starten'

Viel Erfolg!

crusader
 
Hi super vielen Dank das du mir weiter hilfst :)
Das neue Script muss ich dann genau so einbauen wie das erste von dir oder ?
 
Si.
script nach /var/tmp laden
ausführbar machen (chmod)
(Tip: Falls du eine mod-FW hast, kannst du mit 'myget QoS.sh IP-Adresse' das ganze über tftp erledigen)
killall telefon
telefon | /var/tmp/QoS.sh

Nu mal so: Die QoS-Regel springt mit diesem Script natürlich nur bei eingehenden VoIP-Anrufen an, nicht bei ausgehenden...

crusader
 
hm das es nur bei eingehenden Gesprächen die QoS Regeln läd ist dann nur eine halbe Lösung :-/ das hatte ich so nicht bedacht.

Aber da fällt mir noch was ein, das Script liest ja wenn ich es richtig verstehe die Ausgaben von "telefon" aus und kann dazu Aktionen (wget) ausführen.
würde das nicht auch nach dem gleichen Prinzip für "voipd" gehen ?
Dann würden die QoS Regeln auch nur bei VoIP telefonaten gestartet....
Wenn das Script die Ausgabe: Request: INVITE
der voipd nutzt um QoS zu starten und Request: BYE, Request: Chancel, disconnected gibt ja verschiedene Ausgaben zum Ende eines Telefonats....
um es wieder zu beenden müsste das doch gehen oder lieg ich da so falsch ?
Damit müssten die Regeln dann doch auch bei ein und ausgehenden Telefonaten geladen werden oder ?
 
würde das nicht auch nach dem gleichen Prinzip für "voipd" gehen ?
Ja, voipd wäre da wohl die bessere Wahl.

Die voipd-Ausgaben kannst du ganz einfach auf den Router rüberschaufeln, indem du auf der FBF
'syslogd -R RouterIP:port' eingibst.

Wenn ich das richtig sehe, ist dein Router doch eine Linux-Maschine, oder ?
Dann läßt sich das Ganze dort mit
'netcat -l -u -p Port' empfangen (mit root-Rechten).

Muß man dann natürlich noch parsen...

crusader
 
Hi ja mein Router ist ein IPCOP
netcat dafür zu compilieren dürfte nicht das Problem sein.
Aber wie wie werte ich das was mir voipd rüber schickt auf dem Router so aus das ich aufgrund bestimmter Wörter wie INVITE bestimmte Scripte starten kann ?
Hab leider (noch) nicht so viel Ahnung vom Linux :-/
Und noch eine Frage wenn die gesammt Ausgabe der Box an den Router geschickt wird, schickt der die dann auch noch dahin wenn ich mal mit Telnet verbinde ? oder bekomm ich dann Probleme ?
Frage nur weil bei Telnet immer das da steht :
"Console Ausgaben auf dieses Terminal umgelenkt"
Ansonsten vielen Dank das du mir weiter hilfst :)
 
Hi ja mein Router ist ein IPCOP
Nie gehört. Aber wenn Linux drin ist...
Und noch eine Frage wenn die gesammt Ausgabe der Box an den Router geschickt wird, schickt der die dann auch noch dahin wenn ich mal mit Telnet verbinde ? oder bekomm ich dann Probleme ?
Das ist kein Problem. Es werden halt nur die syslog-Ausgaben der Box auf die IP geschickt statt auf die Konsole.
Aber wie wie werte ich das was mir voipd rüber schickt auf dem Router so aus das ich aufgrund bestimmter Wörter wie INVITE bestimmte Scripte starten kann ?
Wollte mir sowieso mal nen kleines script zur Darstellung des voip-Status auf dem PC schreiben. Könnte man dann leicht für deine Bedürfnisse anpassen.
Poste ich dann hier, wenn's fertig ist.

crusader
 
Hi IPCop ist eine wie ich finde sehr gute Router Distribution die vorallem alle möglichen Modems unterstützt
http://www.ipcop.org/ musste mal testen :)
Na dann warte ich mal in freudiger Erwartung auf dein Script :)
Ich hoffe mal es dauert nicht zu lange *gg* weis ja nicht wie viel arbeit man in so ein Script stecken muss bzw. wie groß es ist....
 
TomCat05 schrieb:
Ich hoffe mal es dauert nicht zu lange
Na gut, wenn's so eilig ist, dann erstmal die Quick&Dirty-Lösung:
Code:
#!/bin/sh

while read line
do
        case $line in
                "voipd: call "*established*)
                        echo "Juhuu Router! Schalte jetzt QoS ein!"
                        ;;
                "voipd: call "*terminated*) 
                        echo "Router? OK, Du kannst das QoS-Dingsda wieder ausschalten"
                        ;;
        esac
done

Zum Ausprobieren:

Script als Datei QoS.sh auf /var/tmp anlegen und ausführbar machen.

Dann Script aktivieren:
Code:
cd /var/tmp
mkfifo voiplog
voipd -s
voipd -f 2> voiplog &
./QoS.sh < voiplog &

Wenn's klappt, die echo-Zeilen durch die richtigen wget-Zeilen ersetzen.

Gruß
crusader
 
Hallo, also funktionieren tut es ich bekomme die echo Ausgaben vielen Dank !!! :)
hab jetzt aber noch ein problem davor konnte ich mit voipd -R alle Accounts registrieren, das geht jetzt nicht mehr ich bekomme die Meldung: voipd: not running weist du was ich eingeben muss damit voipd -R funktioniert ?
und ich hab noch ein weiteres Problem vielleicht hast du ja auch eine Lösung dafür, ich hab mir ein CGI Script gemacht das ein Shell Script läd in dem die QoS Einstellungen stehen. das Problem ist nur, irgendwie bekomme ich es nicht hin das das Script als root läuft ich bekomme von Apache immer die Meldung in der Errorlog "ptables v1.2.11: can't initialize iptables table `mangle': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
" :-/
Weist du was ich da machen kann ?
 
davor konnte ich mit voipd -R alle Accounts registrieren, das geht jetzt nicht mehr ich bekomme die Meldung: voipd: not running weist du was ich eingeben muss damit voipd -R funktioniert ?
Das liegt daran, daß voipd jetzt im foreground-Modus läuft (Paramater -f), im normalen Modus kriegt man nämlich die Fehlerausgaben nicht auf die Fifo geleitet.

Also entweder zwangsweises Neuregistrieren (keine Ahnung, wozu man das braucht) oder
QoS-Regeln im Router umschalten (auch keine Ahnung, wozu man das braucht).

Bei ip-tables muß ich passen. Vielleicht mal jemanden im "Linux Software Router"-Board fragen.

crusader
 
Also das zwangsweise Neuregistrieren brauche ich weil das ATA es nicht selbst macht. Mann muss erst jeden einzelnen VoIP Account einmal anwählen damit er Registriert ist. Wenn ich jetzt voipd -f 2> voiplog & eingebe ist voipd gestartet aber es sind wieder alle Accounts nicht Registriert :-/ wenn es möglich wäre voipd -f 2> voiplog & so zu Starten und gleichzeitig alle Accounts zu Segistrieren würde das ja reichen.
Das mit den QoS Regeln brauche ich weil ich für VoIP bei meiner kleinen Leitung (512/128) die Bandbreite fest reservieren muss so das sie auch kein Anderer nutzen kann. Wenn ich es nicht mache hab ich immer wieder Störungen beim Telefonieren und das nervt ziemich :(
 
Und so : 'voipd -f -R 2> voiplog &' ?
 
Hi.
Bei abgehenden Gesprächen über voip gibt der telefon folgende Zeile aus:
Code:
Connect_h: Slot[1] Ctrl(3) MSN() CPN()                       <- Festnetz FON2
* state change slot 1 ID 0: D_ConnectPending Reason: 0*
AB_LED: B1 On
ID 0 BChan (ext) 0x44
* state change slot 1 ID 0: D_ConnectPending Reason: 0*
* state change slot 1 ID 0: D_DisconnectPending Reason: 0*
12.06.05 15:14     0s Slot: -1                     outgoing                     
* state change slot 1 ID 0: Disconnected Reason: 3490*
Disconnectreason: 3490
AB_LED: B1 Off
Connect_h: Slot[1] Ctrl(4) MSN(0) CPN()                      <- *2# gewählt, voip
Nach meiner Erfahrung ist Ctrl 2 oder 3 für Festnetz und 4 oder 5 für voip.
Vielleicht kannst du das dann doch über den telefon machen.
Dann hast du den voipd noch frei für's -R...

MfG Oliver
 
@crusader
Hatte ich auch schon versucht, aber dann geht garnix mehr...
voipd will nicht mehr Registrieren auch nicht wenn ich per Telefon raus wähle....


Hm bei abgehenden Gesprächen könnte man Ctrl(4) nehmen um ws zu aktivieren aber was könnte man zum deaktivieren nehmen ?
und wie sieht es bei eingehenden Gesprächen aus ?
 
OK, langsam verstehe ich, was du mit 'verzweifeln' gemeint hast.

Aber einen hab ich noch:
QoS.sh:
Code:
#!/bin/sh

while true
do
        read line
        case $line in
                *established*)
                        echo "Juhuu Router! Schalte jetzt QoS ein!"
                        ;;
                *terminated*)
                        echo "Router? OK, Du kannst das QoS-Dingsda wieder ausschalten"
                        ;;
        esac
done

Aktivieren mit:
Code:
cd /var/tmp
mkfifo mysyslog
syslogd -O /var/tmp/mysyslog
./QoS.sh < /var/tmp/mysyslog &


crusader
 
Das funktioniert leider nicht richtig erstmal scheint es ziemlich viele Recourcen zu fressen und dann gibt er manschmal beim Beginn eines Telefonats beide Echos hintereinander aus....
Jetzt aber mal ganz zurück zu netcat usw... würde das nicht auch nach dem Prinzip gehen wenn man halt bei netcat die Ausgaben die von der Boy kommen in ein Fifo leitet und es dort direkt auf dem Router dann erkennt und QoS startet und die jeweiligen Aktionen durchführt...

Wenn du mir sagen kannst wie ich das mit netcat machen kann ab bessten mit einem Beispiel kann ich mir die entsprechenden "codes" wie established usw. auch selbst suchen gehen.....
 
Jetzt aber mal ganz zurück zu netcat usw... würde das nicht auch nach dem Prinzip gehen wenn man halt bei netcat die Ausgaben die von der Boy kommen in ein Fifo leitet und es dort direkt auf dem Router dann erkennt und QoS startet und die jeweiligen Aktionen durchführt...
Hab ich mir angeguckt. Das Problem ist, daß bei syslogd -R ... keine Zeilentrenner übertragen werden. Jede Zeile wird halt in einem UDP-Paket verpackt.
Netcat kann aber keine UDP-Pakete trennen, deshalb erscheinen alle Meldungen auf der Host-Seite hintereinander.
Mit netcat gehts also nicht. Alternative, mit der man paketweise empfangen kann, hab ich noch nicht gefunden.

Also erst mal *aufgeb*

crusader
 
Status
Für weitere Antworten geschlossen.
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.