TAPI-Fehler finden und Anwahlprobleme erkennen

~ 0 min
27.02.2023 08:17
Problem:

Oft ist unklar, warum die Anwahl nicht funktioniert oder die Telefoniesoftware in der ein- oder anderen Weise reagiert.

Lösung:

Um dem Problem auf die Spur zu kommen, sollte ein TAPI/Telefon-Trace erzeugt werden. Das ist ein Protokoll der Kommunikation zwischen TAPI-Treiber (Der vom Hersteller der Telefonanlage kommt) und der Telefoniesoftware auf der anderen Seite.

Vorgehensweise: TAPI-Log aktivieren

AG-VIP SQL ist per Standard so eingestellt, dass immer ein Trace erzeugt wird.
Der Trace wird automatisch im temporären Verzeichnis des Benutzers gespeichert. Der Trace beginnt bei Programmstart und wird geschlossen, wenn das Programm beendet wird. Jeder erneute Programmstart überschreibt den alten Trace.

Gehen Sie also wie folgt vor

  1. Starten Sie AG-VIP SQL
  2. Führen Sie nun die Telefonate, die Probleme machen, z.B. Anwahl einer falschen Telefon-Nr. wird nicht erkannt.
  3. Beenden Sie AG-VIP SQL.
  4. Wählen Sie aus dem Windows-Menü START, AUSFÜHREN und geben %tmp% + ENTER-Taste ein.
  5. Der Windows-Explorer öffnet sich mit dem temporären Benutzer-Verzeichnis. Hier finden Sie die Datei AGVIP_Phone.LOG (vor der Version 2.0 hieß die Datei AGVIP_TAPI.log). Diese Datei können Sie mit jedem Texteditor öffnen. Die erste Spalte zeigt dabei die Uhrzeit in Millisekunden genau an.

Wenn Sie also einen Fehler protokolliert haben beenden Sie AG-VIP SQL und sichern Sie den Trace, bevor Sie mit der Arbeit fortfahren.

Seit der Version 2.02.002 werden die letzten 10 Logs in dem entsprechenden Verzeichnis gespeichert unter den Namen AGVIP_Phonen.LOG (n=1-9).
Sichern Sie alle Log-Dateien und merken sich die genaue Uhrzeit des Fehlers. Senden Sie diese Dateien bei Bedarf an den zuständigen Support.

Beispiel für einen verbundenen erfolgreichen ausgehenden Anruf:
11:18:05:34 Tapi::CTapiCall::CTapiCall
11:18:05:34 Tapi::CTapiCall::PrepareDialing Inp:"06181/97010"
11:18:05:34 Tapi::CTapiCall::PrepareDialing Pre:"+49 (6181) 97010"
11:18:05:35 Tapi::CTapiCall::PrepareDialing Out:"T00618197010"
11:18:05:35 Tapi::CTapiCall::MakeCall dwLine=9, dwAPIVersion=0x00020000
11:18:05:35 Tapi::CTapiControl::TapiEventThread dwMessage=LINE_REPLY, hDevice=0x00000000, dwParam1=0x000100ee, dwParam2=0x00000000, dwParam3=0x000100cc
11:18:05:35 Tapi::CTapiCall::MakeCall returns 0x000100ee 11:18:05:47 Tapi::CTapiControl::TapiCallState hCall=0x000100cc, dwCallstate=DIALTONE
11:18:05:47 Tapi::CTapiCall::GetCallInfo CalledID = "00618197010"
11:18:05:49 Tapi::CTapiControl::TapiCallState hCall=0x000100cc, dwCallstate=DIALING
11:18:15:65 Tapi::CTapiControl::TapiCallState hCall=0x000100cc, dwCallstate=CONNECTED
11:19:30:17 Tapi::CTapiControl::TapiCallState hCall=0x000100cc, dwCallstate=DISCONNECTED, dwCallStateDetail=0x00000000
11:19:30:18 Tapi::CTapiControl::TapiCallState hCall=0x000100cc, dwCallstate=IDLE
11:19:30:21 Tapi::CTapiControl::TapiEventThread dwMessage=LINE_REPLY, hDevice=0x00000000, dwParam1=0x000100bb, dwParam2=0x00000000, dwParam3=0x00000000
11:19:44:39 Tapi::CTapiCall::~CTapiCall


Der CALLSTATE gibt den aktuellen Leitungsstatus an. Am Callstate wird der aktuelle Zustand der Verbindung erkannt.

Dabei sind lt. TAPI-Dokumentation folgende CALLSTATES definiert

