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.
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”
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.
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
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.
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?
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.
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.
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
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.
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.
auf der Suche nach einer Lösung bin ich auf dieses länger zurückliegende Thema gestoßen.
Das zuletzt gepostete Script habe ich noch nicht getestet, denn bei mir ist die Situation etwas anders: ich habe Phonerlite auf einem zweiten PC installiert, der im selben Netzwerk läuft wie der mAirList-PC.
Die Frage ist, ob man das Script so umstricken könnte, dass die Signalisierung in mAirList auch unter diesen Voraussetzungen funktioniert? Also, dass PhonerLite auf den mAirList-PC einwirkt und dort einen Button zum Blinken bringt?
Nächstes Ziel wäre dann, die Anruf-Annahme bzw. Abweisung mit einem mAirList Button wieder zum Phoner-PC zu senden, damit dort die Verbindung hergestellt bzw. getrennt wird.