Home › Foren › Support für jAnrufmonitor 5.0 (Windows) › Support für jAnrufmonitor 5.0 (Windows, Version für TAPI-fähige Endgeräte) › TAPI Line auswählen / überwachen
- Dieses Thema hat 29 Antworten, 5 Teilnehmer, und wurde zuletzt am vor 8 Jahre, 7 Monate von Anonym aktualisiert.
-
AutorBeiträge
-
7. Mai 2014 um 14:49 #16525AnonymInaktiv
Nachricht verschoben zu „Version für Telefon-Anschluss (T-Net)“
Ich nutze schon seit PowerISDNMonitor-Zeit die Server/Client Software (über FritzBox CAPI).
Geniale Software…Leider musste ich die Telefon-Anlage umstellen auf einen Anlagenanschluss (Auerswald Commander Basic 2), wodurch der Fritz!Box-CAPI Zugriff entfällt und ich auf TAPI umsteigen muss.
Leider stehe ich jetzt auch in dieser uralten Stelle
2011 viewtopic.php?f=23&t=1626#p8998 (keine Regel / Filter möglich)
2008 viewtopic.php?f=9&t=339
Ich habe 24 Leitungen und wenn es klingelt werden soviele Nachrichten generiert wie Telefone klingeln.
Frage:
Ist als Workaround eventuell eine TAPI Line Auswahl auf unterer Ebene möglich (als dirty Hack)?viewtopic.php?f=27&t=794#p4650
@thilo.brandt wrote:momentan nimmt jAnrufmonitor immer alle verfügbaren TAPI-Leitungen zur Überwachung, d.h. kommt ein Anruf auf verschiedenen Leitung zum jAnrufmonitor, wird der Anruf mehrfach im Programm verarbeitet. Ich habe den Punkt schon auf meiner ToDo-Liste für zukünftige Versionen. Als Work-a-round könntest du derzeit lediglich eine Leitung aus deinen Windows-TAPI-Einstellungen entfernen.
Ich finde leider diese Einstellung nicht. Wie kann man einzelne Leitungen aus den Windows-TAPI-Einstellungen entfernen?
Danke,
Thomas
Info zu Auerswald-TAPI-Treiber:
Ich kann bestätigen, dass der aktuelle Auerswald Lan Tapi Treiber von jam nicht erkannt wird.
Ich musste auch einen alten Ositron Lan Tapi Treiber installierenviewtopic.php?f=27&t=1185#p6596
@Chuckyaliasj154 wrote:Beim Auerswald Lan Tapi Treiber wird dieser nicht mal von jam erkannt.
Bei dem Ositron Lan Tapi Treiber ist es anders. Dieser wird vom jam erkannt.12. Mai 2014 um 9:17 #27140AnonymInaktivHallo Thilo,
die TAPI-Line-Frage wurde hier wohl schon zu oft gestellt 🙂
Ich fragte nach einem Hack und da wollte ich „schnell mal“ die XTapi.dll anpassen, da hier der Source Code vorliegt.
Nach meinen Recherchen verwendest Du die 32 Bit XTapi.dll Version aus diesem Projekt
MSTAPI Service Provider http://sourceforge.net/projects/xtapi/files/MSTAPI%20Service%20Provider/
(eine 64 Bit TAPI Version wurde nie realisiert)der o.g. Link ist aber aus dem Jahr 2002 ( Beta Release 0.10 XTapi.dll vom 21. Juli 2002)
Du verwendest in der mod-mon-xtapi.1.0.11.jam eine XTapi.dll vom 22. Juni 2011ein String-Vergleich ergab kleine Unterschiede (Deine Erweiterung von logs/mstapi.log), aber die Funktionsaufrufe scheinen zu passen
strings -n 10 mod-mon-xtapi.1.0.11.jamXTapi.dll | grep -i MSTAPI
logs/mstapi.log
_Java_net_xtapi_serviceProvider_MSTAPI_answerCall@12
_Java_net_xtapi_serviceProvider_MSTAPI_connectCall@20
_Java_net_xtapi_serviceProvider_MSTAPI_dropCall@12
_Java_net_xtapi_serviceProvider_MSTAPI_getCallInfo@12
_Java_net_xtapi_serviceProvider_MSTAPI_initTapi@8
_Java_net_xtapi_serviceProvider_MSTAPI_monitorDigits@16
_Java_net_xtapi_serviceProvider_MSTAPI_openLine@16
_Java_net_xtapi_serviceProvider_MSTAPI_playSound@16
_Java_net_xtapi_serviceProvider_MSTAPI_recordSound@16
_Java_net_xtapi_serviceProvider_MSTAPI_sendDigits@16
_Java_net_xtapi_serviceProvider_MSTAPI_shutDown@8
_Java_net_xtapi_serviceProvider_MSTAPI_stopPlaying@12
_Java_net_xtapi_serviceProvider_MSTAPI_stopRecording@12Fragen:
– Ist XTapi.dll die richtige Stelle, um Tapi in JAM auf eine einzelne Leitung hart zu beschränken?
– Verwendest Du für die XTapi.dll einen eigenen Fork oder hast Du eine Quelle im Netz für den aktuellen Source Code?
– Hast Du eine Idee, wo man schneller den Hebel (einzelne Leitung filtern) ansetzen kann?PS: das sieht nach eigener XTapi.dll Anpassung aus: viewtopic.php?f=23&t=1410#p8034
Gruß,
Thomas12. Mai 2014 um 10:24 #27141Thilo BrandtKeymasterHallo Thomas,
ich nutze einen eigen Fork in github: https://github.com/tbrandt77/janrufmonitor/tree/master/modules/tapi
Wenn du eine generische Anpassung vornehmen möchtest, kann ich deinen commit auch wieder im Github merken 🙂
Viele Grüße
Thilo12. Mai 2014 um 11:17 #27142AnonymInaktivDanke für den Link. Ich wusste gar nicht, dass der JAM Code öffentlich ist.
Wer lesen kann ist klar im Vorteil: https://www.janrufmonitor.de/developer.htmlZum leichtsinnigen Stichwort „schnell mal“ 😀 :
An welcher Stelle würdest Du die TAPI-Line-Auswahl patchen (jar/dll)?12. Mai 2014 um 14:28 #27143Thilo BrandtKeymaster@tomas12 wrote:
An welcher Stelle würdest Du die TAPI-Line-Auswahl patchen (jar/dll)?
Grundsätzlich bevorzuge ich das JAR (Java Coding) zur Auswahl.
14. Mai 2014 um 18:30 #27144AnonymInaktivHallo Thilo,
dank https://www.janrufmonitor.de/developer.html steht die Entwicklungsumgebung 😀
jamjanrufmonitormodulestapi [master +0 ~0 -13]> ant
Buildfile: jamjanrufmonitormodulestapibuild.xml
...
bundle_module:
[echo] jAnrufmonitor Kernel framework compile...
bundle:
[zip] Building zip: jamjanrufmonitordist20140514modulesmod-mon-xtapi.1.0.11.jam.zip
BUILD SUCCESSFUL
Total time: 1 secondLeider finde ich mich in dem JAVA Code nicht so schnell zurecht.
Ich habe folgenden Ansatz für einen TAPI-Hack gefunden:Wie Du im Screenshot im ersten Bild siehst, ersetzt die Auerswald die externe MSN durch die interne Gruppennummer (im Bild **8751), welche für alle klingelnden Telefone gleich ist.
Dadurch ist kein Filtern möglich.Wenn mehrere Telefone klingeln steht im LogFile folgendes
tapi-pattern.log14.05.2014 19:52:37: *,2,5,1,0,0
14.05.2014 19:52:38: *,2,8,1,0,0
14.05.2014 19:52:38: *,2,9,1,0,0
14.05.2014 19:52:38: *,2,13,1,0,0
14.05.2014 19:52:38: *,2,15,1,0,0
14.05.2014 19:52:38: *,2,17,1,0,0
14.05.2014 19:52:38: *,2,18,1,0,0
14.05.2014 19:52:38: *,2,19,1,0,0
14.05.2014 19:52:38: *,2,21,1,0,0die zweite Ziffer (8,9 usw) gibt die interne Nummer des Telefon an, welches klingelt
im Quellcode ist das die Nummer dwInstance
XTapiMonitor.java
private void detectTapiPattern(int dwDevice, int dwMessage, int dwInstance,
int dwParam1, int dwParam2, int dwParam3) {
...
StringBuffer pattern = new StringBuffer();
pattern.append(formatter.format(new Date()));
pattern.append(": ");
pattern.append("*");
pattern.append(",");
pattern.append(dwMessage);
pattern.append(",");
pattern.append(dwInstance);
pattern.append(",");
pattern.append(dwParam1);
...
bzw. mit „jamlogger.level=ALL“ im jam-0.log
findet sich diese Nummer unter tapi.instance[ INFO - 14/Mai/2014:19:34:57 +0200 - EventThread#1 - de.janrufmonitor.service.identification.QuickIdentify.enabledReceived() - New incoming call received for identification: {CALL: [UUID: d826cdfb-4501-0010-0080-af2ca6a9d8ba][{CALLER: [UUID: d726cdfb-4501-0010-0080-af2ca6a9d8ba][Name: ][Phonenumber: 123456789]{add=add = , fn=fn = , ln=ln = }}][MSN: 624][CIP: 4 (Analoger Telefondienst/Fax G3)][DATE: Wed May 14 19:34:57 CEST 2014]{tapi.device=tapi.device = 67534, tapi.instance=tapi.instance = 8, start-ring=start-ring = 1400088897239, status=status = missed, tapi.key=tapi.key = 67534-8}} ]
[ INFO - 14/Mai/2014:19:34:57 +0200 - EventThread#3 - de.janrufmonitor.service.identification.QuickIdentify.enabledReceived() - New incoming call received for identification: {CALL: [UUID: da26cdfb-4501-0010-0080-af2ca6a9d8ba][{CALLER: [UUID: d926cdfb-4501-0010-0080-af2ca6a9d8ba][Name: ][Phonenumber: 123456789]{add=add = , fn=fn = , ln=ln = }}][MSN: 624][CIP: 4 (Analoger Telefondienst/Fax G3)][DATE: Wed May 14 19:34:57 CEST 2014]{tapi.device=tapi.device = 66562, tapi.instance=tapi.instance = 9, start-ring=start-ring = 1400088897239, status=status = missed, tapi.key=tapi.key = 66562-9}} ]
Frage:
Kannst Du mir einen Tip geben, an welcher Stelle ich in der JAM-TAPI-Benachrichtigung die Nummer der MSN (=interne Gruppennummer) gegen die tapi.instance alias dwInstance (=Nummer des Telefons) ersetze?Dann könnte man die Benachrichtigungen bei TAPI nach der LINE (=Telefon) filtern.
Danke 💡
14. Mai 2014 um 18:45 #27145Thilo BrandtKeymasterHallo Thomas12,
du findest die MSN Erzeugung in TapiMonitor.java in der Methode private void signalDoCallConnect(int dwDevice, int dwInstance) { … }:
ICall c = null;
if (callerInfo.length>2) {
m_logger.info("Called extension from TAPI: "+callerInfo[3]);
c = new XTapiCall(dwDevice, dwInstance,
removeSpecialChars(callerInfo[1]), callerInfo[3], this.m_configuration).toCall();
}
callerInfo[3]) enthält die MSN. In der Call-Klasse XTapiCall kannst in der Methode toCall() nutzen um die MSN und tapi.instance zu tauschen.
Viele Grüße
Thilo15. Mai 2014 um 10:08 #27146AnonymInaktivDANKE!!
der Patch in
XTapiMonitor.java (wg. Bold-Markierung als Quote)private void signalDoCallConnect(int dwDevice, int dwInstance) {
String[] callerInfo = this.getCallerInfoFromTapi(dwDevice);
if (callerInfo == null) {
return;
}m_logger.info(„Caller information from TAPI: „+callerInfo[0]+“, „+callerInfo[1]);
ICall c = null;
if (callerInfo.length>2) {
m_logger.info(„Called extension from TAPI: „+String.valueOf(dwInstance));
c = new XTapiCall(dwDevice, dwInstance,
removeSpecialChars(callerInfo[1]), String.valueOf(dwInstance), this.m_configuration).toCall();
} else {
c = new XTapiCall(dwDevice, dwInstance,
removeSpecialChars(callerInfo[1]), this.m_configuration).toCall();
}führt dazu, dass anstatt der internen MSN (=Gruppe, siehe Screenshot im ersten Post) die tapi.instance (Device-ID) angezeigt wird
diese Nummer lässt sich in
Administration / Grundeinstellung / MSN Verwaltung bequem filtern um mehrfach-logging zu vermeidenPS: Ich habe keine Ahnung, was diese tapi.instance für eine fortlaufende Nummer ist (d.h. wie sie generiert wird, fängt bei mir mit 5 an).
Im Tapi-Explorer wird diese Nummer als Device-ID geführt (im Screenshot 5).
Sie enspricht nicht der Apparate-Nummer (im Screenshot 31).
Ich hoffe mal, dass diese Nummer fest ist und nicht irgenwie wechselt (einen Neustart hat dieNummer überlebt)15. Mai 2014 um 11:14 #27147Thilo BrandtKeymasterHi Thomas,
Cool !!! Proble, ist nur, dass die tapi.instance nicht bei TAPI Implementierung die MSN beinhaltet. Das scheint von Hersteller zu Hersteller verschieden zu sein. Aber könnte mir vorstellen das tapi-Feld für MSN in der Konfiguration also optionaler Parameter einzubinden.
Viele Grüße
Thilo16. Mai 2014 um 12:22 #27148AnonymInaktivJAVA ist leider nicht meine Welt 😳
wie oben schon geschrieben, hatte ich (erfolglos) versucht, mich in die XTAPI JTapi Implementation (XTapi.dll) in http://sourceforge.net/projects/xtapi/files/MSTAPI%20Service%20Provider/ einzulesen
ich dachte ganz simple, das XTapi.dll ein paar Funktionen exportiert die man einfach verfolgen kann … nun ja … wäre da nicht die objektorientierte Programmierung
An dieser Stelle liest jAnrufmonitor die echte Tapi Line Number aus:
Damit kennt man die Zuordnung der tapi.instance (Device-ID) und der Tapi-Line-Number und könnte somit die Telefonnummer anstatt der Device-ID ausgeben
XTapiMonitor.java
public String[] getDescription() {
String[] info = new String[this.m_tapiHandles.entrySet().size() + 2];
info[0] = "XTapiMonitor Module 1.0";
info[1] = "Detected TAPI devices:";
Iterator i = this.m_tapiHandles.entrySet().iterator();
int j = 2;
while (i.hasNext()) {
TapiHandle th = (TapiHandle) ((Map.Entry) i.next()).getValue();
info[j] = "t" + th.getName();
j++;
}
return info;
}das letzte Element des Strings getName ist die Nummer des Telefons
16. Mai 2014 um 13:08 #27149AnonymInaktivzur TAPI-Device-ID
Windows TAPI beginnt mit der Zählung der DeviceID bei Null. (siehe Screenshot unten)
Vor der Auerswald Telefonanlage kommen da noch VPN-RAS-Verbindungen usw.
Somit hängt die Nummer von der lokalen Rechnerkonfiguration ab.
hier ist die Zuordnung LineHandle (65862) zu LineName (Auerswald COMmander 32)XTapiMonitor.java
for (int i = 0; i < n; i++) {
nameOfLine = new StringBuffer();
m_lineHandle = m_tapi.openLineTapi(i, nameOfLine);
if (m_lineHandle > 0) {
m_logger.info("Opening line #" + m_lineHandle);
m_logger.info("Opening line name "
+ nameOfLine.toString());
m_tapiHandles.put(new Integer(m_lineHandle),
new TapiHandle(m_lineHandle, nameOfLine
.toString()));
}
}bzw. im jam-0.log
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line #65862 ]
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line name Auerswald COMmander 32 ]
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line #65879 ]
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line name Auerswald COMmander 33 ]
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line #65537 ]
[ INFO - 14/Mai/2014:19:34:47 +0200 - JAM-XTapiMonitorNotifier-Thread-(deamon) - de.janrufmonitor.xtapi.XTapiMonitor$XTapiMonitorNotifier.run() - Opening line name Auerswald COMmander 34 ]Fazit: Die Apparate-Nummer lässt sich einfach aus dem String LineName herausschneiden
16. Mai 2014 um 14:36 #27150AnonymInaktivgelöscht
16. Mai 2014 um 17:24 #27151AnonymInaktivdie Zuordnung des TAPI-Line-Strings zur DeviceID (zählt ab 0) erfolgt in dem Augenblick, wenn jAnrufmonitor alle Tapi-Geräte abklappert um sie zu öffnen
(man muss die Zuordnung nur noch speichern)XTapiMonitor.java
protected class XTapiMonitorNotifier implements Runnable, IEventReceiver, IEventSender,
...
for (int i = 0; i < n; i++) {
nameOfLine = new StringBuffer();
m_lineHandle = m_tapi.openLineTapi(i, nameOfLine);
if (m_lineHandle > 0) {
m_logger.info("Opening line #" + m_lineHandle);
m_logger.info("Opening line name "
+ nameOfLine.toString());
numberOfLine = nameOfLine.toString().replaceAll("[^0-9]+", "");
m_tapiHandles.put(new Integer(m_lineHandle),
new TapiHandle(m_lineHandle, nameOfLine
.toString()+" ( Nummer:"+ numberOfLine +" DeviceID:"+String.valueOf(i)+" )"));
}
}
ich habe mal den String erweitert um die DeviceID und die Telefonnummer aus dem String herausgefiltert
19. Mai 2014 um 14:33 #27152AnonymInaktivich habe als dirty Hack (ein globales LineNumberArray für max. 100 Tapi Devices)
drei Code-Zeilen in XTapiMonitor.java geändert,
so dass jetzt anstatt der für alle Telefone identischen Gruppennummer,
die Apparate-Nummer (= filterbare MSN) geloggt wird/diff XTapiMonitor.java.orig XTapiMonitor.java.patched -c
*** XTapiMonitor.java.orig 2014-05-14 17:44:27.564726500 +0200
--- XTapiMonitor.java.patched 2014-05-19 16:10:33.419023400 +0200
***************
*** 97,102 ****
--- 97,104 ----
private List m_proceededCalls;
private int m_lineHandle;
+
+ private int[] _LineNumberArray = new int[100];
public void run() {
try {
***************
*** 122,127 ****
--- 124,130 ----
m_logger.info("Opening line #" + m_lineHandle);
m_logger.info("Opening line name "
+ nameOfLine.toString());
+ _LineNumberArray=Integer.valueOf("0"+nameOfLine.toString().replaceAll("[^0-9]+", ""));
m_tapiHandles.put(new Integer(m_lineHandle),
new TapiHandle(m_lineHandle, nameOfLine
.toString()));
***************
*** 324,330 ****
if (callerInfo.length>2) {
m_logger.info("Called extension from TAPI: "+callerInfo[3]);
c = new XTapiCall(dwDevice, dwInstance,
! removeSpecialChars(callerInfo[1]), callerInfo[3], this.m_configuration).toCall();
} else {
c = new XTapiCall(dwDevice, dwInstance,
removeSpecialChars(callerInfo[1]), this.m_configuration).toCall();
--- 327,333 ----
if (callerInfo.length>2) {
m_logger.info("Called extension from TAPI: "+callerInfo[3]);
c = new XTapiCall(dwDevice, dwInstance,
! removeSpecialChars(callerInfo[1]), String.valueOf(_LineNumberArray[dwInstance]), this.m_configuration).toCall();
} else {
c = new XTapiCall(dwDevice, dwInstance,
removeSpecialChars(callerInfo[1]), this.m_configuration).toCall();
21. Mai 2014 um 14:39 #27153AnonymInaktivInteressantes Thema, denn ich habe ein ähnliches Problem und einen Feature Request gestellt um die Mehrfachmeldungen reduzieren zu können. In meinem Fall habe ich aber in den Einstellungen von Windows (Telefon & Modem -> erweitert) den „Dienstanbieter für Funkwerk TK-Anlagen“ konfigurieren können. Aber ich möchte mehrere Eintragungen aktiv lassen um abgehend ausgelöst durch die Anwendung am PC wählen zu können. Das geht aber nur wenn die TAPI für die Nebenstellen auch aktiv sind.
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.