Beachten Sie bitte, dass nicht alle TSPs alle Callstates unterstützen bzw. melden.

  • LINECALLSTATE_ACCEPTED = 0x00000004
    The call was in the offering state and has been accepted. This indicates to other, monitoring, applications that the current owner application has claimed responsibility for answering the call. In ISDN, the accepted state is entered when the called-party equipment sends a message to the switch indicating that it is willing to present the call to the called person. This has the side effect of alerting (ringing) the users at both ends of the call. An incoming call can always be immediately answered without first being separately accepted.
  • LINECALLSTATE_BUSY = 0x00000040
    The call is receiving a busy tone. A busy tone indicates that the call cannot be completed. This occurs if either a circuit (trunk) or the remote party's station are in use.
  • LINECALLSTATE_CONFERENCED = 0x00000800
    The call is a member of a conference call and is logically in the connected state.
  • LINECALLSTATE_CONNECTED = 0x00000100
    The call has been established and the connection is made. Information is able to flow over the call between the originating address and the destination address.
  • LINECALLSTATE_DIALING = 0x0000010
    The originator is dialing digits on the call. The dialed digits are collected by the switch. Note that neither lineGenerateDigits nor TSPI_lineGenerateDigits will place the line into the dialing state.
  • LINECALLSTATE_DIALTONE = 0x00000008
    The call is receiving a dial tone from the switch. This means that the switch is ready to receive a dialed number.
  • LINECALLSTATE_DISCONNECTED = 0x00004000
    The remote party has disconnected from the call.
  • LINECALLSTATE_IDLE = 0x00000001
    The call exists but has not been connected. No activity exists on the call. This means that no call is currently active. A call can never transition out of the idle state.
  • LINECALLSTATE_OFFERING = 0x000000002
    The call is being offered to the station, signaling the arrival of a new call. The offering state is not the same as causing a phone or computer to ring. In some environments, a call in the offering state does not ring the user until the switch instructs the line to ring. For example this state is in use when an incoming call appears on several station sets but only the primary address rings. The instruction to ring does not affect any call states.
  • LINECALLSTATE_ONHOLD = 0x00000400
    The call is on hold by the switch. This frees the physical line. This allows another call to use the line.
  • LINECALLSTATE_ONHOLDPENDCONF = 0x00001000
    The call is currently on hold while it is being added to a conference.
  • LINECALLSTATE_ONHOLDPENDTRANSFER = 0x00002000
    The call is currently on hold awaiting transfer to another number.
  • LINECALLSTATE_PROCEEDING = 0x00000200
    Dialing has completed and the call is proceeding through the switch or telephone network. This occurs after dialing is complete and before the call reaches the dialed party, as indicated by ringback, busy, or answer.
  • LINECALLSTATE_RINGBACK = 0x00000020
    The station to be called has been reached, and the destination's switch is generating a ring tone back to the originator. A ringback means that the destination address is being alerted to the call.
  • LINECALLSTATE_SPECIALINFO = 0x00000080
    The call is receiving a special information signal that precedes a prerecorded announcement indicating why a call cannot be completed.
  • LINECALLSTATE_UNKNOWN = 0x00008000
    The call exists, but its state is currently unknown. This may be the result of poor call progress detection by the service provider. A call state message with the call state set to unknown may also be generated to inform the TAPI DLL about a new call at a time when the actual call state of the call is not exactly known
Was ist signifikant, wenn es zu keiner Verbindung kommt? 

Kommt es zu keiner Verbindung, dann werden im Trace die so genannten Disconnect Reasons wichtig. Ein Disconnect Reason gibt an, warum eine Verbindung nicht zustande kam oder abgebrochen wurde.

