![]() |
TAPI - lineMakeCall - Format der Telefonnummer
Ich habe ein Adress-Programm aus dem man via TAPI (lineMakeCall) einen Teilnehmer anrufen kann. Früher hing ein Modem am Rechner, dem ich die Rufnummer ohne Sonderzeichen und Leerzeichen (+ wurde durch 00 ersetzt) übergeben konnte (z.B. 0049301234567). Da sich die Zeiten ändern, und die heutigen Telefonanlagen einen TAPI-Treiber zur Verfügung stellen, habe ich mein Programm dementsprechend auch erneuern müssen. Klappt auch alles prima, solange in der Telefonnummer keine Ländervorwahl ist. Wenn ich mit der Wählhilfe von Windows 7 (dialer.exe) rumspiele (die ja auch TAPI verwendet) verzweifel ich so langsam. Das Rufnummernformat, wie es die Handys meist verwenden (DIN 5008) mag TAPI nicht, da die Windows-TAPI das Microsoftspezifische kanonische Format verwendet.
Beispiele: aus "+49 30 1234567" wird "30 1234567" Nicht OK aus "0049 30 1234567" wird "0049 30 1234567" mag meine Telefonanlage nicht aus "0049301234567" wird "0049301234567" mag meine Telefonanlage nicht aus "+49301234567" mag die Wählhilfe nicht aus "030 1234567" wird "030 1234567" OK aus "0301234567" wird "0301234567" OK aus "+43 30 1234567" wird "00 43 30 1234567" OK (da Ausland) aus "0043301234567" wird "0043301234567" OK (da Ausland) aus "+49 (30) 1234567" wird "0 30 1234567" OK aus "+49 (030) 1234567" wird "0 30 1234567" OK usw. Da ich gelesen habe, dass viele Handys mit dem MS kanonischen Format nicht auskommen, möchte ich ungern dieses in meinem Programm verwenden (ich exportiere meine Adressen ins Exchange und das wiederum benutzen mehrere Handys). Nun zu meiner Frage an euch: Wie würdet ihr die Rufnummern automatisch fürs TAPI umformatieren, dass es sowohl fürs Inland als auch fürs Ausland passt (leider sind Länderkennzahlen und Ortsvorwahlen unterschiedlich lang)? Wie habt ihr das Problem gelöst? |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Code:
So da sollte es auch egal sein ob Du +43,+49 oder was auch immer als Ländervorwahl hast.
aus "+49 (30) 1234567" wird "0 30 1234567" OK
aus "+49 (030) 1234567" wird "0 30 1234567" OK Viel schwerer ist es den Datenerfassungskräften klar zu machen, daß eine Betrieblich Vorwahl auch vollständig einzugeben ist also +49(221)12345-123 statt 123 Gruß K-H |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Du nimmst die Vorwahliste der Bundesnetzagentur und parst die Strings.
![]() |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Zitat:
|
AW: TAPI - lineMakeCall - Format der Telefonnummer
Zitat:
|
AW: TAPI - lineMakeCall - Format der Telefonnummer
Zitat:
Zitat:
Gruß K-H |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Wenn man die Nummer in verschiedene Teile aufteilt (Landeskennzahl, Ortsvorwahl, Hauptnummer, Durchwahl), dann könnte man daraus doch je nach Anforderung das entsprechende Format generieren, oder täusche ich mich?
|
AW: TAPI - lineMakeCall - Format der Telefonnummer
Was meinst Du mit "Aufteilen"?
das MS-Format bietet ja eigentlich die Möglichkeit dazu (Stringverarbeitung). Oder schwebt Dir für jeden Bestandteil ein seperates Feld, oder noch besser eine seperate Tabelle vor? Gruß K-H |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Ich dachte da an eine Telefontabelle, bestehend aus den beschriebenen Feldern.
|
AW: TAPI - lineMakeCall - Format der Telefonnummer
Bleibt letztlich die Frage wie "gewählt" werden soll/kann
Gruß K-H |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Zitat:
Ist in DE der Fall, aber nicht überall. Version 3 setzt voraus das das für nationale Gespräche die 0 vor der Rufnummer zu wählen ist. ist in DE der Fall, aber nicht überall. Es gab mal Ideen das in DE immer die ortsvorwahl zu wählen ist - dann aber ohne vorgängte 0. D.h man müsste z.B. aus München die 2211234567 statt wie bisher die 02211234567 wählen. |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Danke für all eure Tipps, ich habe es nun folgendermaßen gelöst. Ich nehme weiterhin alle möglichen Zeichen aus dem Telefonnummern-String raus, ersetze + durch 00 (alles wie zuvor) nun ersetze ich noch zusätzlich 0049 durch 0, damit meine Telefonanlage die Gespräche innerhalb Deutschlands auch schafft. Ob alles so klappt zeigt die Praxis :stupid:
Delphi-Quellcode:
// überflüssige Zeichen entfernen (Leerzeichen, '-', '/', etc.)
aAddress := StringReplace(aAddress, ' ', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, '-', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, '/', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, '(', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, ')', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, '<', '', [rfReplaceAll]); aAddress := StringReplace(aAddress, '>', '', [rfReplaceAll]); // '+' durch '00' ersetzen (Ländervorwahl) aAddress := StringReplace(aAddress, '+', '00', []); if copy(aAddress, 1, 4) = '0049' then begin // Unsere Telefonanlage kommt mit der eigenen Ländervorwahl nicht zurecht, deswegen weg damit. 03.06.2013 delete(aAddress, 2, 3); end; FillChar(callingNr, sizeof(callingNr), 0); StrPCopy(callingNr, aAddress); i := lineMakeCall(line, @call, callingNr, 0, @CallParams); ... |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Statt der ganzen StringReplace-Aufrufe sollte man vielleicht einfach alles herausfiltern, was keine Ziffer ist. Nicht großartig getestet:
Delphi-Quellcode:
function FilteredNumbers(const NumberStr: string): string;
const NUMBERS = ['0'..'9']; var PSrc, PDest, PCurrent: PChar; begin SetLength(Result, Length(NumberStr)); PSrc := PChar(NumberStr); PDest := PChar(Result); PCurrent := PDest; while PSrc^ <> #0 do begin {$IFDEF UNICODE} if CharInSet(PSrc^, NUMBERS) then {$ELSE} if PSrc^ in NUMBERS then {$ENDIF} begin PCurrent^ := PSrc^; PCurrent := CharNext(PCurrent); end; PSrc := CharNext(PSrc); end; SetString(Result, PDest, PCurrent - PDest); end; |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Hi baumina,
Ich verwende grundsätzlich das kanonische Format für meine Rufnummern. Mit lineTranslateAddress wandle ich diese dann um. Du erhälst dann automatisch die Rufnummer im korrekten Format (davon ausgehend das die Ländereinstellung/Vorwahl richtig in Windows hinterlegt sind). Vielleicht hilft Dir das ja weiter Gruß Alidi |
AW: TAPI - lineMakeCall - Format der Telefonnummer
Zitat:
Durch wildes rumprobieren und mühsames recherchieren im Inet übergebe ich im Moment folgende Parameter ohne wirklich zu kapieren worums geht (bei sowas bin ich glaub zu blond)
Delphi-Quellcode:
lTAPIDialMode := ldmINTERACTIVEVOICE; // so habe ich es gesetzt
{ Zeros CallParams structure } FillChar(CallParams, sizeof(CallParams), 0); CallParams.dwTotalSize := sizeof(CallParams); CallParams.dwBearerMode := LINEBEARERMODE_VOICE; CallParams.dwAddressMode := LINEADDRESSMODE_DIALABLEADDR; case lTAPIDialMode of ldmINTERACTIVEVOICE : CallParams.dwMediaMode := LINEMEDIAMODE_INTERACTIVEVOICE; ldmAUTOVOICE : CallParams.dwMediaMode := LINEMEDIAMODE_AUTOMATEDVOICE; ldmDIGITALDATA : CallParams.dwMediaMode := LINEMEDIAMODE_DIGITALDATA; ldmDATAMODEM : CallParams.dwMediaMode := LINEMEDIAMODE_DATAMODEM; ldmVOICEVIEW : CallParams.dwMediaMode := LINEMEDIAMODE_VOICEVIEW; else CallParams.dwMediaMode := LINEMEDIAMODE_INTERACTIVEVOICE; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz