Die Behandlung von Disconnect Modes in AG-VIP SQL

Martin Richter
21.06.2019 10:55
Beschreibung: 

Immer wieder kommt es zu Problemen, wenn Tapi-Treiber einen falschen Disconnect Mode (Art und Weise der Trennung) zurückgeben.

Zur Erklärung:

Der Disconnect Mode dient dazu um zu ermitteln warum eine Verbindung nicht hergestellt werden konnte oder warum eine Verbindung beendet wurde. Der Disconnect Mode ist eine zusätzliche Angabe zu dem Callstate (Anrufstatus) LINECALLSTATE_DISCONNECT angegeben. In einem Tapi-Trace findet sich diese Information in solch einer Zeile wieder:
09:55:16:33 Tapi::CTapiControl::TapiCallState hCall=0x000100de, dwCallstate=DISCONNECTED, dwCallStateDetail=NORMAL
Im allgemeinen wird der Disconnect Mode beim aktiven Beenden eines Telefonates, also durch Auflegen des Anwenders oder bei einem Timeout ignoriert. Dennoch sollte der Tapi-Treiber hier LINEDISCONNECTMODE_NORMAL returnieren.
Wichtig wird der Disconnect Mode beim Verbindungsaufbau, denn hier hilft er zwischen 4 Möglichkeiten beim Nichtzustandekommen eines Telefonats zu unterscheiden.

  1. Besetzt
  2. Nicht erreicht (vorübergehend nicht erreichbar)
  3. Falsche Telefonnummer
  4. Fataler Fehler bei der Anwahl (TK-Anlage gestört und ähnliches)

Diese entsprechenden Zustände werden durch die folgenden Modi angezeigt, alle Modi werden hier mit ihrem hexadezimalen Zahlenwert aufgeführt:

LINEDISCONNECTMODE_NORM 0x00000001
LINEDISCONNECTMODE_UNKNOWN 0x00000002
LINEDISCONNECTMODE_REJECT 0x00000004
LINEDISCONNECTMODE_PICKUP 0x00000008
LINEDISCONNECTMODE_FORWARDED 0x00000010
LINEDISCONNECTMODE_BUSY 0x00000020
LINEDISCONNECTMODE_NOANSWER 0x00000040
LINEDISCONNECTMODE_BADADDRESS 0x00000080
LINEDISCONNECTMODE_UNREACHABLE 0x00000100
LINEDISCONNECTMODE_CONGESTION 0x00000200
LINEDISCONNECTMODE_INCOMPATIBLE 0x00000400
LINEDISCONNECTMODE_UNAVAIL 0x00000800
LINEDISCONNECTMODE_NODIALTONE 0x00001000
LINEDISCONNECTMODE_NUMBERCHANGED 0x00002000
LINEDISCONNECTMODE_OUTOFORDER 0x00004000
LINEDISCONNECTMODE_TEMPFAILURE 0x00008000
LINEDISCONNECTMODE_QOSUNAVAIL 0x00010000
LINEDISCONNECTMODE_BLOCKED 0x00020000
LINEDISCONNECTMODE_DONOTDISTURB 0x00040000
LINEDISCONNECTMODE_CANCELLED 0x00080000
Im Normalfall werden diese Werte so interpretiert:
  1. Besetzt
    LINEDISCONNECTMODE_NORMAL, LINEDISCONNECTMODE_BUSY
  2. Nicht erreicht
    LINEDISCONNECTMODE_REJECT, LINEDISCONNECTMODE_NOANSWER, LINEDISCONNECTMODE_UNREACHABLE, LINEDISCONNECTMODE_DONOTDISTURB, LINEDISCONNECTMODE_OUTOFORDER
  3. Falsche Telefonnummer
    LINEDISCONNECTMODE_NUMBERCHANGED, LINEDISCONNECTMODE_BADADDRESS, LINEDISCONNECTMODE_INCOMPATIBLE
  4. Fataler Fehler:
    LINEDISCONNECTMODE_UNKNOWN, LINEDISCONNECTMODE_PICKUP, LINEDISCONNECTMODE_FORWARDED, LINEDISCONNECTMODE_CONGESTION, LINEDISCONNECTMODE_UNAVAIL, LINEDISCONNECTMODE_NODIALTONE, LINEDISCONNECTMODE_TEMPFAILURE, LINEDISCONNECTMODE_QOSUNAVAIL, LINEDISCONNECTMODE_BLOCKED, LINEDISCONNECTMODE_CANCELLED

Es gibt nun leider Tapi-Treiber, die sich nicht an die Vorgaben halten, und bei einem Besetzt z.B. den LINEDISCONNECTMODE_UNKNOWN returnieren. Dies würde allerdings von AG-VIP SQL als fataler Fehler interpretiert. Die Folge ist, dass AG-VIP SQL eine Fehlermeldung ausgibt und die weitere Anwahl in dem Projekt unterbindet. Dies geschieht damit nicht durch einen Fehler in der TK-Anlage das Projekt weiter läuft. AG-VIP SQL ist in der Lage bis zu 20 Telefonate pro Sekunde anzuwählen. Würde ein Fehler also immer als Besetzt interpretiert werden würde das Projekt weiterlaufen und in wenigen Minuten wären alle Telefonate als Besetzt erkannt worden und evtl. auf einen späteren Zeitpunkt verschoben. AG-VIP SQL muss deshalb die fatalen Fehler mit einem Stop der automatischen Anwahl quittieren.