Beachten Sie bitte, dass nicht alle TSPs alle Disconnect Reasons unterstützen bzw. melden. Besonders problemtisch wird dies, wenn der TSP für die Anwahl einer falschen Nummer (LINEDISCONNECTMODE_BADADDRESS) einfach Besetzt returniert LINEDISCONNECTMODE_BUSY)

  • LINEDISCONNECTMODE_BADADDRESS
    The destination address is invalid.
  • LINEDISCONNECTMODE_BLOCKED
    The call could not be connected because calls from the origination address are not being accepted at the destination address. This differs from LINEDISCONNECTMODE_REJECT in that blocking is implemented in the network (a passive reject) while a rejection is implemented in the destination equipment (an active reject). The blocking can be due to a specific exclusion of the origination address, or because the destination accepts calls from only a selected set of origination address (closed user group). (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_BLOCKED
    is appropriate as a blacklisted response. For example, a modem has received an answer, gone more than six seconds without detecting Ringback, failed to connect a defined number of times, determines that the phone number is not valid to call, and issues a 'blacklisted' response.
  • LINEDISCONNECTMODE_BUSY
    The remote user's station is busy.
  • LINEDISCONNECTMODE_CANCELLED
    The call was cancelled. (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_CONGESTION
    The network is congested.
  • LINEDISCONNECTMODE_DONOTDISTURB
    The call could not be connected because the destination has invoked the Do Not Disturb feature. (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_FORWARDED
    The call was forwarded by the switch.
  • LINEDISCONNECTMODE_INCOMPATIBLE
    The remote user's station equipment is incompatible with the type of call requested.
  • LINEDISCONNECTMODE_NOANSWER
    The remote user's station does not answer.
  • LINEDISCONNECTMODE_NODIALTONE
    A dial tone was not detected within a service-provider defined timeout, at a point during dialing when one was expected (such as at a "W" in the dialable string). This can also occur without a service-provider-defined timeout period or without a value specified in the dwWaitForDialTone member of the LINEDIALPARAMS structure. (TAPI versions 1.4 and later)
  • LINEDISCONNECTMODE_NORMAL
    This is a normal disconnect request by the remote party. The call was terminated normally.
  • LINEDISCONNECTMODE_NUMBERCHANGED
    The call could not be connected because the destination number has been changed, but automatic redirection to the new number is not provided. (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_OUTOFORDER
    The call could not be connected or was disconnected because the destination device is out of order (hardware failure). (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_PICKUP
    The call was picked up from elsewhere.
  • LINEDISCONNECTMODE_QOSUNAVAIL
    The call could not be connected or was disconnected because the minimum quality of service could not be obtained or sustained. This differs from LINEDISCONNECTMODE_INCOMPATIBLE in that the lack of resources may be a temporary condition at the destination. (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_REJECT
    The remote user has rejected the call.
  • LINEDISCONNECTMODE_TEMPFAILURE
    The call could not be connected or was disconnected because of a temporary failure in the network; the call can be reattempted later and is expected to eventually complete. (TAPI versions 2.0 and later)
  • LINEDISCONNECTMODE_TEMPFAILURE
    is appropriate as a delayed response. For example, a modem getting a busy signal or equivalent too many times in a particular time period concludes that the number should not be called again until a defined time has elapsed and issues a 'delayed' response.
  • LINEDISCONNECTMODE_UNAVAIL
    The reason for the disconnect is unavailable and will not become known later.
  • LINEDISCONNECTMODE_UNKNOWN
    The reason for the disconnect request is unknown but may become known later.
  • LINEDISCONNECTMODE_UNREACHABLE
    The remote user could not be reached
Wie behandelt AG-VIP SQL die unterschiedlichen Disconnect Modes?

Kommt es zu keiner Verbindung muss, AG-VIP SQL versuchen, dass Telefonat entsprechend zu behandeln. Warum es nicht zu einer Verbindung kam, wird anhand des Disconnect Mods bestimmt. AG-VIP SQL unterscheidet hier in 4 Kategorien: Besetzt, Keine Verbindung, falsche Nummer und Fehler.

Bei einem fatalen Fehler wird der Workfow sdofort abgebrochen und das Ticket gilt als nicht bearbeitet. Dies ist eine Vorsichtsmassnahme, damit nicht durch einen Fehler in der TK-Anlage z.B. alle Tickets als nicht verbunden eingestuft werden.

AG-VIP SQL behandelt die entsprechenden Dicsonnect-Modes Fälle wie folgt:

Behandlung als BESETZT:

  • NORMAL
  • BUSY

Behandlung als KEINE VERBINDUNG:

  • REJECT
  • NOANSWER
  • UNREACHABLE
  • DONOTDISTURB
  • OUTOFORDER

Behandlung als TELEFON-NR FALSCH:

  • NUMBERCHANGED
  • BADADDRESS
  • INCOMPATIBLE

Behandlung als finaler Fehler, der zum Projektstopp führt: 

  • UNKNOWN
  • PICKUP
  • FORWARDED
  • CONGESTION
  • UNAVAIL
  • NODIALTONE
  • TEMPFAILURE
  • QOSUNAVAIL
  • BLOCKED
  • CANCELLED
Quellen:
Durchschnittliche Bewertung 4 (2 Abstimmungen)

Kommentieren nicht möglich