Callmonitor - Listeners anpassen

Unimatrix

Neuer User
Mitglied seit
23 Sep 2006
Beiträge
30
Punkte für Reaktionen
0
Punkte
0
Hallo,
nachdem ich jetzt erfolgreich ein freetz image mit callmonitor auf der box habe, habe ich eine Frage zu diesem.

Also ich habe hier daheim zwei 800er Dreamboxen und möchte, dass dort eingehende Anrufe angezeigt werden. Soweit klappt dieses auch wunderbar, jedoch möchte ich noch zwei kleine Schönheitsfehler beseitigen.

Also meine Einträge bei Listenser sieht folgendermaßen aus:

in:request ^ ^ dream2message 192.168.178.4 "${SOURCE_NAME} // ${SOURCE_ADDRESS} // Tel: ${SOURCE} ruft an."

Jetzt zwei Fragen/Wünsche:
1. Wenn die eingehende Nummer nicht im Telefonbuch oder in der Onlinesuche gefunden werden kann, wird mir bei SOURCE_NAME die Telefonnummer ohne die Null am Anfang angezeigt. Ich möchte jetzt, dass mir bei Telefonnummer, die unterdrückt sind oder nicht im Telefonbuch stehen, an dieser Stelle "Unbekannt" angezeigt wird.

2. In dem Popup auf dem Receiver, steht alles in einer Zeile. Kann mir jemand sagen, wie man Zeilenumbrüche einfügen kann?


Gruß,
Unimatrix
 
Vielen Dank! Damit wäre Punkt 2 schon mal erledigt.

Nun zu Punkt 1. Es Muss doch mittels regulärer Ausdrücke möglich sein, dass wenn ${SOURCE} leer ist, der Ausdruck "Unbekannt" ausgegeben wird.

Und genau so, sollte es doch möglich sein, wenn ${SOURCE_NAME} mit ${SOURCE} identisch ist, dass der Ausdruck "Unbekannt" ausgegeben wird.
 
Und wo willst du diese "regulären Ausdrücke" reinpacken? Der einfachste Weg wäre anstatt dream2message oder dboxmessage was eigenes zu verwenden. Mit Shell-Mitteln ist es relativ leicht zu realisieren. Und wenn deine Sachen fruchten, dann übernimmt Andreas es vielleicht in die beiden Skripte.

MfG
 
Hi,
Ich möchte jetzt, dass mir bei Telefonnummer, die unterdrückt sind oder nicht im Telefonbuch stehen, an dieser Stelle "Unbekannt" angezeigt wird.
du kannst entweder in der Listener-Zeile weiterarbeiten (dort wird es aber schnell zu eng) oder folgenden Mechanismus benutzen, um die Standardnachricht zu verändern: http://trac.freetz.org/wiki/packages/callmonitor/adapt_messages

Die zu erstellende Funktion heißt default_dream2message.

Um dein Ziel zu erreichen, kannst du den gesamten Funktionsumfang der Shell nutzen, z.B.
Code:
echo ${SOURCE:-Unbekannt}
if [ -z "$SOURCE" ]; then
 ...
fi

Viele Grüße,

Andreas
 
Hallo zusammen, bin kurz vor dem AbdreHen!! :
Ich habe keine X-Box, Dreambox, Blackbox oder sowas, ich hab nur ne Fritzbox 7050 Fw 14.04.33freetz-1.2 (AVM + Freetz Mod)
diese ist an eine ISDN-Anlage angeschlossen (aber nur 1 Leitung) und daran angeschlossen:
FON1 = Haupt-Telefon, RJ12-Anschluss
FON2 = Fax, RJ12-Anschluss
FON3 = Telefon, RJ12-Anschluss
soviel zur Hardware....

