public async void Feed(Message message) { if (message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowActivated) { IEnumerable <Message> messages = await loadWorkflow((short)message.EntityId, message.AccountId); client.Complete(message.LockToken); foreach (var feedMessage in messages) { blockingCollection.Add(feedMessage); } } else if (message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowInactive || message.LeadScoreConditionType == (int)LeadScoreConditionType.WorkflowPaused) { AutomationWorkflow workflow = null; bool result = automationWorkflows.TryRemove(message.EntityId, out workflow); if (message.ConditionValue != null && message.ConditionValue.Equals("delayed") && message.ConditionValue.Equals("delayed")) { workflowService.DeactivateWorkflow(new DeactivateWorkflowRequest() { WorkflowId = message.EntityId }); } if (result && workflow != null) { client.Complete(message.LockToken); } } else { blockingCollection.Add(message); } }
void loadWorkflows() { automationWorkflows = new ConcurrentDictionary <int, AutomationWorkflow>(); var workflowsResponse = workflowService.GetAllActiveWorkflows( new GetActiveWorkflowsRequest() { PageNumber = 1, Limit = 5000 }); if (workflowsResponse.Workflows != null) { foreach (var workflowVM in workflowsResponse.Workflows) { if (workflowVM == null) { continue; } var workflowResponse = workflowService.GetWorkFlow(new GetWorkflowRequest() { AccountId = workflowVM.AccountID, WorkflowID = workflowVM.WorkflowID, RequestFromAutomationService = true }); if (workflowResponse.WorkflowViewModel == null) { continue; } var endState = workflowService.GetEndState(new GetWorkflowEndStateRequest() { WorkflowId = workflowVM.WorkflowID }); if (endState.WorkflowActionViewModel == null) { continue; } endState.WorkflowActionViewModel.OrderNumber = workflowResponse.WorkflowViewModel.WorkflowActions.Max(s => s.OrderNumber) + 1; var workflowActions = workflowResponse.WorkflowViewModel.WorkflowActions.ToList(); endState.WorkflowActionViewModel.OrderNumber = workflowActions.Max(w => w.OrderNumber) + 1; workflowActions.Add(endState.WorkflowActionViewModel); workflowResponse.WorkflowViewModel.WorkflowActions = workflowActions; var workflowDomain = Mapper.Map <WorkFlowViewModel, Workflow>(workflowResponse.WorkflowViewModel); AutomationWorkflow automationWorkflow = new AutomationWorkflow(workflowDomain, workflowService, tagService, campaignService, contactService, leadScoreService, pubSubService, communicationService); automationWorkflows.AddOrUpdate(workflowDomain.WorkflowID, automationWorkflow, (a, w) => { return(w); }); } } }
void consumeCamapaignMessage(Message message) { try { AutomationWorkflow workflow = automationWorkflows.Values.Where(w => w.WorkflowId == message.WorkflowId).FirstOrDefault(); if (workflow != null) { workflow.ProcessMessage(message, workflow.WorkflowId); } } catch (Exception ex) { Logger.Current.Error("An error ocured while processing campaign sent message : " + ex); } }
async Task <IEnumerable <Message> > loadWorkflow(short workflowId, int accountId) { var workflowResponse = workflowService.GetWorkFlow(new GetWorkflowRequest() { AccountId = accountId, WorkflowID = workflowId, RequestFromAutomationService = true }); IList <Message> messages = new List <Message>(); if (workflowResponse.WorkflowViewModel != null) { var endState = workflowService.GetEndState(new GetWorkflowEndStateRequest() { WorkflowId = workflowId }); if (endState.WorkflowActionViewModel != null) { endState.WorkflowActionViewModel.OrderNumber = workflowResponse.WorkflowViewModel.WorkflowActions.Max(s => s.OrderNumber) + 1; var workflowActions = workflowResponse.WorkflowViewModel.WorkflowActions.ToList(); workflowActions.Add(endState.WorkflowActionViewModel); workflowResponse.WorkflowViewModel.WorkflowActions = workflowActions; var workflowDomain = Mapper.Map <WorkFlowViewModel, Workflow>(workflowResponse.WorkflowViewModel); AutomationWorkflow automationWorkflow = new AutomationWorkflow(workflowDomain, workflowService, tagService, campaignService, contactService, leadScoreService, pubSubService, communicationService); if (!automationWorkflows.ContainsKey(workflowId)) { automationWorkflows.AddOrUpdate(workflowId, automationWorkflow, (a, w) => { return(w); }); } var sentCampaignTriggers = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.Campaign && t.CampaignID.HasValue && t.IsStartTrigger); if (sentCampaignTriggers != null && sentCampaignTriggers.Any()) { foreach (var campaignId in sentCampaignTriggers.Select(t => t.CampaignID.Value)) { IEnumerable <Message> campaignMessages = FeedContactsAffectedByCampaign(campaignId, workflowDomain.WorkflowID, workflowDomain.AccountID); foreach (Message message in campaignMessages) { campaignblockingCollection.Add(message); } } } var savedSearchTriggers = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.SmartSearch && t.SearchDefinitionID.HasValue && t.IsStartTrigger); if (savedSearchTriggers != null && savedSearchTriggers.Any()) { foreach (var searchDefinitionId in savedSearchTriggers.Select(t => t.SearchDefinitionID.Value)) { IEnumerable <Message> savedSearchMessages = await FeedContactsAffectedBySavedSearch(searchDefinitionId, workflowDomain.WorkflowID, workflowDomain.AccountID); foreach (Message message in savedSearchMessages) { searchblockingCollection.Add(message); } } } var opportunityStageChangeTrigger = workflowDomain.Triggers.Where(t => t.TriggerTypeID == WorkflowTriggerType.OpportunityStatusChanged && t.OpportunityStageID.HasValue && t.IsStartTrigger); if (opportunityStageChangeTrigger != null && opportunityStageChangeTrigger.Any()) { IEnumerable <Message> opportunityChangeMessages = FeedContactsAffectedByOpportunityChange(opportunityStageChangeTrigger.FirstOrDefault().OpportunityStageID.Value, workflowDomain.WorkflowID, workflowDomain.AccountID); messages = messages.Concat(opportunityChangeMessages).ToList(); } } } return(messages); }