Jump to content

Automatisch eine Rufumleitung setzen zu fester Uhrzeit


bastixko
 Share


Go to solution Solved by bastixko,

Recommended Posts

Hallo zusammen,

 

Ich würde gerne eine Rufumleitung wöchentlich automatisch setzen lassen.

Das ganze soll zu einer bestimmten Uhrzeit passieren. Ist so etwas generell möglich?

 

Hintergrund:

Wir haben einen Bereitschaftsdienst. Mehrere Mitarbeiter wechseln sich wöchentlich dazu ab.

Jeden Montag tragen wir händisch im Call-Routing die Mobilfunkrufnummer des Kollegen ein, der in der jeweiligen Kalenderwoche dran ist.

Das ganze würde ich gerne mit einer entsprechenden E-Mail Benachrichtigung an den Kollegen automatisieren.

 

Vielen Dank schonmal im Voraus!

 

 

Link to comment
Share on other sites


Da gibt es viele Möglichkeiten soetwas zu tun. 

 

Statt die sofortige Umleitung zu setzen:

  • bei Anruf die Nummer aus einer Textdatei lesen und auf die dann zustellen (Beispiel wie Du aus Textdateien lesen kannst)
  • bei Anruf die Nummer aus einer Datenbank lesen und auf die dann zustellen (Beispiel wie Du aus Datenbank lesen kannst)
  • bei Anruf die Nummer aus einer Persistenten Variablen lesen. Hier könntest Du Dir auch ein kleines Skript bauen, welches Du anrufen kannst um die Nummer (und damit die Persistente Variable) zu setzen. Du kannst sie auch direkt in der Datenbank manipulieren.

Persönlich würde ich die Persistenten Variablen benutzen, da die Dich von alles was Textdatei, Datenbank, etc. heisst fern halten. Du 

 

Link to comment
Share on other sites


Danke für den Gedankenanstoß!

 

Ich werde versuchen, das mit einer Datenbank zu realisieren und mich entlange Deines Beispiels orientieren.

 

Des Weiteren habe ich vor, dass wenn die Kollegen von ihrem Mobilteil aus die Notrufnummer wählen (ich denke hier auch Lesen der Mobilfunkrufnummern aus einer Datenbank), sie sich gegenseitig den Notruf abnehmen können.

Das soll nur in einer Richtung möglich sein, das heißt man kann sich die Bereitschaft nur "abholen", nicht jedoch wieder zurückschieben. Dann muss man den nächsten Kollegen halt auf die Füße treten. 😉

Hier werde ich dann gucken, ob ich auf die persistenten Variablen zurückgreife.

 

Wo ich allerdings noch keinen Ansatz habe ist, wie ich die E-Mail Benachrichtigung realisiere bei einem Wechsel der Bereitschaft. Da ich ja nicht auf einen Anruf warten kann, bis das CR ausgelöst wird.

Link to comment
Share on other sites


Moin nochmal!

 

ich habe mich an die Lösung mit einer Datenbank entlang des Threads "ECR Bereitschaft" orientiert.

Leider kann ich dort die aktuellen .rse Versionen nicht herunterladen und testen, weil der Server erst aktualisiert werden muss.

 

Folgendes Skript habe ich im Startblock eingefügt:

' 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 = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004