Das Problem:
Wie, verdammtnochmal, erstelle ich einen ganz stinknormalen Quelltest für den Callmonitor dass es heisst:
"Wenn ein Anruf eingeht dessen ID mit der Nummer 0,1,2,3,4,5,6,7,8 oder 9 anfängt dann durchstellen auf FON1 (aber nicht FON2!), wenn das fehlschlägt dann durchstellen auf FON3 wenn Anrufer-ID mit der Nummer 0-9 anfängt"
"Wenn ein Anruf eingeht dessen ID nicht mit der Nummer 0,1,2,3,4,5,6,7,8 oder 9 anfängt dann direkt durchstellen auf FON2 (aber nicht auf FON1 oder FON3), wenn das fehlschlägt dann durchstellen auf FON1"
"Faxnummer xxxxxxx immer durchstellen auf FON2 (ohne if's)"
"Faxnummer yyyyyyy immer durchstellen auf FON2 (ohne if's)"
"Ausgehende Anrufe immer alle zulassen"
___________________________________________
Zur Info:
ich habe den Text
in:request SOURCE:'^0|1|2|3|4|5|6|7|8|9' ^ Ext:0
in:request SOURCE:'!^0|1|2|3|4|5|6|7|8|9' ^ Ext:1

ohne if etc... aber selbst das geht nicht, denn:

Testanruf von "" an "043517549657" [in:request]:

[0:1] parameter SOURCE='' does NOT match pattern 'SOURCE:'!^0|1|2|3|4|5|6|7|8|9''
[0:1] FAILED


SOURCE Quelle (Anrufer) und !^=nicht Nummer = 0|1|2|3|4|5|6|7|8|9 bedeutet doch auch wenn keine ID angegeben ist?!?
Ich komm da nicht mehr hinterher... Kann jemand bitte bitte bitte mir schreiben wie der Quelltext für das o.g. Szenario lauten müsste?
Viel Text ist es ja nicht ... WENN ES DENN MAL GEHEN WÜRDE!
Sorry aber meine Finger tuhen extrem weh jetzt und bin total übermüdet, da ich seit (!) gestern mittag daran saß VMplayer zu installieren.... eine Version die Läuft auf Lappy, dann das Freetz Image und solange rumfummeln bis die Fw nicht zu gross ist, dann der verdammte Datentransfer zw. Linux und Windows etc etc etc....

Ganz dickes Dankeschön an euch schonmal!
 
Moin

Ich glaube nicht das der Callmonitor so komplexe Entscheidungen treffen kann.
Ich glaube aber, dass ein Aufruf eines Skriptes aus dem Callmonitor mit entsprechenden Parametern das kann.

So ungefähr...
Code:
in:request ^ ^ sh name_des_skripts ${SOURCE} ${DEST}
...dann kann das Skript $1 (SOURCE) und $2 (DEST) auswerten und entscheiden was weiter passiert.
 
hmmmm... also Variablen durch Parameter ersetzt dann so in etwa? oder wie kann ich mir das vorstellen?
zur Info noch: gestern habe ich erst von solchen Skripten erfahren und mich so gut es geht da eingelesen in etwa 100.000 Seiten (da ging es aber nur um Daten, ich brauch es ja aber nur für Telefonate)
deswegen bitte nicht sauer sein falls ich mal blöde Fragen stelle, ist noch Neuland alles für mich, :noidea: aber da ich Jahrelang HTML und JavaScripts geschrieben habe, ist mir die Vorgehensweise und die "Logik" in den Skripten schon eher etwas vertraut...

also ich versteh das so, dass ich jetzt dem Skript "sage" mit
in:request ^ ^ sh name_des_skripts ${SOURCE} ${DEST}
eingehend alle Nummern an alle Nummern an Skript "" halten = genaue Anrufernummer an genauen Telefonport
bei Nummer 0-9 = Telefon (FON1), bei NICHT 0-9 = Fax (FON2)
also Beispiel

in:request ^ ^ sh FAX ${SOURCE} ${DEST}
SOURCE='!^0|1|2|3|4|5|6|7|8|9' DEST='Ext:1'
SOURCE='^0|1|2|3|4|5|6|7|8|9' DEST='Ext:0'


stimmt das so?
 
In dem Skript, welches bei Anruf ${SOURCE} und ${DEST} übergeben wird, kannst du frei entscheiden was passieren soll.

