Status einer externen App in mAirlist verarbeiten

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

1 Like

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. :wink:

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 :phone: wird :coffee: zubereitet? :heart_eyes:

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

2 Likes

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

3 Likes

Hallo allerseits,

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.

Schöne Grüße

Martin