cmeese
Goto Top

TAPI Schnittstelle ansprechen, Sonderzeichen trimmen

Hallo zusammen, im Internet habe ich ein VBS Script gefunden welches die TAPI Schnittstelle ansprechen kann...

... dies funktioniert ganz gut, hier der Quellcode:
Option Explicit

Dim strFilter, strNumber
strFilter = ""  

If (Wscript.Arguments.Count < 1) Then  
  	Wscript.Echo "Make a call via TAPI" & vbcrlf & vbcrlf & "cti.vbs Number StringToSearchForInTapi"  
  	Wscript.Quit  
Else
	' Retrieve the first argument (index 0).    
	strNumber = Wscript.Arguments(0)
	If Wscript.Arguments.Count > 1 Then
		' Retrieve the second argument.    
		strFilter = Wscript.Arguments(1)  
	End If
End If


If Wscript.Arguments(0) = "-list" Then  
	Call ListTAPI()
Else
	Call MakeCall(strNumber, strFilter)
End If


Sub MakeCall(strNumber, strFilter)
	Dim lAddressType, objTapi, objCollAddresses, objCrtAddress, lLoop, NewCall, gobjAddress

	Const LINEADDRESSTYPE_PHONENUMBER = 1
	Const LINEMEDIAMODE_INTERACTIVEVOICE = 4
	
	lAddressType = LINEADDRESSTYPE_PHONENUMBER
	Set objTapi = CreateObject("TAPI.TAPI.1")  
	objTapi.Initialize
	Set objCollAddresses  = objTapi.Addresses

	For lLoop = 1 To objCollAddresses.Count
		Set objCrtAddress = objCollAddresses.Item(lLoop) 
		If Instr(objCrtAddress.AddressName, "EXT00") > 0 Then  
				If Instr(objCrtAddress.AddressName, strFilter) Then
					Set gobjAddress = objCrtAddress
					Exit For
				End If
		End If
		If lLoop = objCollAddresses.Count Then
			Msgbox "TAPI Provider Not Found"  
			WScript.quit(-1)
		End If
	Next

	Set NewCall = gobjAddress.CreateCall(strNumber, lAddressType, LINEMEDIAMODE_INTERACTIVEVOICE) ',lMediaTypes)'Set  
	NewCall.connect(False)

End Sub

Sub ListTAPI()
	Dim strAddressList, lAddressType, objTapi, objCollAddresses, objCrtAddress, lLoop
	
	Const LINEADDRESSTYPE_PHONENUMBER = 1

	lAddressType = LINEADDRESSTYPE_PHONENUMBER
	Set objTapi = CreateObject("TAPI.TAPI.1")  
	objTapi.Initialize
	Set objCollAddresses  = objTapi.Addresses

	For lLoop = 1 To objCollAddresses.Count
		Set objCrtAddress = objCollAddresses.Item(lLoop) 
		strAddressList = strAddressList & objCrtAddress.AddressName & vbCrLf
	Next
	Wscript.echo strAddressList
End Sub

Die Datei habe ich als "cti.vbs" gespeichert und nach C:\Windows kopiert. Wenn ich nun in einer CMD "cti.vbs 123456789" tippe fängt mein Telefon an zu wählen und alles ist super. Um das ganze nun zu verfeinern habe ich nun noch ein AutoHotkey Script geschrieben welches mir markierte Nummern an die cti.vbs übergibt. Funktioniert auch super.

Es geht aber um den Fall der eintrifft wenn ich Rufnummern von Webseiten markiere, diese entahlten oft Sonderzeichen wie /, (, oder .
Durch die Sonderzeichen ist es naütlrich nicht möglich das VBS Script auszuführen.
Da ich von VBS überhaupt keine Ahnung habe, suche ich jemand der mir helfen kann und mir erklärt wie ich diese Sonderzeichen heraustrimme. Vielleicht ist dies auch der falsche Ansatz und man muss die Sonderzeichen schon im AutoHotkey Script raustrimmen.

Ich bin für jede Hilfe dankbar! Vielen Dank im Voraus!

Content-Key: 179895

Url: https://administrator.de/contentid/179895

Printed on: April 23, 2024 at 16:04 o'clock

Member: rubberman
rubberman Feb 01, 2012 at 18:47:36 (UTC)
Goto Top
Hallo cmeese.

Um die numerische Essenz aus einem String zu filtern, bietet sich ein regulärer Ausdruck an.
Beispiel:
strNumber = "0123 / 456-789"  

Set objRegex = New RegExp
objRegex.Global = True
objRegex.Pattern = "\d+"  
Set colNums = objRegex.Execute(strNumber)
strNumber = ""  
For Each objNum In colNums
  strNumber = strNumber & objNum.Value
Next
Set objNum = Nothing
Set colNums = Nothing
Set objRegex = Nothing

WScript.Echo strNumber
Als Orientierungshilfe: Die erste Zeile im Beispielcode entspricht dem
strNumber = Wscript.Arguments(0)
in deinem Script. Die letzte Zeile ist nur zur Ausgabe des Resultats.

Brain.exe solltest du trotzdem mitlaufen lassen face-wink Einfach Irgendetwas übergeben zu wollen, schlägt im Zweifelsfall natürlich fehl. Oft schon gesehen:
+49 (0) 123 / 456789
... was soviel bedeutet, wie wahlweise 0049123... bzw. 0123... Du kannst dir vorstellen was passiert, wenn aus diesem String einfach alle Ziffern extrahiert werden...

Grüße
rubberman
Member: derLenhart
derLenhart Feb 07, 2012 at 11:29:13 (UTC)
Goto Top
Hallo,

zunächsteinmal danke, ich habe auch ein ähnliches Problem, welches super dadurch gelöst werden konnte. Eine Frage habe ich jedoch, da ich kein vbs Crack bin.

Zeile 51 - Set NewCall = gobjAddress.CreateCall(strNumber, lAddressType, LINEMEDIAMODE_INTERACTIVEVOICE) ',lMediaTypes)'Set

Da ich ganz speziell eine definierte TapiVerbindung eingetragen habe, bei der ein Softphone die Verbindung aufbaut. Gibt es eine Möglichkeit/Trick um den Fehler abzufangen?

Error:
Line: 52
Position: 2
OK