Angenommen ${SOURCE} ist 0123456789 und ${DEST} ist 0987654321....
Dann kannst du im Skript if then else, switch und weiss Gott was benutzen um alles Mögliche anzustellen.

name_des_skripts.sh
Code:
#! /bin/sh
ERLAUBTE_NUMMER = "0123456789"

if [ "$1" = "$ERLAUBTE_NUMMER" ]; then
echo "Erlaubte Nummer ruft an..."
....noch mehr Code...
else
echo "Unerlaubte Nummer ruft an..."
....noch mehr Code...
fi
...minimalistisches Beispiel.
 
Okay vielen Dank schonmal für die Mühe mit dem &%/§%... Quellcode :)
Habe ihn gleich mal angepasst an dem Fall "Nummer 0-9" durchstellen, sonst nach Fax (FON2)
Also so:
in:request ^ ^ sh TELNR ${SOURCE} ${DEST}


#! /bin/sh
TELNR = "0123456789"

if [ "$1" = "$TELNR" ]; then
echo "{SOURCE} ruft an"
in:connect ${SOURCE} ^ DEST:'EXT:0'

else
in:connect ${SOURCE} ^ DEST:'EXT:1'
fi


Dann gespeichert und es kam diese Meldung:
Saving callmonitor/listeners ... done.
5: Action is missing
event: TELNR
source: =
dest: "0123456789"
action:
5: Invalid event specification
event: TELNR
source: =
dest: "0123456789"
action:
7: Invalid event specification
event: if
source: [
dest: "$1"
action: = "$TELNR" ]; then
7: egrep: bad regex '[': Unmatched [ or [^ in source pattern
event: if
source: [
dest: "$1"
action: = "$TELNR" ]; then
8: Invalid event specification
event: echo
source: "{SOURCE}
dest: ruft
action: an"
8: egrep: bad regex '"{SOURCE}': Invalid content of {} in source pattern
event: echo
source: "{SOURCE}
dest: ruft
action: an"
9: egrep: bad regex '${SOURCE}': Invalid content of {} in source pattern
event: in:connect
source: ${SOURCE}
dest: ^
action: DEST:'EXT:0'
11: Source pattern is missing
event: else
source:
dest:
action:
11: Invalid event specification
event: else
source:
dest:
action:
12: egrep: bad regex '${SOURCE}': Invalid content of {} in source pattern
event: in:connect
source: ${SOURCE}
dest: ^
action: DEST:'EXT:1'
13: Source pattern is missing
event: fi
source:
dest:
action:
13: Invalid event specification
event: fi
source:
dest:
action:
Please correct the errors.


Das ist doch echt zum heulen :mad: irgendwie hasst mich das Skript ...

Hab dann mal nur den blanken Text eingegeben (wie vom Beispiel und natürlich "...noch mehr Codes" rausgenommen erstmal)
#! /bin/sh
ERLAUBTE_NUMMER = "0123456789"

if [ "$1" = "$ERLAUBTE_NUMMER" ]; then
echo "Erlaubte Nummer ruft an..."

else
echo "Unerlaubte Nummer ruft an..."

fi


Meldung:
Saving callmonitor/listeners ... done.
2: Action is missing
event: ERLAUBTE_NUMMER
source: =
dest: "0123456789"
action:
2: Invalid event specification
event: ERLAUBTE_NUMMER
source: =
dest: "0123456789"
action:
4: Invalid event specification
event: if
source: [
dest: "$1"
action: = "$ERLAUBTE_NUMMER" ]; then
4: egrep: bad regex '[': Unmatched [ or [^ in source pattern
event: if
source: [
dest: "$1"
action: = "$ERLAUBTE_NUMMER" ]; then
5: Invalid event specification
event: echo
source: "Erlaubte
dest: Nummer
action: ruft an..."
7: Source pattern is missing
event: else
source:
dest:
action:
7: Invalid event specification
event: else
source:
dest:
action:
8: Invalid event specification
event: echo
source: "Unerlaubte
dest: Nummer
action: ruft an..."
10: Source pattern is missing
event: fi
source:
dest:
action:
10: Invalid event specification
event: fi
source:
dest:
action:
Please correct the errors.


http://freetz.org/wiki/packages/callmonitor -> bringt mich auch nicht wirklich weiter da da die Befehle stehen aber nichts wirklich hilfreichen über Events und Syntax....
callmonitor.jpg
 
Zuletzt bearbeitet:
Moin

Na, du bist ja lustig.
Du kannst das Skript nicht in die Callmonitor-Regeln quetschen, es ist vielmehr ein externer Aufruf dieses Skrpts aus den Regeln heraus.

Schritt für Schritt...

1. Callmonitorregel erstellen: in:request ^ ^ sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}
2. Callmonitorregel speichern: klick auf Übernehmen
3. Skript in /var/tmp erstellen:
Code:
# cd /var/tmp
# vi callmonitor.sh
#! /bin/sh
echo "Übergebene Parameter: "$@
(speichern: [Esc][B]:x[/B][RETURN])
...sodaß mit cat /var/tmp/callmonitor.sh folgender Code ausgegeben wird:
Code:
#! /bin/sh
echo "Übergebene Parameter: "$@
...dann die Konsole offen lassen und dich mal anrufen.
 
Zuletzt bearbeitet:
Achso okay :-D dann hab ich das ja komplett falsch verstanden. Also dann mal: Callmonitor > Regeln >
in:request ^ ^ sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}
... und übernehmen!

Ausführen... cmd:
Telnet fritz.box
login
cd /var/tmp
vi callmonitor.sh
es öffnet sich eine seite mit "~" in jeder Zeile
echo "Übergebene Parameter: "$@

cm.jpg
TESTANRUF --- Ausgabe:
including /usr/lib/callmonitor/actions.d/config.sh
including /usr/lib/callmonitor/actions.d/dboxlcd.sh
including /usr/lib/callmonitor/actions.d/dial.sh
including /usr/lib/callmonitor/actions.d/mail.sh
including /usr/lib/callmonitor/actions.d/messages.sh
including /usr/lib/callmonitor/actions.d/musicpal.sh
including /usr/lib/callmonitor/actions.d/rc.sh
including /usr/lib/callmonitor/actions.d/roku.sh
including /usr/lib/callmonitor/actions.d/samsung.sh
>>> in:request ID=1 TIMESTAMP=24.09.13 00:47 SOURCE= DEST=043517549657 EXT=4 DURATION=16 PROVIDER=
[0] event detected:
EVENT=in:request
SOURCE=''
DEST='043517549657'
[0+] detailed event data:
SOURCE_DISP=''
SOURCE_ENTRY=''
SOURCE_NAME=''
SOURCE_ADDRESS=''
DEST_DISP='43517549657'
DEST_ENTRY=''
DEST_NAME=''
DEST_ADDRESS=''
ID=1
EXT=4
DURATION=16
TIMESTAMP='24.09.13 00:47'
PROVIDER=
[0:0] processing rule 'in:request' '^' '^' 'sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}'
[0:0] event 'in:request' matches pattern 'in:request'
[0:0] parameter SOURCE='' matches pattern '^'
[0:0] parameter DEST='043517549657' matches pattern '^'
[0:0] SUCCEEDED
[0:0] ACTION: 'sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}'
sh: can't open '/var/tmp/callmonitor.sh'
[0:0] listener failed with an exit status of 2

Als Laie würde ich mal sagen, irgendwie hat das nicht mit dem speichern funktioniert via TelNet... Übrigens: Ich habe auch RudiShell!! Damit kann man doch auch einiges machen oder? Wie mach ich das mit Rudishell? Weil da bin ich GANZ GANZ vorsichtig, damit kann man sich auch falsch angewendet die ganze Fritzbox zertrümmern...
rs.jpg
aber DANKE :) DANKE schonmal, wir sind schon ein ganzes stück weiter irgendwie :)
 
