Hm ok, das wusste ich jetzt nicht, dann bliebe also die Frage, wie man in mAirlist eben diesen Trigger “abfängt” um ihn weiter verarbeiten zu können.
Also: Phoner soll beim eingehenden Anruf die Batchdatei 1.bat
starten. In dieser steht:
@echo off
set PFAD=C:\Pfad\zur\Datei\
set DATEI=ring.txt
set INHALT=1
echo %INHALT% > %PFAD%%DATEI%
Beim Abheben startet Phoner die Batchdatei 0.bat
. In dieser steht:
@echo off
set PFAD=C:\Pfad\zur\Datei\
set DATEI=ring.txt
set INHALT=0
echo %INHALT% > %PFAD%%DATEI%
In mAirList installiere folgendes Skript:
const
PATH = 'C:\Pfad\zur\Datei\';
FILENAME = 'ring.txt';
var
sl: TStringList;
procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(PATH + FILENAME);
if sl.Text = '1' then
begin
// do something;
end
else
begin
// do something else;
end;
finally
sl.Free;
end;
end;
begin
end.
Das Skript schaut jetzt sekündlich nach, was sich in der Datei ring.txt
tut. Ist der Inhalt 1
, geht ein Anruf ein, und es können Maßnahmen ergriffen werden.
Angerufene Grüße
TSD
So richtig scheint das noch nicht zu klappen.
So sieht das komplette Script zum Testen jetzt mal aus
const
PATH = 'D:\Test\';
FILENAME = 'ring.txt';
var
sl: TStringList;
procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(PATH + FILENAME);
if sl.Text = '1' then
begin
ExecuteCommand('PHONE BACKGROUNDCOLOR #00ff00');
end
else
begin
ExecuteCommand('PHONE BACKGROUNDCOLOR #ff0000');
end;
finally
sl.Free;
end;
end;
begin
end.
Er schreibt zwar bei Anruf eine 1 und bei abheben eine 0 rein, aber die “if else” Geschichte im Script lässt das ziemlich kalt.
Hmm, ich hatte
SystemLog(sl.Text);
zum Testen eingesetzt, was einwandfrei funktioniert …
Wie gesagt, er schreibt die 1 und die 0 in die ring.txt, aber laut dem Script soll ein einfacher statischer Text bei eingehenden Anrufen auf “grün” wechseln, beim Abheben auf rot. Und das meine ich mit “es funktioniert noch nicht so richtig”
Lg
Mag sein, aber das Skript funktioniert: Setze obige Zeile statt der beiden Kommentare ein.
Ja, hab ich unf soweit funktioniert es. Sagte ja, er schreibt die 1 und die 0 in die ring.txt.
Ich suche mal noch nach ner möglichen Fehlerquelle. Dir auf jeden Fall schon mal ganz großes Danke.
Lg
Hi @Tondose ,
der Befehl für das “VoIP-Connect Tool” muss da auch noch irgendwie untergebracht werden, da ja das Airlite auch reagieren soll. Theoretisch bräuchte man dann auch drei Skripte für mein Verständnis, da ja das Airlite auch bedient werden muss für incoming, connected und disconnected.
Mit Phoner selber kann man ja nur eine Datei pro Status ansprechen. Mairlist bräuchte theoretisch auch 3 Zustände.
Button normal grau -> kein Anruf oder Anruf beendet
Button grün oder gelb -> Anruf kommt rein
Button rot -> Anruf ist gerade aktiv
Ich hoffe, daß ich da keinen Denkfehler habe.
Abendliche Grüße
Nick
Aber Du könntest doch Phoner eine Batchdatei starten lassen, die ihrerseits wiederum drei weitere Batchdateien abfeuert.
Stimmt, das Tool müsste da dann auch mit rein und ja, es bedarf 3 Batch Dateien.
Hatte das Script schon entsprechend erweitert, aber Farben ändern sich dennoch nicht.
const
PATH = 'D:\Test\';
FILENAME = 'ring.txt';
var
sl: TStringList;
procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(PATH + FILENAME);
if sl.Text = '1' then
begin
SystemLog(sl.Text);
ExecuteCommand('PHONE BACKGROUNDCOLOR #00ff00');
end
else if sl.Text = '0' then
begin
SystemLog(sl.Text);
ExecuteCommand('PHONE BACKGROUNDCOLOR #ff0000');
end
else
begin
SystemLog(sl.Text);
ExecuteCommand('PHONE BACKGROUNDCOLOR #ffffff');
end;
finally
sl.Free;
end;
end;
begin
end.
Hi @Tondose,
Du meinst also alle 3 Zustände über eine Datei erfassen und dann über die Datei quasi den Zustand an Mairlist und das VoIP-Connect Tool weiterleiten?
Das wäre natürlich optimal. Ich weiß nur nicht wie das funktionieren soll, da ja leider die Batchdatei bei jeder Statusänderung neu aufgerufen wird und somit dann diese nicht weiss, welchen Status sie jetzt verarbeiten soll?
Abendliche Grüße
Nick
Nein, meine ich nicht. Mehr später.
[Anmerkung]
Lasst mal die Airlite-Kiste an der Stelle bitte außen vor, das haben wir schon in einem anderen Thread.
@deadpool2016xx hat das als extra Thread eröffnet - nicht zuletzt auf meine Bitte hin -, weil es um die Anzeige des Anrufs in mAirList ging. Das wiederum kann ganz unabhängig vom Airlite erfolgen.
Mir ging da so eine Idee von einem erweiterten Button “Anruf” im Kopf rum, und ich dachte, das Script könnte den Status “Klingeln” bzw. “Gespräch” von PhonerLite abgreifen und an den erweiterten Button übergeben.
Die Airlite-spezifischen Kopfschmerzen sollten weiterhin in dem anderen Thread behandelt werden, sonst wird’s chaotisch.
Gerüchteweise soll es hier noch Anwender mit anderen Pulten geben.
Phoner kann beliebig viele Batchdateien starten. Indem es z. B. bei Anruf die Datei Anruf.bat
lanciert, in der steht:
Airlite.bat
mAirList.bat
Kaffeemaschine.bat
…
usw. Was in den jeweiligen Batchdateien steht, kommt auf die jeweilige Anwendung an.
mAirList wiederum kann auch beliebig viele Zustände verarbeiten: Der Inhalt der Datei ring.txt
braucht ja keineswegs nur binär zu sein, sondern kann alles mögliche beinhalten. Da sind Deiner Phantasie keine Grenzen gesetzt.(Wie war das mit der Binärcodierung …?)
Die Schnittstelle ist also da. Den Rest macht Ihr schon.
Abendliche Grüße
TSD
Bei wird zubereitet?
Guten Morgen @Tondose,
ich habe jetzt einige Stunden hin und her probiert. @deadpool2016xx hat vollkommen recht, daß die Schleife nicht richtig funktioniert. Es wird permanent nur die letzte Anweisung ausgeführt als wenn alles andere nicht zutrifft.
Wenn ich als Beispiel für die letzte Anweisung die Farbe auf rot setze, dann wird der Hintergrund immer rot angezeigt. Egal welcher Status in der Textdatei eingetragen ist.
Wenn man für die Ersten Schleifen das Logging drin läßt
SystemLog(sl.Text);
und enfernt es aus der letzten Abfrage, dann bekommt man auch kein Logging mehr angezeigt.
In dem Moment, wo die Erste If…then los geht, springt das Skript gleich zur letzen Else-Schleife, um den Befehl auszuführen, als wenn alles andere nicht zutrifft.
Ich habe den Fehler nicht gefunden, aber um diese Uhrzeit gibt mein Kopf jetzt auch nichts mehr her.
Vielleicht kannst Du da ja noch einmal bitte drüber schauen.
Morgendliche Grüße
Nick
Guten Morgen. Offenbar ist sl.Text
, der gesamte Text des Files, noch mit irgendwelches Steuerzeichen garniert, die beim Vergleich in die Quere kommen. Wenn wir jedoch explizit das erste Zeichen auslesen, dan geht es. Ersetze die if
-Abfrage durch
if copy(sl.Text, 1, 1) = '1' then
Reparierte Grüße
TSD
Guten Morgen,
jawohl, jetzt funktioniert es genau so, wie es soll. Tausend und ein Danke dafür. Dann kann ich mich ja auch mal wieder an mein altes Projekt zurück begeben.
Schönen Sonntag euch.
Lg
Hi @Tondose,
vielen lieben Dank. Es hat super funktioniert. Ich habe das ganze auch in Verbindung mit dem Airlite hinbekommen und ich habe das ganze so erweitert, so daß der Button bei ankommendem Anruf blinkt und sich die Schriftfarbe zusätzlich ändert.
const
PATH = 'D:\Portable\PhonerLite\Airlite\';
FILENAME = 'mairlist_phone_status.txt';
var
sl: TStringList;
procedure UpdateButton;
begin
sl := TStringList.Create;
try
sl.LoadFromFile(PATH + FILENAME);
if copy(sl.Text, 1, 1) = '1' then
begin
ExecuteCommand('PHONERSTATUS FONTCOLOR #FF0000');
ExecuteCommand('PHONERSTATUS BACKGROUNDCOLOR #FF0000');
if trunc(now * 24 * 60 * 60 * 2) mod 2 = 0 then
ExecuteCommand('PHONERSTATUS BACKGROUNDCOLOR #FFFF00')
else
ExecuteCommand('PHONERSTATUS FONTCOLOR #FFFF00');
end
else if copy(sl.Text, 1, 1) = '2' then
begin
ExecuteCommand('PHONERSTATUS BACKGROUNDCOLOR #FFFF00');
ExecuteCommand('PHONERSTATUS FONTCOLOR #000000');
end
else
begin
ExecuteCommand('PHONERSTATUS BACKGROUNDCOLOR #FF0000');
ExecuteCommand('PHONERSTATUS FONTCOLOR #000000');
end;
finally
sl.Free;
end;
end;
procedure OnLoad;
begin
UpdateButton;
EnableTimer(500);
end;
procedure OnTimer;
begin
UpdateButton;
end;
begin
end.
So sehe ich jetzt in Mairlist wenn ein Anruf reinkommt, sehe am Airlite den Anruf auch signalisiert, kann über das Airlite die Anrufe steuern und Mairlist zeigt mir jeden Zustand (Incoming, Connected, Disconnected) über einen einzigen Button an.
Nachmittagliche Grüße
Nick