Function FindBereitschaftUser ( sNumber )

	PBXScript.OutputTrace "----------------- FindBereitschaftUser ------------------"
	
	On Error Resume Next
	
	Dim nReturn
	
	nReturn = 1
	
	'Datenbankanbindung
	Dim sDsn
	sDsn = 	"Provider=sqloledb;" & _
			"Data Source=XXX\XXX;" & _
			"Initial Catalog=Bereitschaft;" & _
			"User Id=xxx;" &_
           	"Password=xxx"
	
	'open connection to database
	Dim db
	Set db = CreateObject("ADODB.Connection")
	db.Open sDsn
	
	if Err <> 0 then
	
		PBXScript.OutputTrace "Fehler beim Oeffnen der Datenbank!"
		PBXScript.OutputTrace Err & ": " & Err.Description
	
		nReturn = 2
		
	else
	
		PBXScript.OutputTrace "Authentifizierung Datenbank erfolgreich"
		
		'open recordset
		Dim sSQL
		Dim rs
		Dim mitarbeiterID
		Dim notrufNR
		Dim usr_Nachname
		Dim usr_Mail

		'Abfrage Datensatz nach aktuelle Woche
		sSQL = "SELECT * from tbl_Bereitschaftsplan where GetDate() between Bereit_Start and Bereit_Ende"
		Set rs = CreateObject("ADODB.Recordset")
		rs.Open sSQL, db, adOpenDynamic, adLockOptimistic, adCmdText

		'PBXScript.OutputTrace sSQL
		
		if Err <> 0 then
			PBXScript.OutputTrace "Error checking database!"
			PBXScript.OutputTrace Err & ": " & Err.Description
			
			nReturn = 2
			
		else
		
			PBXScript.OutputTrace "Erfolgreicher Zugriff auf Datenbank"
			
			if not rs.EOF then
				PBXScript.OutputTrace rs
				mitarbeiterID = rs("MA_ID")
				PBXScript.OutputTrace "Notruf hat der Mitarbeiter mit der MA-ID: " & mitarbeiterID
						
			else
				PBXScript.OutputTrace "Mitarbeiter ID nicht gefunden!"
				
			end if
			
			rs.Close
			
			'______________________________________________________________________________________________
			
			sSQL = "SELECT * from tbl_Mitarbeiter where MA_ID = '"& mitarbeiterID & "'"
			rs.Open sSQL, db, adOpenDynamic, adLockOptimistic, adCmdText
			
			if not rs.EOF then		
				
				notrufNR = rs("Mobilfunknr")
				usr_Nachname = rs("Nachname")
				usr_Mail = rs("Mail")
				
				PBXScript.OutputTrace "Weiterleitung zur Nr.: " & notrufNR
				PBXScript.OutputTrace "Mitarbeiter Name: " & usr_Nachname
				PBXScript.OutputTrace "E-Mail: " & usr_Mail
			
			else
			
				PBXScript.OutputTrace "Notrufnummer nicht gefunden!"
				
			end if
			
			
		
		end if
	
		Set rs = nothing
			
		db.Close
		
		Set db = nothing

    end if
		
	PBXScript.OutputTrace "nReturn = " & nReturn
	FindBereitschaftUser = notrufNR
	PBXScript.OutputTrace = "Variable FindBereitschaftUser" & notrufNR	
	PBXScript.OutputTrace "----------------- ENDE FindBereitschaftUser ------------------"

End Function

 

Von mir erwartete Datensätze werden korrekt aus der Datenbank gelesen und im Swyx Trace auch ausgegeben.

 

Ich bin mir nur unsicher wie ich die Funktion nun aufrufen soll und die Weiterleitung setze.

Wenn ich einen weiteren Block mit "Variable auswerten" mit "Diesen Ausdruck auswerten:  FindBereitschaftUser ( IpPbx.CallingNumber )" setze, bekomme ich die folgende Meldung.

Der Anruf wird sofort beendet.

Fehler:

~Src:    Laufzeitfehler in Microsoft VBScript
~Desc:   Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung: 'FindBereitschaftUser'
~RetVal: 800a01c2
~Line:   16249
~Column: 8
~Source code:
~        PBXScriptOutputTrace "  case [ConnectTo5]"

~        ^ error position

 

Danach folgt der Durchstellen-Block mit dem Parameter "=FindBereitschaftUser".

 

Wäre nochmal über Hilfe dankbar.

Link to comment
Share on other sites


13 hours ago, bastixko said:

Danach folgt der Durchstellen-Block mit dem Parameter "=FindBereitschaftUser".

 

Die Lösung ist einfach: Deine Funktion hat einen Parameter (die Anrufer Nummer). Du rufst sie im Durchstellen Block aber ohne Parameter auf. So sollte es klappen:

 

= FindBereitschaftUser(IpPbx.CallingNumber)

 

 

Hier noch ein kleiner Hinweis zu den VBScript Fehlermeldungen im Trace. VBScript gibt in der rot markierten Zeile immer die Zeile im Source Code aus, die genau eins über der Fehlerzeile ist. Wenn das eine Leerzeile ist, kann man da schonmal lange suchen, wenn man keine Idee hat, was den Fehler auslöst und wo erst ist.

 

