//private ExtensionStateService extStateService; public ScriptService(TelecomProviderBase telecomProvider, CallButlerDataProviderBase dataProvider, VoicemailService vmService, VoicemailMailerService vmMailerService, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService registrarService/*, ExtensionStateService extStateService*/) { this.registrarService = registrarService; this.dataProvider = dataProvider; this.telecomProvider = telecomProvider; this.pluginManager = pluginManager; //this.extStateService = extStateService; // Create our services this.vmService = vmService; this.vmMailerService = vmMailerService; // Create a new script processor for each of our inbound lines tsInterfaces = new Dictionary<int, TelecomScriptInterface>(); int lineCount = Properties.Settings.Default.LineCount; // Math.Min(Properties.Settings.Default.LineCount, Licensing.Management.AppPermissions.StatGetPermissionScalar("MaxLineCount")); for (int index = 1; index <= lineCount; index++) { TelecomScriptInterface tsInterface = new TelecomScriptInterface(telecomProvider, dataProvider, pluginManager, registrarService/*, extStateService*/, index); tsInterfaces.Add(index, tsInterface); tsInterface.TransferCall += new EventHandler<WOSI.IVR.IML.TransferEventArgs>(tsInterface_TransferCall); tsInterface.IMLInterpreter.ScriptStarted += new EventHandler(IMLInterpreter_ScriptStarted); tsInterface.IMLInterpreter.ScriptFinished += new EventHandler(IMLInterpreter_ScriptFinished); tsInterface.IMLInterpreter.DtmfTimeoutInMs = Properties.Settings.Default.DTMFTimeoutInMs; } // Add a startup entry in our log LoggingService.AddLogEntry(LogLevel.Basic, Services.PrivateLabelService.ReplaceProductName(Services.PrivateLabelService.ReplaceProductName("CallButler Service Started")), false); // Attach to our telecom provider events telecomProvider.IncomingCall += new EventHandler<CallEventArgs>(telecomProvider_IncomingCall); telecomProvider.Error += new EventHandler<CallButler.Telecom.ErrorEventArgs>(telecomProvider_Error); telecomProvider.CallConnected += new EventHandler<CallEventArgs>(telecomProvider_CallConnected); telecomProvider.CallEnded += new EventHandler<LineEventArgs>(telecomProvider_CallEnded); telecomProvider.CallFailed += new EventHandler<CallFailureEventArgs>(telecomProvider_CallFailed); telecomProvider.IncomingBusyCall += new EventHandler<BusyCallEventArgs>(telecomProvider_IncomingBusyCall); }
//private ExtensionStateService extStateService; public ScriptService(TelecomProviderBase telecomProvider, CallButlerDataProviderBase dataProvider, VoicemailService vmService, VoicemailMailerService vmMailerService, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService registrarService /*, ExtensionStateService extStateService*/) { this.registrarService = registrarService; this.dataProvider = dataProvider; this.telecomProvider = telecomProvider; this.pluginManager = pluginManager; //this.extStateService = extStateService; // Create our services this.vmService = vmService; this.vmMailerService = vmMailerService; // Create a new script processor for each of our inbound lines tsInterfaces = new Dictionary <int, TelecomScriptInterface>(); int lineCount = Properties.Settings.Default.LineCount; // Math.Min(Properties.Settings.Default.LineCount, Licensing.Management.AppPermissions.StatGetPermissionScalar("MaxLineCount")); for (int index = 1; index <= lineCount; index++) { TelecomScriptInterface tsInterface = new TelecomScriptInterface(telecomProvider, dataProvider, pluginManager, registrarService /*, extStateService*/, index); tsInterfaces.Add(index, tsInterface); tsInterface.TransferCall += new EventHandler <WOSI.IVR.IML.TransferEventArgs>(tsInterface_TransferCall); tsInterface.IMLInterpreter.ScriptStarted += new EventHandler(IMLInterpreter_ScriptStarted); tsInterface.IMLInterpreter.ScriptFinished += new EventHandler(IMLInterpreter_ScriptFinished); } // Add a startup entry in our log LoggingService.AddLogEntry(LogLevel.Basic, Services.PrivateLabelService.ReplaceProductName(Services.PrivateLabelService.ReplaceProductName("CallButler Service Started")), false); // Attach to our telecom provider events telecomProvider.IncomingCall += new EventHandler <CallEventArgs>(telecomProvider_IncomingCall); telecomProvider.Error += new EventHandler <CallButler.Telecom.ErrorEventArgs>(telecomProvider_Error); telecomProvider.CallConnected += new EventHandler <CallEventArgs>(telecomProvider_CallConnected); telecomProvider.CallEnded += new EventHandler <LineEventArgs>(telecomProvider_CallEnded); telecomProvider.CallFailed += new EventHandler <CallFailureEventArgs>(telecomProvider_CallFailed); telecomProvider.IncomingBusyCall += new EventHandler <BusyCallEventArgs>(telecomProvider_IncomingBusyCall); }
private void Initialize() { if (Properties.Settings.Default.ProductID != null && Properties.Settings.Default.ProductID.Length > 0) { lastErrorMessage = null; notifyIcon.Text = Properties.Settings.Default.ProductDescription; // Load our application permissions //Licensing.Management.AppPermissions.LoadPermissionData(Properties.Settings.Default.ProductID, Properties.Resources.Permissions); // Load our dataprovider System.Collections.Specialized.NameValueCollection settings = new System.Collections.Specialized.NameValueCollection(); switch (Properties.Settings.Default.DataProviderType) { case LocalCallButlerDataProviderTypes.XmlDataProvider: // Create our settings settings["RootDataDirectory"] = WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.XmlDataRootDirectory); settings["RootGreetingSoundDirectory"] = WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.GreetingSoundRootDirectory); dataProvider = new CallButlerXmlDataProvider(); dataProvider.Connect(settings); break; /*case LocalCallButlerDataProviderTypes.SqlServerDataProvider: settings["RootDataDirectory"] = WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.XmlDataRootDirectory); settings["RootGreetingSoundDirectory"] = WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.GreetingSoundRootDirectory); settings["ConnectionString"] = Properties.Settings.Default.SqlConnectionString; dataProvider = new CallButlerSQLServerDataProvider(); dataProvider.Connect(settings); break;*/ } /*if (Properties.Settings.Default.EnableKinesisServer) { extStateService = new ExtensionStateService(dataProvider); }*/ // Create our telecom provider int lineCount = /*Math.Min(*/ Properties.Settings.Default.LineCount; /*, Licensing.Management.AppPermissions.StatGetPermissionScalar("MaxLineCount"));*/ switch (Properties.Settings.Default.TelecomProviderType) { case TelecomProviders.inTELIPhoneTelecomProvider: { telecomProvider = new inTELIPhoneTelecomProvider(mnuServiceOptions, notifyIcon, lineCount, Properties.Settings.Default.UseStun, Properties.Settings.Default.StunServer, Properties.Settings.Default.SipPort, Properties.Settings.Default.UseInternalAddressForSIPMessages); // Register all of our profiles //if (Licensing.Management.AppPermissions.StatIsPermitted("Providers")) //{ WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable providers = dataProvider.GetProviders(Properties.Settings.Default.CustomerID); foreach (WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider in providers) { if (provider.IsEnabled) { telecomProvider.Register(provider.ProviderID, provider); } } //} // Start our PBX registrar engine if (Properties.Settings.Default.EnablePBX /*&& Licensing.Management.AppPermissions.StatIsPermitted("PBX.Registrar")*/) { pbxRegistrar = new PBXRegistrarService(telecomProvider, dataProvider/*, extStateService*/); } break; } } // Initialize our codecs if (Properties.Settings.Default.AudioCodecs != null && Properties.Settings.Default.AudioCodecs.Length > 0) telecomProvider.SetAudioCodecs(Properties.Settings.Default.AudioCodecs); // Create our plugin manager object pluginManager = new Utilities.PluginManagement.PluginManager(); // Create our voicemail mailer service vmMailerService = new VoicemailMailerService(); // Initialize our voicemail service vmService = new VoicemailService(dataProvider, pbxRegistrar, pluginManager, vmMailerService); // Create our script server scriptService = new ScriptService(telecomProvider, dataProvider, vmService, vmMailerService, pluginManager, pbxRegistrar/*, extStateService*/); // Load our plugins CallButler.Service.Plugin.CallButlerServiceContext serviceContext = new CallButler.Service.Plugin.CallButlerServiceContext(scriptService); pluginManager.LoadPlugins(WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.PluginDirectory), "*.dll", true, typeof(CallButler.Service.Plugin.CallButlerServicePlugin)); foreach (CallButler.Service.Plugin.CallButlerServicePlugin plugin in pluginManager.Plugins) { try { plugin.Load(serviceContext); } catch { } } try { mnuPlugins.Visible = false; mnuSeparator4.Visible = false; } catch { } // Initialize our management interface managementInterfaceServer.Initialize(this, dataProvider, telecomProvider, scriptService, pluginManager, pbxRegistrar, vmService); // Create our default greetings if this the first time we've run if (Properties.Settings.Default.FirstTimeRun) { WOSI.CallButler.Data.CallButlerDataset.LocalizedGreetingsDataTable lgTable = new CallButlerDataset.LocalizedGreetingsDataTable(); WOSI.CallButler.Data.CallButlerDataset.LocalizedGreetingsRow lgRow; if (dataProvider.GetGreeting(Properties.Settings.Default.CustomerID, WOSI.CallButler.Data.Constants.WelcomeGreetingGuid) == null) { lgRow = lgTable.NewLocalizedGreetingsRow(); lgRow.GreetingID = WOSI.CallButler.Data.Constants.WelcomeGreetingGuid; lgRow.LanguageID = "en"; lgRow.LocalizedGreetingID = Guid.NewGuid(); lgRow.Type = (short)WOSI.CallButler.Data.GreetingType.SoundGreeting; lgTable.AddLocalizedGreetingsRow(lgRow); } if (dataProvider.GetGreeting(Properties.Settings.Default.CustomerID, WOSI.CallButler.Data.Constants.MainMenuGreetingGuid) == null) { lgRow = lgTable.NewLocalizedGreetingsRow(); lgRow.GreetingID = WOSI.CallButler.Data.Constants.MainMenuGreetingGuid; lgRow.LanguageID = "en"; lgRow.LocalizedGreetingID = Guid.NewGuid(); lgRow.Type = (short)WOSI.CallButler.Data.GreetingType.SoundGreeting; lgTable.AddLocalizedGreetingsRow(lgRow); } managementInterfaceServer.PersistLocalizedGreeting(Properties.Settings.Default.CustomerID, lgTable); Properties.Settings.Default.FirstTimeRun = false; Properties.Settings.Default.Save(); } // Setup our default language if (Properties.Settings.Default.DefaultLanguage.Length == 0) { Properties.Settings.Default.DefaultLanguage = System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag; Properties.Settings.Default.Save(); } telecomProvider.Startup(); CallButlerService.DialPlanManager = new DialPlanManagerService(pbxRegistrar, dataProvider, telecomProvider); if (tcpManagementDataServer != null) tcpManagementDataServer.StartServer(); // Create our extension management service /*if (Properties.Settings.Default.EnableKinesisServer) { emService = new KinesisService(dataProvider, extStateService, scriptService, vmService); emService.Start(); }*/ } }
private void DeInitialize() { if (mnuMain.InvokeRequired) mnuMain.Invoke(clearMenuItemsHandler); else mnuServiceOptions.DropDownItems.Clear(); /*if (extStateService != null) { extStateService.ClearState(); extStateService = null; } if (emService != null) { emService.Stop(); emService.Dispose(); emService = null; }*/ if (pluginManager != null) { // Unload our plugins foreach (CallButler.Service.Plugin.CallButlerServicePlugin plugin in pluginManager.Plugins) { plugin.Unload(); } pluginManager.UnloadPlugins(); pluginManager = null; } if (scriptService != null) { scriptService.Shutdown(); scriptService = null; } if (vmMailerService != null) { vmMailerService = null; } if (vmService != null) { vmService = null; } dataProvider = null; if (CallButlerService.DialPlanManager != null) { CallButlerService.DialPlanManager = null; } if (pbxRegistrar != null) { pbxRegistrar.Shutdown(); pbxRegistrar = null; } if (telecomProvider != null) { telecomProvider.Shutdown(); telecomProvider = null; } if (tcpManagementDataServer != null) tcpManagementDataServer.StopServer(); GC.Collect(); }
public void ProcessExternalCommand(string command, string commandData, string eventToken, TelecomScriptInterface tsInterface, CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService pbxRegistrar) { // Parse out our external event action if (Enum.IsDefined(typeof(BaseExternalCommands), command)) { BaseExternalCommands externalCommand = WOSI.Utilities.EnumUtils <BaseExternalCommands> .Parse(command); string languageID = "en"; switch (externalCommand) { case BaseExternalCommands.CALLBUTLERINTERNAL_StartAddonModule: CallButler.Service.Plugin.CallButlerAddonModulePlugin[] addonModules = pluginManager.GetAllPluginsOfType <CallButler.Service.Plugin.CallButlerAddonModulePlugin>(); foreach (CallButler.Service.Plugin.CallButlerAddonModulePlugin addonModule in addonModules) { if (addonModule.PluginID.ToString() == commandData) { try { // Make sure the module is licensed if (!addonModule.IsLicensed) { break; } // We found our module and we should load the script it uses tsInterface.ScriptProcessor = new AddonModuleScriptProcessor(addonModule); tsInterface.ScriptProcessor.StartProcessing(tsInterface, telecomProvider, dataProvider); return; } catch (Exception e) { LoggingService.AddLogEntry(WOSI.CallButler.ManagementInterface.LogLevel.ErrorsOnly, "Failed to load Addon-Module '" + addonModule.PluginName + "'\r\n\r\n" + e.Message + "\r\n\r\n" + e.StackTrace, true); } } } break; case BaseExternalCommands.CALLBUTLERINTERNAL_ReturnToCallFlowMainMenu: // Return to the Call flow main menu. tsInterface.ScriptProcessor = new StandardScriptProcessor(pluginManager, pbxRegistrar); ((StandardScriptProcessor)tsInterface.ScriptProcessor).StartFromMainMenu(tsInterface); break; case BaseExternalCommands.CALLBUTLERINTERNAL_PlayLicenseIntroGreeting: // If the line isn't in use, don't do anything if (!telecomProvider.IsLineInUse(tsInterface.LineNumber)) { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); break; } // Read our intro sound bytes byte[] introSoundBytes = null; if (telecomProvider.AudioInputRate == 8000) { introSoundBytes = new byte[Properties.Resources.powered_by_8khz.Length]; Properties.Resources.powered_by_8khz.Read(introSoundBytes, 0, introSoundBytes.Length); } else if (telecomProvider.AudioInputRate == 16000) { introSoundBytes = new byte[Properties.Resources.powered_by_16khz.Length]; Properties.Resources.powered_by_16khz.Read(introSoundBytes, 0, introSoundBytes.Length); } // Play our license intro sound if (introSoundBytes != null) { telecomProvider.PlaySound(tsInterface.LineNumber, introSoundBytes); } break; case BaseExternalCommands.CALLBUTLERINTERNAL_PlaySystemSound: // If the line isn't in use, don't do anything if (!telecomProvider.IsLineInUse(tsInterface.LineNumber)) { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); break; } // Get the sound with the current language languageID = tsInterface.IMLInterpreter.GetLocalVariable("LanguageID"); string soundFilename = GetSoundFileForLanguage(languageID, commandData); if (soundFilename == null) { // If we don't get a sound with the current language, try the default language soundFilename = GetSoundFileForLanguage(Properties.Settings.Default.DefaultLanguage, commandData); if (soundFilename == null) { // If we don't get a sound file with the default language, try english soundFilename = GetSoundFileForLanguage("en", commandData); if (soundFilename == null) { if (!File.Exists(soundFilename)) { // If the sound still doesn't exist, tell the IML interpreter to move on tsInterface.IMLInterpreter.SignalEventCallback(eventToken); break; } } } } // If we get here, our system sound should exist and we should play it. if (string.Compare(commandData, "ring.snd", true) == 0) { telecomProvider.PlaySound(tsInterface.LineNumber, soundFilename, true); } else { telecomProvider.PlaySound(tsInterface.LineNumber, soundFilename, false); } LoggingService.AddLogEntry(LogLevel.Extended, "(Line " + tsInterface.LineNumber + ") Playing sound at " + soundFilename, false); break; case BaseExternalCommands.CALLBUTLERINTERNAL_PlayGreeting: // If the line isn't in use, don't do anything if (!telecomProvider.IsLineInUse(tsInterface.LineNumber)) { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); break; } // Get our current language languageID = tsInterface.IMLInterpreter.GetLocalVariable("LanguageID"); // Create our greetingID Guid greetingID = new Guid(commandData); // Get the greeting in our selected language WOSI.CallButler.Data.CallButlerDataset.GreetingsRow greeting = dataProvider.GetGreeting(Properties.Settings.Default.CustomerID, greetingID); if (greeting != null) { // Get the greeting for our specified language WOSI.CallButler.Data.CallButlerDataset.LocalizedGreetingsRow localizedGreeting = dataProvider.GetLocalizedGreeting(Properties.Settings.Default.CustomerID, greetingID, languageID); if (localizedGreeting == null) { // If the greeting doesn't exist in the current language, try using the default language localizedGreeting = dataProvider.GetLocalizedGreeting(Properties.Settings.Default.CustomerID, greetingID, Properties.Settings.Default.DefaultLanguage); if (localizedGreeting == null) { // If the greeting doesn't exist in the default language, heck just return the first one that exists WOSI.CallButler.Data.CallButlerDataset.LocalizedGreetingsRow[] localizedGreetings = greeting.GetLocalizedGreetingsRows(); if (localizedGreetings.Length > 0) { localizedGreeting = localizedGreetings[0]; } } } if (localizedGreeting != null) { // Determine how we should play this greeting WOSI.CallButler.Data.GreetingType greetingType = (WOSI.CallButler.Data.GreetingType)localizedGreeting.Type; switch (greetingType) { case WOSI.CallButler.Data.GreetingType.SoundGreeting: // Create our sound file path string soundFilePath = WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.GreetingSoundRootDirectory) + "\\" + localizedGreeting.LanguageID + "\\" + greetingID.ToString() + ".snd"; if (File.Exists(soundFilePath)) { telecomProvider.PlaySound(tsInterface.LineNumber, soundFilePath, false); LoggingService.AddLogEntry(LogLevel.Extended, "(Line " + tsInterface.LineNumber + ") Playing sound at " + soundFilePath, false); } else { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); } break; case WOSI.CallButler.Data.GreetingType.TextGreeting: // Speak our text string textToSpeak = tsInterface.IMLInterpreter.ParseVariableTokens(localizedGreeting.Data); // Take out any XML if (!WOSI.Utilities.StringUtils.IsWellFormedXml(textToSpeak)) { textToSpeak = WOSI.Utilities.StringUtils.XmlEncodeString(textToSpeak); } if (textToSpeak.Length > 0) { if (!localizedGreeting.IsVoiceNull() && localizedGreeting.Voice.Length > 0) { textToSpeak = "<voice required=\"Name=" + localizedGreeting.Voice + "\">" + textToSpeak + "</voice>"; } else if (Properties.Settings.Default.DefaultTTSVoice != null && Properties.Settings.Default.DefaultTTSVoice.Length > 0) { textToSpeak = "<voice required=\"Name=" + Properties.Settings.Default.DefaultTTSVoice + "\">" + textToSpeak + "</voice>"; } telecomProvider.SpeakText(tsInterface.LineNumber, textToSpeak); LoggingService.AddLogEntry(LogLevel.Extended, "(Line " + tsInterface.LineNumber + ") Speaking '" + textToSpeak + "'", false); } else { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); } break; } } else { // If no greeting is found in the right language, tell the interpreter to move on tsInterface.IMLInterpreter.SignalEventCallback(eventToken); } } // If the greeting isn't found, tell the interpreter to go on else { tsInterface.IMLInterpreter.SignalEventCallback(eventToken); } break; } } else { OnExternalCommand(command, commandData, eventToken, tsInterface, telecomProvider, dataProvider); if (linkedScriptProcessor != null) { linkedScriptProcessor.OnLinkedExternalCommand(command, commandData, eventToken, tsInterface, telecomProvider, dataProvider); } } }
public virtual void OnAnswerDetectMachineGreetingFinished(CallButler.Telecom.TelecomProviderBase telecomProvider, LineEventArgs e) { }
public virtual void OnAnswerDetectHuman(CallButler.Telecom.TelecomProviderBase telecomProvider, LineEventArgs e) { }
public virtual void OnCallTemporarilyMoved(CallButler.Telecom.TelecomProviderBase telcomProvider, CallEventArgs e) { }
public virtual void OnIncomingTransfer(CallButler.Telecom.TelecomProviderBase telcomProvider, CallButler.Telecom.TransferEventArgs e) { }
public virtual void OnCallConnected(CallButler.Telecom.TelecomProviderBase telecomProvider, LineEventArgs e) { }
public virtual void OnDTMFDigit(CallButler.Telecom.TelecomProviderBase telecomProvider, CallInputEventArgs e) { }
protected virtual void OnStartProcessing(TelecomScriptInterface tsInterface, CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider) { }
public void StartProcessing(TelecomScriptInterface tsInterface, CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider) { OnStartProcessing(tsInterface, telecomProvider, dataProvider); }
protected virtual void OnLinkedExternalCommand(string command, string commandData, string eventToken, TelecomScriptInterface tsInterface, CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider) { }
public TelecomScriptInterface(CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService pbxRegistrar/*, ExtensionStateService extStateService*/, int lineNumber) { this.telecomProvider = telecomProvider; this.dataProvider = dataProvider; this.lineNumber = lineNumber; this.pluginManager = pluginManager; this.pbxRegistrar = pbxRegistrar; //this.extStateService = extStateService; // Attach to our telecom provider events telecomProvider.CallEnded += new EventHandler<LineEventArgs>(telecomProvider_CallEnded); telecomProvider.DTMFToneRecognized += new EventHandler<CallInputEventArgs>(telecomProvider_DTMFToneRecognized); telecomProvider.FinishedSpeaking += new EventHandler<LineEventArgs>(telecomProvider_FinishedSpeaking); telecomProvider.SoundFinishedPlaying += new EventHandler<LineEventArgs>(telecomProvider_SoundFinishedPlaying); telecomProvider.TransferFailed += new EventHandler<LineEventArgs>(telecomProvider_TransferFailed); telecomProvider.TransferSucceeded += new EventHandler<LineEventArgs>(telecomProvider_TransferSucceeded); telecomProvider.CallConnected += new EventHandler<CallEventArgs>(telecomProvider_CallConnected); telecomProvider.CallFailed += new EventHandler<CallFailureEventArgs>(telecomProvider_CallFailed); telecomProvider.FaxToneDetected += new EventHandler<LineEventArgs>(telecomProvider_FaxToneDetected); telecomProvider.RemoteOnHold += new EventHandler<LineEventArgs>(telecomProvider_RemoteOnHold); telecomProvider.RemoteOffHold += new EventHandler<LineEventArgs>(telecomProvider_RemoteOffHold); telecomProvider.SpeechRecognized += new EventHandler<CallInputEventArgs>(telecomProvider_SpeechRecognized); telecomProvider.IncomingTransfer += new EventHandler<CallButler.Telecom.TransferEventArgs>(telecomProvider_IncomingTransfer); telecomProvider.CallTemporarilyMoved += new EventHandler<CallEventArgs>(telecomProvider_CallTemporarilyMoved); telecomProvider.AnswerDetectHuman += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectHuman); telecomProvider.AnswerDetectMachine += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectMachine); telecomProvider.AnswerDetectMachineGreetingFinished += new EventHandler<LineEventArgs>(telecomProvider_AnswerDetectMachineGreetingFinished); imlInterp = new WOSI.IVR.IML.IMLInterpreter(WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.ImlPluginsFolder)); // Attach to our interpreter events imlInterp.AsyncExternalAction += new EventHandler<AsyncExternalActionEventArgs>(imlInterp_AsyncExternalAction); imlInterp.DeleteLastRecording += new EventHandler(imlInterp_DeleteLastRecording); imlInterp.CopyLastRecording += new EventHandler<SoundFileEventArgs>(imlInterp_CopyLastRecording); imlInterp.HangUp += new EventHandler(imlInterp_HangUp); imlInterp.PlaySound += new EventHandler<PlaySoundEventArgs>(imlInterp_PlaySound); imlInterp.ScriptError += new EventHandler<ScriptErrorEventArgs>(imlInterp_ScriptError); imlInterp.ScriptFinished += new EventHandler(imlInterp_ScriptFinished); imlInterp.SpeakText += new EventHandler<SpeakTextEventArgs>(imlInterp_SpeakText); imlInterp.StartRecording += new EventHandler<SoundFileEventArgs>(imlInterp_StartRecording); imlInterp.StopRecording += new EventHandler<StopRecordingEventArgs>(imlInterp_StopRecording); imlInterp.SyncExternalAction += new EventHandler<SyncExternalActionEventArgs>(imlInterp_SyncExternalAction); imlInterp.TransferCall += new EventHandler<WOSI.IVR.IML.TransferEventArgs>(imlInterp_TransferCall); imlInterp.Call += new EventHandler<TelephoneNumberEventArgs>(imlInterp_Call); imlInterp.StopAllSounds += new EventHandler(imlInterp_StopAllSounds); imlInterp.ScriptStarted += new EventHandler(imlInterp_ScriptStarted); imlInterp.NewSpeechPhrases += new EventHandler<SpeechPhraseEventArgs>(imlInterp_NewSpeechPhrases); imlInterp.TraceMessage += new EventHandler<TraceEventArgs>(imlInterp_TraceMessage); imlInterp.JoinConference += new EventHandler<ConferenceEventArgs>(imlInterp_JoinConference); imlInterp.LeaveConference += new EventHandler(imlInterp_LeaveConference); // Create our default internal provider WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable defaultInternalProviderTable = new WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable(); defaultInternalProvider = defaultInternalProviderTable.NewProvidersRow(); defaultInternalProvider.CustomerID = Properties.Settings.Default.CustomerID; defaultInternalProvider.AutoDetectAudio = true; defaultInternalProvider.EnableRegistration = false; defaultInternalProvider.SupressOutboundUsername = false; if (Properties.Settings.Default.InternalSIPDomain != null && Properties.Settings.Default.InternalSIPDomain.Length > 0) defaultInternalProvider.Domain = Properties.Settings.Default.InternalSIPDomain; else { // Get the IP of this machine try { System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); defaultInternalProvider.Domain = telecomProvider.LocalIPAddress; } catch { defaultInternalProvider.Domain = Environment.MachineName; } } defaultInternalProvider.IsDefault = false; }
public TelecomScriptInterface(CallButler.Telecom.TelecomProviderBase telecomProvider, WOSI.CallButler.Data.DataProviders.CallButlerDataProviderBase dataProvider, Utilities.PluginManagement.PluginManager pluginManager, PBXRegistrarService pbxRegistrar /*, ExtensionStateService extStateService*/, int lineNumber) { this.telecomProvider = telecomProvider; this.dataProvider = dataProvider; this.lineNumber = lineNumber; this.pluginManager = pluginManager; this.pbxRegistrar = pbxRegistrar; //this.extStateService = extStateService; // Attach to our telecom provider events telecomProvider.CallEnded += new EventHandler <LineEventArgs>(telecomProvider_CallEnded); telecomProvider.DTMFToneRecognized += new EventHandler <CallInputEventArgs>(telecomProvider_DTMFToneRecognized); telecomProvider.FinishedSpeaking += new EventHandler <LineEventArgs>(telecomProvider_FinishedSpeaking); telecomProvider.SoundFinishedPlaying += new EventHandler <LineEventArgs>(telecomProvider_SoundFinishedPlaying); telecomProvider.TransferFailed += new EventHandler <LineEventArgs>(telecomProvider_TransferFailed); telecomProvider.TransferSucceeded += new EventHandler <LineEventArgs>(telecomProvider_TransferSucceeded); telecomProvider.CallConnected += new EventHandler <CallEventArgs>(telecomProvider_CallConnected); telecomProvider.CallFailed += new EventHandler <CallFailureEventArgs>(telecomProvider_CallFailed); telecomProvider.FaxToneDetected += new EventHandler <LineEventArgs>(telecomProvider_FaxToneDetected); telecomProvider.RemoteOnHold += new EventHandler <LineEventArgs>(telecomProvider_RemoteOnHold); telecomProvider.RemoteOffHold += new EventHandler <LineEventArgs>(telecomProvider_RemoteOffHold); telecomProvider.SpeechRecognized += new EventHandler <CallInputEventArgs>(telecomProvider_SpeechRecognized); telecomProvider.IncomingTransfer += new EventHandler <CallButler.Telecom.TransferEventArgs>(telecomProvider_IncomingTransfer); telecomProvider.CallTemporarilyMoved += new EventHandler <CallEventArgs>(telecomProvider_CallTemporarilyMoved); telecomProvider.AnswerDetectHuman += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectHuman); telecomProvider.AnswerDetectMachine += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectMachine); telecomProvider.AnswerDetectMachineGreetingFinished += new EventHandler <LineEventArgs>(telecomProvider_AnswerDetectMachineGreetingFinished); imlInterp = new WOSI.IVR.IML.IMLInterpreter(WOSI.Utilities.FileUtils.GetApplicationRelativePath(Properties.Settings.Default.ImlPluginsFolder)); // Attach to our interpreter events imlInterp.AsyncExternalAction += new EventHandler <AsyncExternalActionEventArgs>(imlInterp_AsyncExternalAction); imlInterp.DeleteLastRecording += new EventHandler(imlInterp_DeleteLastRecording); imlInterp.CopyLastRecording += new EventHandler <SoundFileEventArgs>(imlInterp_CopyLastRecording); imlInterp.HangUp += new EventHandler(imlInterp_HangUp); imlInterp.PlaySound += new EventHandler <PlaySoundEventArgs>(imlInterp_PlaySound); imlInterp.ScriptError += new EventHandler <ScriptErrorEventArgs>(imlInterp_ScriptError); imlInterp.ScriptFinished += new EventHandler(imlInterp_ScriptFinished); imlInterp.SpeakText += new EventHandler <SpeakTextEventArgs>(imlInterp_SpeakText); imlInterp.StartRecording += new EventHandler <SoundFileEventArgs>(imlInterp_StartRecording); imlInterp.StopRecording += new EventHandler <StopRecordingEventArgs>(imlInterp_StopRecording); imlInterp.SyncExternalAction += new EventHandler <SyncExternalActionEventArgs>(imlInterp_SyncExternalAction); imlInterp.TransferCall += new EventHandler <WOSI.IVR.IML.TransferEventArgs>(imlInterp_TransferCall); imlInterp.Call += new EventHandler <TelephoneNumberEventArgs>(imlInterp_Call); imlInterp.StopAllSounds += new EventHandler(imlInterp_StopAllSounds); imlInterp.ScriptStarted += new EventHandler(imlInterp_ScriptStarted); imlInterp.NewSpeechPhrases += new EventHandler <SpeechPhraseEventArgs>(imlInterp_NewSpeechPhrases); imlInterp.TraceMessage += new EventHandler <TraceEventArgs>(imlInterp_TraceMessage); imlInterp.JoinConference += new EventHandler <ConferenceEventArgs>(imlInterp_JoinConference); imlInterp.LeaveConference += new EventHandler(imlInterp_LeaveConference); // Create our default internal provider WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable defaultInternalProviderTable = new WOSI.CallButler.Data.CallButlerDataset.ProvidersDataTable(); defaultInternalProvider = defaultInternalProviderTable.NewProvidersRow(); defaultInternalProvider.CustomerID = Properties.Settings.Default.CustomerID; defaultInternalProvider.AutoDetectAudio = true; defaultInternalProvider.EnableRegistration = false; defaultInternalProvider.SupressOutboundUsername = false; if (Properties.Settings.Default.InternalSIPDomain != null && Properties.Settings.Default.InternalSIPDomain.Length > 0) { defaultInternalProvider.Domain = Properties.Settings.Default.InternalSIPDomain; } else { // Get the IP of this machine try { System.Net.IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); defaultInternalProvider.Domain = telecomProvider.LocalIPAddress; } catch { defaultInternalProvider.Domain = Environment.MachineName; } } defaultInternalProvider.IsDefault = false; }