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);
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #6
0
        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;
        }
Beispiel #10
0
 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);
 }
Beispiel #11
0
        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;
        }