Die grün markierte Zeilennummer ist für die Fehlersuche nicht zu gebruchen, weil die Scripting Engine nicht nur den eigenen Code übergeben bekommt, sondern noch jede Menge anderen Code.

 

13 hours ago, bastixko said:

~Src:    Laufzeitfehler in Microsoft VBScript
~Desc:   Falsche Anzahl an Argumenten oder ungültige Eigenschaftszuweisung: 'FindBereitschaftUser'
~RetVal: 800a01c2
~Line:   16249
~Column: 8
~Source code:
~        PBXScriptOutputTrace "  case [ConnectTo5]"

~        ^ error position

 

 

Link to comment
Share on other sites


Edit: Was ich nur noch nicht ganz verstehe:

 

Im Block "Variable auswerten" -> Wann ist der Wert wahr und wann falsch? Ist das überhaupt so der richtige Weg?

 

Ich möchte vermeiden, dass wenn der Zugriff auf die Datenbank scheitert, der Ruf gar nicht weitergeleitet wird. Hier könnte man ja ein anderes Call Routing ansetzen.

 

Außerdem würde ich gerne auf die E-Mail Adresse des Datenbankeintrags zurückgreifen und per Variable im Anschluss eine E-Mail versenden. Ist das auch möglich?

Link to comment
Share on other sites


Eine VBScript Funktion kann nur einen Wert zurück geben. Der einfachste und schnellste Weg ist es, einfach globale Variablen zu verwenden, die von der Funktion gefüllt werden und auf die dann die GSE Blöcke zugreifen können.

 

Um eine Variable global zu machen, verschiebst Du ihre Deklaration aus der Funktion heraus, z.B.:

 

...

' CommandTypeEnum Values
Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004

Dim mitarbeiterID
Dim notrufNR
Dim usr_Nachname
Dim usr_Mail


Function FindBereitschaftUser ( sNumber )

	PBXScript.OutputTrace "----------------- FindBereitschaftUser ------------------"
    
...    

 

 

Wenn Du jetzt noch sicherstellen willst, dass wenn es Probleme mit der Datenbankverbindung gibt, der Ruf trotzdem ordentlich zugestellt wird, musst Du Deine Variablen nur mit passenden Default Werten fülle. Z.B.:

 

...

Dim mitarbeiterID
Dim notrufNR
Dim usr_Nachname
Dim usr_Mail

mitarbeiterID = 0
notrufNR      = "123456"
usr_Nachname  = "Admin"
usr_Mail      = "admin@test.com"

...

 

 

Den "Variable auswerten" Block brauchst Du nicht, da Du die ermittelten Werte ja auch direkt in den passenden anderen Blöcken verwendest. 

 

Beim "Variable auswerten" Block wird der "Wahr" Ausgang erreicht, wenn das was Du als Ausdruck dort eingegeben hast entweder "Wahr" (true) oder "Falsch" (false) ergibt. 

 

Einige allgemeine Hinweise zu der Verwendung von Funktionen findest Du hier.

 

Link to comment
Share on other sites


Danke, das hat super geklappt.

Muss aber leider nochmal etwas nachfragen. Ich habe eine weiteres VB-Skript mit folgenden Code eingefügt.

Ich sitze da schon seit Tagen am Grübeln.

 

Ziel: Mitarbeiter rufen die Bereitsrufnummer an (nur ausgewählte Mitarbeiter aus Datenbank dürfen) und können sich das Notfalltelefon "heranziehen".

Tabellen der Datenbank:

tbl_Bereitschaftsplan(B_ID, MA_ID (foreign Key), Bereit_Start, Bereit_Endel)

tbl_Mitarbeiter(M_ID, Vorname, Nachname, Mail, Mobil, hat_Bereitschaft)

 

Hier muss ich die Datenbank manipulieren.

Ich habe vor, dass beim Mitarbeiter 1 der zuvor Bereitschaft hat, Bereit_Ende = CurDateTime() gesetzt wird.