Zuletzt bearbeitet:
Moinsen

Der Callmonitor meckert also, weil er das Skript nicht findet oder öffnen kann.
Stelle sicher, dass das also funktioniert.

Ein Funktionstest wäre, das Skript mal so aufzurufen wie es Callmonitor auch tut:
Code:
# sh /var/tmp/callmonitor.sh unbekannt 043517549657
...gibt das wieder eine Fehlermeldung, dann überschreibe/erstelle callmonitor.sh mal mit...
Code:
echo 'echo "Uebergebene Parameter: "\$@' > /var/tmp/callmonitor.sh
...und probier es nocheinmal mit dem Test und wenn der klappt mit einen Anruf.
 
Danke erstmal für die Antworten und die fachmännischen Ratschläge, bin auf diesem Gebiet echt ein totaler Anfänger, bitte bitte helft mir..
habe ich mal gemacht per Telnet den letzten Code.
Habe einen Testanruf durchgeführt:
Testanruf von "" an "043517546957" [in:request]:
including /usr/lib/callmonitor/actions.d/config.sh
including /usr/lib/callmonitor/actions.d/dboxlcd.sh
including /usr/lib/callmonitor/actions.d/dial.sh
including /usr/lib/callmonitor/actions.d/mail.sh
including /usr/lib/callmonitor/actions.d/messages.sh
including /usr/lib/callmonitor/actions.d/musicpal.sh
including /usr/lib/callmonitor/actions.d/rc.sh
including /usr/lib/callmonitor/actions.d/roku.sh
including /usr/lib/callmonitor/actions.d/samsung.sh
>>> in:request ID=1 TIMESTAMP=04.10.13 02:14 SOURCE= DEST=043517546957 EXT=4 DURATION=16 PROVIDER=
[0] event detected:
EVENT=in:request
SOURCE=''
DEST='043517546957'
[0+] detailed event data:
SOURCE_DISP=''
SOURCE_ENTRY=''
SOURCE_NAME=''
SOURCE_ADDRESS=''
DEST_DISP='43517546957'
DEST_ENTRY=''
DEST_NAME=''
DEST_ADDRESS=''
ID=1
EXT=4
DURATION=16
TIMESTAMP='04.10.13 02:14'
PROVIDER=
[0:0] processing rule 'in:request' '^' '^' 'sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}'
[0:0] event 'in:request' matches pattern 'in:request'
[0:0] parameter SOURCE='' matches pattern '^'
[0:0] parameter DEST='043517546957' matches pattern '^'
[0:0] SUCCEEDED
[0:0] ACTION: 'sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}'
Uebergebene Parameter: $@


