TAPI Ankommende Anrufe anzeigen
-
Hallo,
ich möchte eine kleine Anwendung programmieren welche einkommende Anrufe in einer Datenbank potokolliert.
Ich habe über eine CallBack Funktion den Anruf abgegriffen und versucht mittels lineGetCallInfo die Rufnummer zu finden. Leider bekomme ich keine sinnvolle Information in der Struktur LINECALLINFO herausgefiltert.
Ich denke ich nutze die lineGetCallInfo falsch.
Hat einer eine Idee?Gruss
Achim
-
Und wie machst Du es?
Zeig mal ein bischen Code.1. In der Struktur sind Position die Daten per Offset relativ zum Strukturstart angegeben (dwCallerIDNameOffset). Und solange das LINECALLPARTYID_ADDRESS in dwCallerIDFlags nicht gesetzt ist gibt es diese Info auch nicht.
2. Die Nummer steht evtl. auch nicht sofort zur Verfügung wenn der Call in der Tapi-Callback Routine gemeldet wird. Diese Information kommt bei vielen TSPs zeitverzögert.
-
okay Martin:
Also es handelt sich ein Panasonic TSP.
Es gibt ja einige Codeschnippsel im Netz bei denen ich mich in dieser Phase auch reichlich bedient habe, leider ohne Erfolg.
LINECALLINFO *lineCallInfo; lineCallInfo = NULL; lineCallInfo = (LINECALLINFO *)malloc(sizeof(LINECALLINFO)+1024); memset(lineCallInfo, 0, sizeof(LINECALLINFO)+1024); lineCallInfo->dwTotalSize = sizeof(LINECALLINFO)+104; lineGetCallInfo (hCall, lineCallInfo); TCHAR szPhoneNumber[20]; lstrcpy(szPhoneNumber,(LPTSTR)((LPSTR)((DWORD)lineCallInfo+(DWORD)lineCallInfo->dwCallerIDOffset)));Der Callback-Funktion wird ja übergeben, welche Änderung die TAPI erkannt hat.
Die meintest wenn LINECALLPARTYID_ADDRESS nicht gesetzt sei, gäbe es diese Info nicht. Wie bzw. wo warte ich am Besten bis das Flag gesetzt ist.
Wenn die Information bei einigen TSPs zeitversetzt kommt, wie warte ich auf die Info, ein Sleep befehl ist wohl nicht angebracht oder
Gruss
Achim
-
1. Die LINECALLINFO enthält ein paar mehr Member als nur den einen, den Du benutzt. dwCallerIDOffset ist nur gültig, wenn dort auch was !=0 drin steht und dwCallerIDFlags entsprechend gesetzt ist.
2. Ein Sleep in Deiner Callback Routine wäre der größte Unsinn, den Du machen kannst. Die Tapi ist asynchron, Du bekommst Infos wenn Sie verfügbar werden. Theoretisch kann also irgendwann eine LINE_CALLINFO Benachrichtigung kommen und dann hast Du erst die Daten.Wenn es nur um das Protokollieren geht, würde ich die Daten für einen Call sammeln und erst schreiben, wenn der Call Idle geht.
-
Ok!
Ist schon klar, das die Struktur mehr Menber hat ... welchen Member der LINECALLINFO würdest du deiner Erfahrung nach bevorzugen? Oder wählst du den Situationsbedingt aus?
Es kommt eine weitere Benachrichtigung, wenn man auflegt (und der Anruf nicht angenommen wurde), sonst habe ich keine bekommen.... Insofern bringt mir derzeit das Warten aufs Idle leider nichts...Gruss
Achim
-
Was heißt welchen Member? Es gibt doch nur einen, der die rufende Nummer enthalten kann!
Nicht jeder TSP ist gleich. Das heißt jeder TSP verhält sich anders...
D.h. Du kannst keine Regel daraus machen, dass sofort, nach eintreten des neuen Calls auch die Nummer bekannst ist.Meine Software wartet eine bestimmte Zeit, bis es annehmen kann, dass die Nummer druch den TSP bekant gegeben wurde um dann z.B. in der DB zu suchen.
Würde ich sofort die Suche starten, ist oft genug bei manchen TSP's die Nummer noch icht vorhanden.Nur am Rande: Die Clip wird bei analogen Verbindungen zwischen 1.+2. lklingeln übertragen. D.h. der Call ist da schon längst bekannt. Die Nummer noch nicht...
-
Hallo Martin,
so ganz schlau werde ich nicht daraus:
Die einzige Nachricht die beim Aufruf der CallBack Funktion übergeben wird ist LINE_DEVSPECIFIC.
Kann ich damit was anfangen?Gruss
Achim
-
Nein!
-
Hallo Martin,
ich hab es gefunden:
Ich habe im lineopen die Leitung mit LINECALLPRIVILEGE_NONE geöffnet. damit konnte ich nicht einkommende Anrufe monitoren.
Danke für Deine Hilfe.Gruss
Achim
-
Jupp, dazu ist mindestens Monitor oder Owner nötig.