PeterK

IpPbx.CallingName

Recommended Posts

Hallo,

wie wird denn innerhalb der NetPhone-Anlage (v11.10.2909) die Variable „IpPbx.CallingName“ gesetzt? Leider ist diese bei uns immer leer.

Ist es möglich, diese Variable z.B. durch ein VB-Script selbst zu setzen?

Peter

Share this post


Link to post
Share on other sites

Die Variable IpPbx.CallingName enthält dann bereits einen Wert, wenn der Server bevor er das Call Routing gestartet hat, den Namen aus dem globalen Telefonbuch auflösen konnte.

 

Man kann auch jederzeit und ganz einfach selbst einen Namen setzen:

 

IpPbx.CallingName = "Erika Mustermann"

 

Man kann auch einen vorhandenen Wert manipulieren. Angenommen ich möchte dem Benutzer dem der Ruf zugestellt wird, mitteilen, dass dieser Ruf ursprünglich mal für den Chef war, er von dort aber hierher weiter geleitet wurde.

Ich kann dann z.B. "CHEF" mit in die Variable und damit ins Display des Clients oder Telefons schreiben:

 

IpPbx.CallingName = "CHEF - " & IpPbx.CallingName

 

Jetzt steht unabhängig davon,  ob der Server den Anrufernamen bereits aufgelöst hat immer "CHEF" am Anfang des Displays.

 

Mehr zu dieser Variable ist hier dokumentiert:

 

 

 

Share this post


Link to post
Share on other sites

Vielen Dank für diese Info! Das war auch genau das, was ich hören wollte 😉

 

Ich hatte das schon ausprobiert, aber in einem Block "Variable setzen". Dort wurde mir die Zuweisung auf IpPbx.CallingName nicht akzeptiert, da der Variablenname nur Buchstaben und Zahlen beinhalten darf. Im Start-Block funktioniert es aber. Also nehme ich mal ein VBScript...

 

Peter

 

Share this post


Link to post
Share on other sites

Der "Variable setzen" Block geht an der Stelle nicht, weil der ausschlieslich dazu benutzt werden kann, GSE eigene Variablen anzulegen bzw. zu setzen.

Wenn man damit eine Variable setzt, wird dafür automatisch im generierten VBScript Code eine Variable erzeugt. Und da normale VBScript Variablen keine Objekte sind, kann man dort dann auch mittels "." keine Eigenschaften oder Methoden ansprechen.

 

Ausserhalb von dem Block kann man aber eigentlich überall dort auf die Server Script API zugreifen, wo am Ende einer Textzeile der "x/y" Button ist.

Share this post


Link to post
Share on other sites

Vielen Dank für die Info!

Interessant - oder besser gesagt super - ist,  dass sich das Setzen der Variable IpPbx.CallingName auch auf viele anderen Stellen auswirkt, so z.B.

    die Einträge zu den Einzelverbindungsinformationen (wir nutzen eine Datenbank, dort ist es die Spalte OriginationName),

    im Rufjournal der einzelnen Benutzer sowie auch

    im Display der Telefone.

 

Gibt es eigentlich auch einen Weg, bei ausgehenden Rufen die Datenbank-Spalten CalledName bzw. DestinationName über ein Script zu füllen? CallRouting-Regeln funktionieren hier ja nicht, da diese nur bei eingehenden Verbindungen wirksam werden und ich habe auch keine dementsprechende Variable gefunden.

 

Peter

 

Share this post


Link to post
Share on other sites

Noch eine Frage:

Ich versuche, das Script im PreProcessing laufen zu lassen. Die Regel an sich ist ganz einfach (s. Bild unten) Im Startblock steckt ein bisschen VBScript, welches in anderen Regeln problemlos läuft. Eigentlich erfolgt nur die Zuweisung

              IpPbx.CallingName = GetNameFromNumber(IpPbx.CallingNumber)

(mit GetNameFromNumber als eigene VB-Methode)

 

Solange ich dies nicht als PreProcessing speichere, läuft alles. Wenn ich es aber unter dem Namen PreProcessing speichere, bekomme ich Laufzeitfehler

~Code:   0
~Src:    Laufzeitfehler in Microsoft VBScript
~Desc:   Objekt erforderlich: ''
~RetVal: 800a01a8
~Line:   164
~Column: 0
~Source code:
~

Kann es daran liegen, dass ich die beiden Dateien noch nicht im GLOBAL Scope habe (nur im Scope des aktuellen Benutzers). Ich wollte erst mal sehen, ob es funktioniert, bevor ich es auf GLOBAL setze...

 

Peter

Regel.JPG

Share this post


Link to post
Share on other sites