Auch per Handy angerufen:
mit Nummer: geht durch (auf Leitung 1 = FON1 Fritzbox, FON2 und FON3 = stumm)
ohne Nummer: Handy sagt "besetzt"

Ziel: Unterdrückte Anrufe (ohne Nummer, CLIR) sollen NUR auf FON2 (Fritzbox 7050) ausgegeben werden.
Alle Anderen Anrufe (alle mit allen Nummern) sollen NUR auf FON1 ausgegeben werden


Konfiguration:
Fritzbox Firmware:
Telefonie -> Telefoniegeräte ->
FON 1 (analog) Festnetz = Festnetz: 043517546957; individuelle Einstellung = individuelle Einstellung = immer klingeln
FON 2 (analog) Telefax = auf alle Rufnummern reagieren; individuelle Einstellung = Einstellungen der Nachtschaltung gelten
FON 3 (analog) Festnetz = auf alle Rufnummern reagieren; individuelle Einstellung = Einstellungen der Nachtschaltung gelten

Nachtschaltung -> Klingelsperre aktiv

Rufsperre -> Rufart: "einkommende Rufe" ; Rufnummer: ""

Freetz Firmware Fritzbox 7050:
callmonitor running
Zu überwachende Box: 169.254.1.1 Port: 1012
Regeln (Listeners): in:request ^ ^ sh /var/tmp/callmonitor.sh ${SOURCE} ${DEST}


und das Skript existiert jetzt so:
über DOS Telnet 169.254.1.1 Login...
root@fritz:var/mod/root#sh /var/tmp/callmonitor.sh unbekannt 043517656957 Enter
Ausgabe:
Uebergebene Parameter: $@
root@fritz:var/mod/root# ...