Welche Zuordnung aktuelle gilt wird bei Programmstart im Tapi-Trace verzeichnet (ab Hotfix 1.07.009 Build 249):

09:19:08:03 Tapi::CTapiControl::SetDisconnectModesBusy 0x00000021, NORMAL,BUSY 
09:19:08:03 Tapi::CTapiControl::SetDisconnectModesNoConnect 0x00044144, REJECT,NOANSWER,UNREACHABLE,OUTOFORDER,DONOTDISTURB
09:19:08:03 Tapi::CTapiControl::SetDisconnectModesWrongNumber 0x00002480, BADADDRESS,INCOMPATIBLE,NUMBERCHANGED
09:19:08:04 Tapi::CTapiControl::SetDisconnectModesError 0x000b9a1a, UNKNOWN,PICKUP,FORWARDED,CONGESTION,UNAVAIL,NODIALTONE,TEMPFAILURE,QOSUNAVAIL,BLOCKED,CANCELLED
09:19:08:04 Tapi::CTapiControl::CheckDisconnectModesSetting Covered=0x000fffff

Um solche Fehler korrigieren zu können ist es möglich, diese Standardwerte für Besetzt, nicht erreicht, falsche Telefonnummer und fataler Fehler zu überschreiben bzw. andere Vorgaben zu machen. Dies ist möglich ab dem Hotfix 1.07.009 Build 249.

Anpassung über dir AGVIP.INI oder AGOvderdialTAPI.INI

Über die AGVIP.INI bzw. AGOvderdialTAPI.INI im Programmverzeichnis ist es möglich für die zentrale Netzwerkinstallation bzw. den Overdialserver eine Änderung vorzunehmen. Das nachfolgende Beispiel zeigt wie der LINEDISCONECTMODE_UNKNOWN als Besetzt interpretiert und nicht als Fehler.
Der entsprechende Abschnitt [TAPI] muss evtl. noch in der INI Datei angelegt werden. Ist der Abschnitt nicht vorhanden, können Sie diesen untenstehenden Textblock direkt an das Ende der Datei kopieren. 

[TAPI]
DisconnectMode_Busy=0x00000023
DisconnectMode_NoConnect=0x00044144
DisconnectMode_WrongNumber=0x00002480
DisconnectMode_Error=0x000b9a18
Anpassung über die Registry

Über die registry kann eine entsprechende Änderung Arbeitsplatz bezogen durchgeführt werden.

Dazu können in der Registry im Zweig:
32bit Betriebssystem:
HKEY_LOCAL_MACHINE\SOFTWARE\Grutzeck Software\AG-VIP SQL\Tapi\DisconnectModes

64bit Betriebssystem:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Grutzeck Software\AG-VIP SQL\Tapi\DisconnectModes

Die entsprechende hexadezimalen Werte überschrieben werden.

Eine entsprechende Reg-Datei findet sich nachfolgend. In diesem 32bit Beispiel wird der LINEDISCONECTMODE_UNKNOWN als Besetzt interpretiert und nicht als Fehler.

REGEDIT4 
[HKEY_LOCAL_MACHINE\SOFTWARE\Grutzeck Software\AG-VIP SQL\Tapi\DisconnectModes] 
"Busy"=dword:00000023
"NoConnect"=dword:00044144
"WrongNumber"=dword:00002480
"Error"=dword:000b9a18

Speichern Sie den markierten Textblock als .REG Datei ab und Doppelklicken Sie die Datei auf den Rechnern, an denen die Änderung durchgeführt werden soll.

Entsprechend zeigt der Trace die Veränderung an:
11:45:29:53 Tapi::CTapiControl::LoadDisconnectModesSetting 
11:45:29:53 Tapi::CTapiControl::SetDisconnectModesBusy 0x00000023, NORMAL,UNKNOWN,BUSY
11:45:29:53 Tapi::CTapiControl::SetDisconnectModesNoConnect 0x00044144, REJECT,NOANSWER,UNREACHABLE,OUTOFORDER,DONOTDISTURB
11:45:29:53 Tapi::CTapiControl::SetDisconnectModesWrongNumber 0x00002480, BADADDRESS,INCOMPATIBLE,NUMBERCHANGED
11:45:29:53 Tapi::CTapiControl::SetDisconnectModesError 0x000b9a18, PICKUP,FORWARDED,CONGESTION,UNAVAIL,NODIALTONE,TEMPFAILURE,QOSUNAVAIL,BLOCKED,CANCELLED

Zur Sicherheit, dass die Einstellungen, bzw. Änderungen korrekt sind, wird zusätzlich eine Kontrollzeile mit ausgegeben, die im Normalfall so aussieht:

11:45:29:55 Tapi::CTapiControl::CheckDisconnectModesSetting Covered=0x000fffff

Bei Fehlern zeigt diese Zeile Probleme mit einer Doppel- oder Falschbelegung an.

Wir bitten darum, dass Änderungen an diesen Einstellungen nur in enger Absprache mit der Hotline durchgeführt werden, da hier Fehler fatale Folgen haben können. Auf eine detaillierte Beschreibung wie diese Werte aufgebaut werden müssen, wird deshalb an dieser Stelle verzichtet.

 

Tags: Disconnect, INI, TAPI
Durchschnittliche Bewertung: 0 (0 Abstimmungen)

Kommentieren nicht möglich