Ganz wichtig: es muss der Ausgang Regel übersprungen und nicht Regel ausgeführt verwendet werden. Sonst wird anschliessend keine einzoge Regel eines Benutzers mehr gestartet.

 

Wie sieht denn die VBSkript Funktion GetNameFromNumber aus?

 

Share this post


Link to post
Share on other sites

Hier ist der Code:

 

' FileOpen iomode Values
Const fsoForReading = 1
Const fsoForWriting = 2
Const fsoForAppending = 8

Const fsoCreateIfNotExist = True

' CursorTypeEnum Values
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

' LockTypeEnum Values
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

' CommandTypeEnum Values
Const adCmdUnknown = &H8
Const adCmdText = &H1
Const adCmdTable = &H2
Const adCmdStoredProc = &H4

Function GetNameFromNumber(ByVal number)
        Dim sDsn
        Dim sSQL2
        Dim rs
        Dim db
        Dim TNr
        Dim sReturn
        sDsn = "Provider=SQLOLEDB;Data Source=<MySource>;Initial Catalog=<MyDB>;User ID=CDR;Password=<MyPassword>"
        Set db = CreateObject("ADODB.Connection")
        db.Open sDsn
        sSQL2 = "SELECT TOP(1) Name FROM Contacts WHERE (LEFT('" & number & "', LEN(PhoneNumber)) = PhoneNumber) ORDER BY LEN(PhoneNumber) DESC"
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open sSQL2, db, adOpenDynamic, adLockOptimistic, adCmdText
        If rs.eof = True Then
            sReturn = ""
        Else
            sReturn = rs("Name")
        End If
        sReturn = Trim(sReturn)
        rs.Close
        Set rs = Nothing
        db.Close
        Set db = Nothing
        Set sSQL2 = Nothing    
        GetNameFromNumber = sReturn
End Function

IpPbx.CallingName = GetNameFromNumber (IpPbx.CallingNumber)

 

Share this post


Link to post
Share on other sites

Ich sehe da ehrlich gesagt keinen Grund für die Fehlermeldung. Da muss noch irgendetwas anderes im Call Routing des Test Benutzers stecken, was hier stört.

Was ist denn, wenn das PreProcessing auf einen komplett neuen Testbenutzer an den Start gebracht wird?

 

On 5/2/2018 at 3:03 PM, PeterK said:

Kann es daran liegen, dass ich die beiden Dateien noch nicht im GLOBAL Scope habe (nur im Scope des aktuellen Benutzers). Ich wollte erst mal sehen, ob es funktioniert, bevor ich es auf GLOBAL setze...

 

Auf gar keine Fall solltest Du ein PreProcessing global hinterlegen, welches auf dem Testbenutzer noch nicht sauber läuft. Du kannst damit alle kommenden Rufe für alle Benutzer in der SwyxWare "abschalten".

 

Ich würde das Skript ein klein wenig anders schreiben. In der Funktion selbst ist es nur "Dekoration", beim Aufruf der Funktion aber nicht. Wenn Du mittels IpPbx.CallingName einen Namen setzt (auch wenn es nur ein Leerstring ist), werden damit voherigen Namensauflösungen (z.B. gegen das globale Telefonbuch) überschrieben. Du solltest den Namen also nur setzen, wenn Du auch einen aus den CDRs zurück bekommen hast.

 


' CursorTypeEnum Values
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

' LockTypeEnum Values
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

' CommandTypeEnum Values
Const adCmdUnknown = &H8
Const adCmdText = &H1
Const adCmdTable = &H2
Const adCmdStoredProc = &H4


Function GetNameFromNumber(ByVal number)
	
	Dim sDsn, sSQL
	Dim db, rs

	Dim sReturn
	sReturn = ""

	sDsn = "Provider=SQLOLEDB;Data Source=<MySource>;Initial Catalog=<MyDB>;User ID=CDR;Password=<MyPassword>"
	Set db = CreateObject("ADODB.Connection")
	db.Open sDsn

	sSQL = "SELECT TOP(1) Name FROM Contacts WHERE (LEFT('" & number & "', LEN(PhoneNumber)) = PhoneNumber) ORDER BY LEN(PhoneNumber) DESC"
	Set rs = CreateObject("ADODB.Recordset")
	rs.Open sSQL, db, adOpenDynamic, adLockOptimistic, adCmdText

	If not rs.eof = True Then
		sReturn = Trim(rs("Name"))
	End If

	rs.Close
	Set rs = Nothing
	
	db.Close
	Set db = Nothing
	
	GetNameFromNumber = sReturn

End Function


Dim sName
sName = GetNameFromNumber (IpPbx.CallingNumber)
if sName <> "" then IpPbx.CallingName = sName

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now