public bool PlaceOutboundCall(string jobID, string callID, WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider, string callTo, string fromCallerID, string fromCallerNumber, string scriptToRun, string answeringMachineScriptToRun, string answeringMachineDetectionSettings, System.Collections.Specialized.NameValueCollection scriptVariables, int timeout, CallButler.Service.Plugin.CallButlerDialerPlugin dialerPlugin) { if (File.Exists(scriptToRun)) { int openLine = FindAndHoldOpenLine(); if (openLine != 0) { tsInterfaces[openLine].ScriptProcessor = new AutoDialerProcessor(telecomProvider, tsInterfaces[openLine], jobID, callID, scriptToRun, answeringMachineScriptToRun, answeringMachineDetectionSettings, timeout, scriptVariables, dialerPlugin); // Place our outbound call telecomProvider.Call(openLine, callTo, fromCallerID, fromCallerNumber, false, provider); return(true); } else { if (dialerPlugin != null) { dialerPlugin.OnCallStatus(jobID, callID, CallButler.Service.Plugin.CallButlerDialerPlugin.CallStatus.NoLinesAvailable); } } } else { if (dialerPlugin != null) { dialerPlugin.OnError(jobID, callID, "Could not find the script located at '" + scriptToRun + "'"); } } return(false); }
public bool PlaceOutboundCall(string jobID, string callID, string providerName, string callTo, string fromCallerID, string fromCallerNumber, string scriptToRun, string answeringMachineScriptToRun, string answeringMachineDetectionSettings, System.Collections.Specialized.NameValueCollection scriptVariables, int timeout, CallButler.Service.Plugin.CallButlerDialerPlugin dialerPlugin) { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[] providers = (WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[])dataProvider.GetProviders(Properties.Settings.Default.CustomerID).Select("Name = '" + providerName + "'"); WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = null; if (providers.Length > 0) { provider = providers[0]; } return(PlaceOutboundCall(jobID, callID, provider, callTo, fromCallerID, fromCallerNumber, scriptToRun, answeringMachineScriptToRun, answeringMachineDetectionSettings, scriptVariables, timeout, dialerPlugin)); }
private WOSI.CallButler.Data.CallButlerDataset.ProvidersRow GetDefaultProvider() { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = defaultInternalProvider; WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[] providers = (WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[])dataProvider.GetProviders(Properties.Settings.Default.CustomerID).Select("IsDefault = true"); if (providers.Length > 0) { provider = providers[0]; } return(provider); }
private SIPProfile ConvertProfile(WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider) { SIPProfile callProfile = new SIPProfile(); callProfile = new SIPProfile(); callProfile.AuthPassword = WOSI.Utilities.CryptoUtils.Decrypt(provider.AuthPassword, WOSI.CallButler.Data.Constants.EncryptionPassword); callProfile.AuthUsername = provider.AuthUsername; callProfile.DisplayName = provider.DisplayName; callProfile.DomainRealm = provider.Domain; callProfile.SIPProxyServer = provider.SIPProxy; callProfile.SIPRegistrarServer = provider.SIPRegistrar; callProfile.Username = provider.Username; callProfile.AutoDetectAudio = provider.AutoDetectAudio; return(callProfile); }
public void PlaceCall(TelephoneNumberEventArgs e) { if (!telecomProvider.IsLineInUse(lineNumber) && e.Number.Length > 0) { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow profile = FindProvider(e.Profile); telecomProvider.Call(lineNumber, e.Number, e.FromCallerID, e.FromCallerNumber, e.Replaces, e.ReferredBy, e.RequestAutoAnswer, profile); LoggingService.AddLogEntry(LogLevel.Basic, "(Line " + lineNumber + ") Making an outgoing call to " + WOSI.Utilities.StringUtils.FormatPhoneNumber(e.Number), false); imlInterp.SignalEventCallback(e.EventToken); } else { imlInterp.SignalCallFailure(); } }
public override void Register(Guid registrationID, object registrationParams) { // If this profile exists already, unregsiter it if (currentProfiles.ContainsKey(registrationID)) { Unregister(registrationID); } WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = registrationParams as WOSI.CallButler.Data.CallButlerDataset.ProvidersRow; if (provider != null && provider.IsEnabled) { // Create a new SIP Profile SIPProfile profile = new SIPProfile(); profile.DisplayName = provider.DisplayName; profile.Username = provider.Username; profile.AuthUsername = provider.AuthUsername; if (provider.AuthPassword.Length > 0) { profile.AuthPassword = WOSI.Utilities.CryptoUtils.Decrypt(provider.AuthPassword, WOSI.CallButler.Data.Constants.EncryptionPassword); } profile.DomainRealm = provider.Domain; profile.SIPProxyServer = provider.SIPProxy; profile.SIPRegistrarServer = provider.SIPRegistrar; if (provider.EnableRegistration) { ipClient.RegisterProfile(profile, provider.Expires); } lock (profileLock) { currentProfiles.Add(registrationID, profile); } if (provider.IsDefault) { defaultProfile = profile; } } }
/*public WOSI.CallButler.Data.CallButlerDataset.ProvidersRow GetCallProfile(string callingTo) * { * WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = GetDefaultProvider(); * * // Check to see if this is an extension * try * { * WOSI.NET.SIP.SIPURI callURI = new WOSI.NET.SIP.SIPURI(callingTo); * * if (callURI.User != null && callURI.User.Length > 0 && callURI.Host != null && callURI.Host.Length > 0) * { * * } * } * catch * { * } * * /*if (nameOrID != null && nameOrID.Length > 0) * { * if (nameOrID == InternalProviderProfileName) * { * provider = defaultInternalProvider; * } * else * { * WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[] providers = (Data.CallButlerDataset.ProvidersRow[])dataProvider.GetProviders(Properties.Settings.Default.CustomerID).Select(string.Format("Name = '{0}' OR ProviderID = '{0}'", nameOrID)); * * if (providers.Length > 0) * provider = providers[0]; * } * } * * return provider; * }*/ public WOSI.CallButler.Data.CallButlerDataset.ProvidersRow FindProvider(string nameOrID) { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = GetDefaultProvider(); if (nameOrID != null && nameOrID.Length > 0) { if (nameOrID == InternalProviderProfileName) { provider = defaultInternalProvider; } else { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[] providers = (WOSI.CallButler.Data.CallButlerDataset.ProvidersRow[])dataProvider.GetProviders(Properties.Settings.Default.CustomerID).Select(string.Format("Name = '{0}' OR ProviderID = '{0}'", nameOrID)); if (providers.Length > 0) { provider = providers[0]; } } } return(provider); }
public virtual void Call(int lineNumber, string number, string fromCallerID, string fromCallerNumber, string replacesID, string referredBy, bool requestAutoAnswer, WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider) { }
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 override void Call(int lineNumber, string number, string fromCallerID, string fromCallerNumber, bool requestAutoAnswer, WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider) { Call(lineNumber, number, fromCallerID, fromCallerNumber, null, null, requestAutoAnswer, provider); }
public override void Call(int lineNumber, string number, string fromCallerID, string fromCallerNumber, string replacesID, string referredBy, bool requestAutoAnswer, WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider) { string callerID = null; string callerNumber = null; SIPProfile callProfile = defaultProfile; if (provider != null) { callProfile = ConvertProfile(provider); } if (fromCallerID != null && fromCallerID.Length > 0) { callerID = fromCallerID; } if (provider != null && !provider.SupressOutboundUsername && fromCallerNumber != null && fromCallerNumber.Length > 0) { callerNumber = fromCallerNumber; } // Make the call if (callProfile != null) { try { ipClient.Call(lineNumber, callerID, callerNumber, callProfile, number, replacesID, referredBy, requestAutoAnswer); return; } catch (Exception e) { } } RaiseCallFailed(new CallFailureEventArgs(lineNumber, 0, "No profile defined")); }
public bool PlaceOutboundCall(string jobID, string callID, Guid providerID, string callTo, string fromCallerID, string fromCallerNumber, string scriptToRun, string answeringMachineScriptToRun, string answeringMachineDetectionSettings, System.Collections.Specialized.NameValueCollection scriptVariables, int timeout, CallButler.Service.Plugin.CallButlerDialerPlugin dialerPlugin) { WOSI.CallButler.Data.CallButlerDataset.ProvidersRow provider = dataProvider.GetProviders(Properties.Settings.Default.CustomerID).FindByProviderID(providerID); return(PlaceOutboundCall(jobID, callID, provider, callTo, fromCallerID, fromCallerNumber, scriptToRun, answeringMachineScriptToRun, answeringMachineDetectionSettings, scriptVariables, timeout, dialerPlugin)); }
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; }