Programmierung > Delphi > FRITZ!Box Call Monitor

Anwendung der Unit

Vorbereitungen

unit unit1;
 
uses
  ... uCallMonitor, ...;
 
type
  TForm1 = class(TForm)
    ...
  private
    ...
    fCallMonitor : TCallMonitor;
  public
    ...
    procedure CallEvent(Sender: TObject; aCall: TCallEventData; aMsg: string);
  end;

In der Unit, in welcher die Nachrichten verarbeitet werden sollen, muss die Unit uCallMonitor eingebunden werden. Darüber hinaus werden eine Variable vom Typ TCallMonitor und eine Ereignisprocedure vom Typ TOnCallEvent benötigt.

Erstellen der Class

  fCallMonitor      := TCallMonitor.Create(Self.Handle);
  fCallMonitor.Host := '192.168.178.1';
//  fCallMonitor.Host := 'fritz.box'
  fCallMonitor.Port := 1012;
  fCallMonitor.OnCallEvent := CallEvent;
  if fCallMonitor.Connected
  then begin
    ...

Nach dem Erstellen der Class müssen als Host der Hostname oder die IP sowie der Port angegeben werden. Der Port muss an der Fritzbox freigeschaltet sein. Da auf die eingehenden Ereignisse reagiert werden soll, muss auch die Ereignisprocedure zugewiesen werden. Abschließend wird der Monitor verbunden.

Hinweis: Der Port wird an der Fritzbox über ein angeschlossenes Telefon mit dem Code #96*5* geöffnet und mit #96*4* wieder geschlossen.

Ereignisse

Es gibt vier Ereignisse: CALL, RING, CONNECT und DISCONNECT. CALL stellt einen ausgehenden und RING einen eingehenden Anruf dar. Wird die Verbindung aufgebaut, das heißt der Anruf angenommen, wird ein CONNECT ausgelöst, bei Trennung der Verbindung entsprechend ein DISCONNECT. Allerdings ist zu beachten, dass das DISCONNECT nicht sofort mit der Beendigung der Verbindung ausgelöst wird, sondern erst mit dem Auflegen des Telefons an der Fritzbox. So kann es passieren, dass ein RING vor einem DISCONNECT auftritt und das gerade aufgelegte Telefon nicht klingelt.

Der Ereignisprocedure werden die Ereignisse in einem Record und in einem String übergeben. In dem Record ist das Ereignis aufbereitet. Der String stellt die Nachricht im RAW-Format dar, zum Beispiel:

  25.02.11 15:26:12;RING;0;0170XXXXXX;XXXXX;SIP0;
  25.02.11 15:26:14;DISCONNECT;0;0;

Die Formate sind vom Ereignis abhängig:

  DatumZeit;CALL;VerbindungsID;Nebenstelle;GenutzteNummer;AngerufeneNummer;Protokoll;
  DatumZeit;RING;VerbindungsID;AnruferNr;AngerufeneNummer;Protokoll;
  DatumZeit;CONNECT;VerbindungsID;Nebenstelle;Nummer;
  DatumZeit;DISCONNECT;VerbindungsID;DauerInSekunden;

Der Record mit den aufbereiteten Daten ist wie folgt aufgebaut:

  type
    TCallEventData = record
      DateTime     : AnsiString;
      EventType    : Integer;
      ConnectionID : Integer;
      RemoteNumber : AnsiString;
      LocalNumber  : AnsiString;
      Extension    : AnsiString;
      Duration     : Integer;
    end;

Datum und Zeit (DateTime), Ereignistyp (EventType) und VerbindungsID (ConnectionID) sind immer angegeben. Die anderen Werte sind - wie oben bemerkt - vom Ereignis abhängig. Eine Verknüpfung muss im Programm vorgenommen werden.

Hinweis: In der Fritzbox lassen sich Rufsperren für ankommende und ausgehende Anrufe sowie eine Klingelsperre (Nachtschaltung) definieren. Ist eine Rufnummer für ankommende Anrufe gesperrt, bekommt der Anrufer die Textansage, dass der angerufende Teilnehmer vorübergehend nicht erreichbar ist und es wird das Ereignis DISCONNECT ausgelöst. Während der Klingelsperre erhalten alle Anrufer, welche nicht im Telefonbuch als wichtige Person gekennzeichnet sind, ein Besetztzeichen und es wird ebenfalls das Ereignis DISCONNECT ausgelöst.

Beenden des Callmonitors

  fCallMonitor.Destroy;