Callmonitor ebenfalls aktiviert vorher: Telefonruf #96*5*

Ist die Konfiguration der Einstellungen okay / richtig / akzeptabel?
Was kann ich noch versuchen / umstellen / umprogrammieren / testen?
danke schonmal für Antworten :) :eek:
 
Zuletzt bearbeitet:
Mahlzeit

Deswegen kommt eine unterdrückte Nummer bei dir nicht durch:
Rufsperre -> Rufart: "einkommende Rufe" ; Rufnummer: ""
Also wieder enfernen/deaktivieren.

Die generelle Umleitung aller Anrufe auf Fon2 erreichst du am einfachsten über eine RUL (Rufumleitung).
Alle Anrufe ohne Rufnummer an allle Telefone --> Zielrufnummer: 2 (ohne die **)

Wenn du das über den Callmonitor realisieren willst,
müssten erstmal alle Anrufe an Fon1 gehen,
dann getestest auf leeren String "" (unbekannte Rufnummer)
und mit dem telefonmodem auf Fon2 umgeleitet, bzw. transferiert.

Theoretisch, praktisch ist mir eine RUL lieber.
 
Zuletzt bearbeitet:
Moin,

etwas Grundsätzliches zum Callmonitor: Der Callmonitor heißt "Monitor", weil er ausschließlich Anrufe überwachen/beobachten kann (und von den Anrufen unabhängige Aktionen auslösen kann). Er kann aber nicht in die Anrufe eingreifen, sie umleiten, weiterleiten, beantworten, beenden oder Ähnliches.

Dein Ziel wirst du also mit dem Callmonitor nicht erreichen können:
Ziel: Unterdrückte Anrufe (ohne Nummer, CLIR) sollen NUR auf FON2 (Fritzbox 7050) ausgegeben werden.
Alle Anderen Anrufe (alle mit allen Nummern) sollen NUR auf FON1 ausgegeben werden

Nichts für ungut; der Callmonitor ist einfach das falsche Werkzeug für den Job.

Viele Grüße,

Andreas
 
@ buehmann: Ohje, das klingt logisch sonst hiesse es ja Callmanager und nicht Callmonitor.. Aber dachte es gäbe da Möglichkeiten weil die Fritzbox auf Linux läuft und voll programmierbar ist usw... Gibt es für die Fritzbox so etwas wie ein "Callmanager" der sowas kann (Unterdrückte Anrufe (ohne Nummer, CLIR) sollen NUR auf FON2 (Fritzbox 7050) ausgegeben werden.
Alle Anderen Anrufe (alle mit allen Nummern) sollen NUR auf FON1 ausgegeben werden)
??

@ koyaanisqatsi:
- Rufsperre deaktiviert, Callmonitor deaktiviert.
RUL eingerichtet (mit "2" und mit "##2" probiert) - unterdrückt angerufen: besetzt --- mit Nummer angerufen: frei :mad:
Wieso ist die Rufumleitung so bekloppt und sperrt die Anrufe?? Kann man diese einzelne Funktion auch irgendwo in der Firmware "cracken" dass man "**2" eingeben kann oder dass er irgendwie nach **2 RUL macht??

2.pngr.pngs.png

Also früher liefen die Telefone eingehend über Leitung A (Klingelsignal) und ausgehend Leitung B (Wahlsignal) etc...
geht ein Anruf ein -> Leitung A (eingehend), RUL sperrt Port 1+3 Leitung A und gibt bei Port 2 frei. oder:
geht ein Anruf ein -> Leitung A, RUL nimmt den Anruf von der Leitung A nach Leitung B (ausgehend) auf Port 2

Wieso bekommt die Box das nicht hin??? :crazy:

PS: kann die Firmware selber zusammenstellen über Linux und Freetz, falls das nötig ist für ein Programm das sowas kann. + Danke für eure Hilfe, das ganze macht mich fast schon wahnsinnig! :lamer:
 
Zuletzt bearbeitet:
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.