Der neue Mitarbeiter 2, welcher Bereitschaft wechselt / übernimmt, Bereit_Start = CurDateTime() und Bereit_Ende = Ende von Mitarbeiter 2 übernimmt.

 

PBXScript.OutputTrace "----------------- START InsertNewUser ------------------"

    On Error Resume Next 
 
    ' open connection to database
    Dim db
    Set db = CreateObject("ADODB.Connection")
    db.Open sDsn

    if Err <> 0 then
        PBXScript.OutputTrace "Error opening database!"
        PBXScript.OutputTrace Err & ": " & Err.Description
    else
        ' open recordset
	Dim rs
	Dim sSQL

        sSQL = "SELECT * from tbl_Bereitschaftsplan where B_ID = '"& bereit_ID & "'"
        Set rs = CreateObject("ADODB.Recordset")
		rs.Open sSQL, db, adOpenDynamic, adLockOptimistic, adCmdText
		
		if Err <> 0 then
			PBXScript.OutputTrace "Error checking database!"
			PBXScript.OutputTrace Err & ": " & Err.Description
			
			nReturn = 2
			
		else
		
			PBXScript.OutputTrace "Erfolgreicher Zugriff auf Datenbank"
			
			if not rs.EOF then
				rs.Edit
                    rs("Bereit_Ende") = ende
                rs.Update
                PBXScript.OutputTrace "Bereit_ID: " & bereit_ID
						
			else
				PBXScript.OutputTrace "Keinen Datensatz gefunden!"
			end if
	
			
        end if
        rs.Close
        rs.Open "tbl_Bereitschaftsplan", db, adOpenDynamic, adLockOptimistic, adCmdTable

        if Err <> 0 then
            PBXScript.OutputTrace "Error creating new dataset!"
            PBXScript.OutputTrace Err & ": " & Err.Description
        else
            rs.AddNew
		        rs("MA_ID") = internCallerID
		        rs("Bereit_Start") = CurDateTime()
            	rs("Bereit_Ende") = ende
            rs.Update

            PBXScript.OutputTrace "Notfalltelefon wurde umgelegt auf MA_ID: " & internCallerID & " (" & internCallerVorname & " " & internCallerNachname & ")"
            PBXScript.OutputTrace "Start: " & CurDateTime()
            PBXScript.OutputTrace "Ende: " & ende
	
            if Err <> 0 then
                PBXScript.OutputTrace "Error writing new dataset to database!"
                PBXScript.OutputTrace Err & ": " & Err.Description
            end if
            rs.close
        end if

        Set rs = Nothing
        
        db.close
    end if
    Set db = Nothing
    
PBXScript.OutputTrace "----------------- ENDE InsertNewUser ------------------"

UseExit = 0 ' Bitte verwenden Sie die Variable UseExit um die Block-Ausgänge 0..9 zu verwenden

 

Das Trace gibt folgendes aus:

SPBXScript::OutputTrace                 () ----------------- START InsertNewUser ------------------

SPBXScript::OutputTrace                 () Erfolgreicher Zugriff auf Datenbank
SPBXScript::OutputTrace                 () Bereit_ID: 3
SPBXScript::OutputTrace                 () Error creating new dataset!
SPBXScript::OutputTrace                 () 438: Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
SPBXScript::OutputTrace                 () ----------------- ENDE InsertNewUser ------------------

 

Ich vermute das Problem liegt beim Wechsel von adCmdText auf adCmdTable.

Link to comment
Share on other sites


Das würde ich auch vermuten.

 

Schmeiss das Objekt nach der ersten Benutzung einfach weg und erzeuge es neu. Das sollte auf alle Fälle funktionieren.

 

...

rs.Close
Set rs = Nothing

Set rs = CreateObject("ADODB.Recordset")
rs.Open "tbl_Bereitschaftsplan", db, adOpenDynamic, adLockOptimistic, adCmdTable

...

 

 

Link to comment
Share on other sites


  • Solution

Ich meine das auch schon probiert zu haben. Vielleicht bin ich da auf einen anderen Fehler gestoßen.

Nichts desto trotz, habe ich es jetzt auf eine anderen Art (Einbau einer Bedingung) gelöst. 🙂

 

Danke für die Unterstützung.

Link to comment
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
 Share


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and have taken note of our Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.