Dieses Thema soll komplett der Einrichtung und Konfiguration des Voiceservers (VS) gewidmet sein.
Ziel ist es einen Guide für das Bearbeiten und Erstellen neuer Projekte/Scripte zusammenzutragen und für ein zukünftiges Integrationshandbuch vorzubereiten.
Diskussionen zu Scripten und Abläufen sind gern gesehen.
Allgemeine Struktur
Der VS ist als ereignisgesteuerter Zustandsautomat (SM) aufgebaut. Jedes bei ihm eingehende UDP-Paket wird als Ereignis ausgewertet und ruft SM für den entsprechenden B-Kanal auf.
Die Definition der einzelnen Zustände ist variabel und durch den Administrator editierbar. Ursprünglich für die Anpassung auf Dateiebene entwickelt, greift der VS auf eine per Konfiguration festgelegte Verzeichnisstruktur (DATAVOICE) zu. DATAVOICE enthält
In den Unterverzeichnissen der einzelnen Projekte liegen jeweils
Aufbau der Event.ini
Diese Datei dient der Identifikation und Einordnung des Projektes. Alle Änderungen können mit einem Standard Editor vogenommen werden und folgende Einträge enthalten.
Scripte/Projekte
Wird ein Script als Startzustand festgelegt, oder durch ein zuvor verlassenes Script aufgerufen, erfolgt ein sequentielles Abarbeiten des Codes. Die meisten Scripte sind als große IF-Verzweigung aufgebaut und verlassen nach Abarbeitung des entsprechenden Zweiges das Script mit einem LUA_Event und einem aktualisiertem Status.
Als Beispiel sei das Standardstartscript ProjectVox gewählt:
LUA Kommandos
Aktuell nicht genutzt:
Rückgabewerte
Rückgabewerte aus dem Script sind Events, d.h. es können die gleichen Events aus dem Script ausgegeben werden, wie sie auch von aussen auftreten können. Zunächst die typischen Rückgabewerte, die Scripte liefern können
Weitere Events, auf die im Script reagiert werden kann:
Ziel ist es einen Guide für das Bearbeiten und Erstellen neuer Projekte/Scripte zusammenzutragen und für ein zukünftiges Integrationshandbuch vorzubereiten.
Diskussionen zu Scripten und Abläufen sind gern gesehen.
Allgemeine Struktur
Der VS ist als ereignisgesteuerter Zustandsautomat (SM) aufgebaut. Jedes bei ihm eingehende UDP-Paket wird als Ereignis ausgewertet und ruft SM für den entsprechenden B-Kanal auf.
Die Definition der einzelnen Zustände ist variabel und durch den Administrator editierbar. Ursprünglich für die Anpassung auf Dateiebene entwickelt, greift der VS auf eine per Konfiguration festgelegte Verzeichnisstruktur (DATAVOICE) zu. DATAVOICE enthält
- Unterverzeichnisse mit Projekten
- Unterverzeichnis "lua" mit
- "init.lua" - enthält vordefinierte Funktionen, die von den Basisprojekten genutzt werden
- "sample.user.lua" - soll für eigene Funktionen eingesetzt werden, hier definierte Funktionen stehen in allen Scripten zur Verfügung. Die Datei muss dafür in "user.lua" umbenannt werden.
- Schablonen (template) für extended Voice, diese Datei(en) sollten nicht verändert werden!
- Datei "main.lua" - ohne Inhalt, aber notwendig um Unterverzeichnisse in den Projektordnern zu ignorieren. Dies ist nur wichtig in Installationen, bei denen vorher bereits ein OfficeMaster <4 installiert war.
Vor OM 4 hat SM allein auf Dateiebene ohne Scripte gearbeitet.
In den Unterverzeichnissen der einzelnen Projekte liegen jeweils
- eine .lua-Datei mit Anweisungen für SM und
- die "event.ini" mit allgemeinen Projektinformationen.
- je nach Projekt kann auch ein "audio" Ordner vorhanden sein.
Aufbau der Event.ini
Diese Datei dient der Identifikation und Einordnung des Projektes. Alle Änderungen können mit einem Standard Editor vogenommen werden und folgende Einträge enthalten.
[Parameter]
Type=Project
Name=Voicebox ohne Aufnahme
Loadable=1
description=Voicebox ohne Aufnahme
Type=Project
Name=Voicebox ohne Aufnahme
Loadable=1
description=Voicebox ohne Aufnahme
- Name: Displayname in der Auswahl des Projektes am entsprechenden Gateway
- Loadable: 0, Projekt kann nicht als Startprojekt genutzt sondern nur durch andere Projekte augerufen werden; 1, kann als Startprojekt eingesetzt werden
- description: Beschreibung des Projektes, wird in verschiedenen Gateways als Wert in den Klammern hinter dem Namen angezeigt
Scripte/Projekte
Wird ein Script als Startzustand festgelegt, oder durch ein zuvor verlassenes Script aufgerufen, erfolgt ein sequentielles Abarbeiten des Codes. Die meisten Scripte sind als große IF-Verzweigung aufgebaut und verlassen nach Abarbeitung des entsprechenden Zweiges das Script mit einem LUA_Event und einem aktualisiertem Status.
Als Beispiel sei das Standardstartscript ProjectVox gewählt:
LogFmsState("projectvox.lua")
-- *************************************
-- ***** projectVox
-- *************************************
if (CheckFmsState("projectVox")) then
-- *************************************
-- ***** projectVox -> INITIAL
-- *************************************
else
-- *************************************
-- ***** projectVox
-- *************************************
if (CheckFmsState("projectVox")) then
if (EvtGateway()) then
if (CmdCheckPin("0") == EVENT_IVROK) then
SetFmsState("projectAbfrage: replay")
CmdGotoNode("\\\\projectAbfrage")
return EVENT_IVRGOTONODE
end CmdGotoNode("\\\\projectAbfrage")
return EVENT_IVRGOTONODE
if (CmdCheckPin("0") == EVENT_IVROK) then
SetFmsState("projectConfig")
CmdGotoNode("\\\\projectAbfrage")
return EVENT_IVRGOTONODE
elseCmdGotoNode("\\\\projectAbfrage")
return EVENT_IVRGOTONODE
SetFmsState("projectRecord")
CmdGotoNode("\\\\projectRecord")
return EVENT_IVRGOTONODE
endCmdGotoNode("\\\\projectRecord")
return EVENT_IVRGOTONODE
-- *************************************
-- ***** projectVox -> INITIAL
-- *************************************
else
SetFmsState("projectVox")
return EVENT_RESTARTSCRIPT
end
return EVENT_RESTARTSCRIPT
- LogFmsState("projectvox.lua")- dient als Hilfe im Logfile, alle Logs hiernach werden durch projectVox verursacht.
- if (CheckFmsState("projectVox")) then - Abfrage, ob sich SM im LUA-Zustand projectVox befindet, schlägt beim ersten Durchlauf durch dieses Script fehl, da noch kein LUA-Zustand angegeben wurde
- else- beim ersten Aufruf wird demnach dieser Zweig aufgerufen, in dem mit "SetFmsState" der LUA-Zustand gesetzt wird
- return EVENT_RESTARTSCRIPT - das Script wird nach Abarbeiten wieder neu gestartet
- if (CheckFmsState("projectVox")) then - Abfrage ist nun erfolgreich, diese Verzweigung wird abgearbeitet
- if (EvtGateway()) then- Wurde SM gestartet, weil ein Event vom zugehörigen Gateway(GW) gesendet wurde? Ereignisse eines GW werden bspw. durch den Button "Auf mein Telefon" im Outlook oder Notes angestoßen. Dahinter verbergen sich Scripte, die das Notesgateway oder den Exchange Connector veranlassen ein Ereignis an den Voiceserver zu senden
- SetFmsState("")- Setzen des Lua-Zustandes
- CmdGotoNode("")- Aufruf des nächsten Projektes,
- mit "\\" wird der Basispfad aufgerufen,
- "\" muss escaped werden
- SetFmsState("")
- if (EvtGateway()) then
LUA Kommandos
- CmdSelectLanguage
- CmdDeletePlayList
- CmdStoreNumberAsDid
- CmdGetUserInfo
- CmdIsGateway
- CmdAdjustPlaying
- CmdStopRecord
- CmdPlay
- CmdPlayPrompt
- CmdRecord
- CmdDeleteRecord
- CmdDeleteName
- CmdDeleteGreeting
- CmdDeleteHoliday
- CmdDeleteSpecialMessage
- CmdRestartPlayList
- CmdRestartThis
- CmdPlayPrevious
- CmdPlayNext
- CmdSetTimer
- CmdCollectAll
- CmdCollectN
- CmdSendMessageToGateway
- CmdDeleteMessageFromGateway
- CmdPlayGatewayMessageCount
- CmdAreMessagesAvailable
- CmdCheckPin
- CmdSetPin
- CmdSetCounter
- CmdDecreaseCounter
- CmdActivatePlayList
- CmdRecordName
- CmdRecordGreeting
- CmdRecordHoliday
- CmdRecordSpecialMessage
- CmdRecordFileMessage
- CmdOnHook
- CmdOnHookOutgoing
- CmdConnect
- CmdGosubNode
- CmdGotoNode
- CmdReturn
- CmdSetVariables
- CmdGetVariables
- CmdDumpVariables
- CmdDeleteVariables
- CmdSetState
- CmdGetDate
- CmdGetDay
- CmdGetTimedDest
Aktuell nicht genutzt:
- CmdGetCalledPartyNumber
- CmdGetCallingPartyNumber
- CmdGetRedirectingNumber
- CmdGreetingMode
- CmdGetPin
- CfgGetMinimalPinLength
- CfgGetUseExactPinLength
- CfgGetPinMode //requieres Pin, requieres OAD, requieres both
- CfgGetHolidayMode //after holiday-greetingfile start record or not
Rückgabewerte
Rückgabewerte aus dem Script sind Events, d.h. es können die gleichen Events aus dem Script ausgegeben werden, wie sie auch von aussen auftreten können. Zunächst die typischen Rückgabewerte, die Scripte liefern können
- EVENT_RESTARTSCRIPT
- EVENT_WAITFORNEXTEVENT
- EVENT_IVRGOTONODE
Weitere Events, auf die im Script reagiert werden kann:
- EVENT_NOEVENT; eigentlich kein Event ;-)
- EVENT_OPEN
- EVENT_CLOSE
- EVENT_DTMF0
- EVENT_DTMF1
- EVENT_DTMF2
- EVENT_DTMF3
- EVENT_DTMF4
- EVENT_DTMF5
- EVENT_DTMF6
- EVENT_DTMF7
- EVENT_DTMF8
- EVENT_DTMF9
- EVENT_DTMFSTAR
- EVENT_DTMFHASHMARK
- EVENT_TIMER
- EVENT_RECORDSTART
- EVENT_STATEPOPPED
- EVENT_IVROK
- EVENT_IVRNOK
- EVENT_PLAYED
- EVENT_PAST_CLOSE
- EVENT_PRE_OPEN
- EVENT_OPEN_OUTGOING
- EVENT_PROMPTPLAYED
Kommentar