public GetLeadScoreRuleByConditionResponse GetCampaignClickLeadScoreRule(GetLeadScoreRuleByConditionRequest request)
        {
            var leadScoreRule = leadScoreRuleRepository.GetLeadScoreRulesForLinkClicked(request.ConditionValue, request.AccountId, request.EntityID);

            return(new GetLeadScoreRuleByConditionResponse()
            {
                Rules = leadScoreRule
            });
        }
        public GetLeadScoreRuleByConditionResponse GetLeadScoreRule(GetLeadScoreRuleByConditionRequest request)
        {
            var leadScoreRule = leadScoreRuleRepository.GetLeadScoreRuleByCondition(
                (int)request.Condition, request.ConditionValue, request.AccountId);

            return(new GetLeadScoreRuleByConditionResponse()
            {
                Rule = leadScoreRule
            });
        }
        public GetLeadScoreRuleByConditionResponse GetLeadScoreRules(GetLeadScoreRuleByConditionRequest request)
        {
            var response = new GetLeadScoreRuleByConditionResponse();

            if (request.Condition == LeadScoreConditionType.PageDuration)
            {
                response.Rules = leadScoreRuleRepository.GetPageDurationRules((int)request.Condition, request.ConditionValue, request.AccountId, request.EntityID);
                return(response);
            }

            response.Rules = leadScoreRuleRepository.GetLeadScoreRulesByCondition((int)request.Condition, request.ConditionValue, request.AccountId);
            return(response);
        }
Esempio n. 4
0
        protected override void ExecuteInternal(IJobExecutionContext context)
        {
            var messages = _messageService
                           .GetLeadScoreMessages()
                           .Messages
                           .ToArray();

            if (!messages.IsAny())
            {
                return;
            }

            var auditedMessages = new List <LeadScoreMessage>();

            Log.Informational($"Received messages count: {messages.Length}");
            foreach (var message in messages)
            {
                try
                {
                    Log.Informational($"Processing LeadScore Message message {message}");
                    GetLeadScoreRuleByConditionResponse leadScoreRuleResponse;
                    string conditionValue;
                    int    entityId;
                    SetCondtionValueAndEntityValue(message, out entityId, out conditionValue);

                    var leadScoreRuleRequest = new GetLeadScoreRuleByConditionRequest
                    {
                        AccountId      = message.AccountID,
                        Condition      = (LeadScoreConditionType)message.LeadScoreConditionType,
                        ConditionValue = conditionValue,
                        EntityID       = entityId
                    };

                    if (message.LeadScoreConditionType == (byte)LeadScoreConditionType.ContactClicksLink)
                    {
                        leadScoreRuleResponse = _leadScoreRuleService.GetCampaignClickLeadScoreRule(leadScoreRuleRequest);
                    }
                    else
                    {
                        leadScoreRuleResponse = _leadScoreRuleService.GetLeadScoreRules(leadScoreRuleRequest);
                    }

                    Log.Informational($"Audit leadscore, condtion value: {conditionValue}, entity id:{entityId}, message {message.ToString()}");

                    if (leadScoreRuleResponse.Rules != null && leadScoreRuleResponse.Rules.Any())
                    {
                        Log.Informational(string.Format("Audit leadscore count, Rule ID: {0}", leadScoreRuleResponse.Rules.Count(), leadScoreRuleResponse.Rules.Select(s => s.Id)));

                        var response = _leadScoreService.IsScoreAudited(
                            new LeadScoreAuditCheckRequest
                        {
                            AccountId      = message.AccountID,
                            ContactId      = message.ContactID,
                            Condition      = (LeadScoreConditionType)message.LeadScoreConditionType,
                            ConditionValue = conditionValue,
                            EntityId       = entityId,
                            Rules          = leadScoreRuleResponse.Rules
                        });

                        if (!response.IsAudited && (response.UnAuditedRules != null && response.UnAuditedRules.Any()))
                        {
                            Log.Informational($"Update leadscore, message {message.ToString()}");
                            Log.Informational(string.Format("while inserting Audit leadscore count, Rule ID: {0}", leadScoreRuleResponse.Rules.Count(), leadScoreRuleResponse.Rules.Select(s => s.Id)));

                            _leadScoreService.InsertLeadScore(new InsertLeadScoreRequest()
                            {
                                Condition      = (LeadScoreConditionType)message.LeadScoreConditionType,
                                ConditionValue = conditionValue,
                                ContactId      = message.ContactID,
                                AccountId      = message.AccountID,
                                RequestedBy    = message.UserID,
                                EntityId       = entityId,
                                Rules          = response.UnAuditedRules
                            });
                            message.Remarks = "Lead score applied";
                            message.LeadScoreProcessStatusID = (int)TrackMessageProcessStatus.Processed;
                            auditedMessages.Add(message);
                        }
                        else if (response.IsAudited)
                        {
                            Log.Informational($"Leadscore already applied, message {message.ToString()}");
                            message.LeadScoreProcessStatusID = (int)TrackMessageProcessStatus.Processed;
                            message.Remarks = "Lead score is already applied";
                        }
                    }
                    else if (leadScoreRuleResponse.Rules == null || !leadScoreRuleResponse.Rules.Any())
                    {
                        Log.Informational($"No rule defined, message {message.ToString()}");
                        message.Remarks = "No rule defined";
                        message.LeadScoreProcessStatusID = (int)TrackMessageProcessStatus.Ignored;
                    }
                    message.ProcessedOn = DateTime.UtcNow;
                }
                catch (Exception ex)
                {
                    Log.Informational($"Error occurred while processing leadscore {message} {ex}");
                    message.ProcessedOn = DateTime.MinValue;
                    message.LeadScoreProcessStatusID = (int)TrackMessageProcessStatus.Error;
                    message.Remarks = $"Lead score not processed, {ex}";
                }
            }
            _messageService.UpdateLeadScoreMessage(new UpdateLeadScoreMessage()
            {
                Messages = messages
            });
            //update all messages
            if (auditedMessages.Any())
            {
                //index all contacts messages
                var indexingData = new IndexingData
                {
                    EntityIDs = auditedMessages.Select(m => m.ContactID).ToList(),
                    IndexType = (int)IndexType.Contacts
                };
                _accountService.InsertIndexingData(new InsertIndexingDataRequest {
                    IndexingData = indexingData
                });
            }
        }
        public MessageHandlerStatus Handle(MessageQueues.Message message)
        {
            try
            {
                if (message.LeadScoreConditionType != (int)LeadScoreConditionType.ContactSubmitsForm)
                {
                    return(MessageHandlerStatus.InvalidMessageHandler);
                }

                //var leadScoreRuleResponse = leadScoreRuleService.GetLeadScoreRule(
                //new GetLeadScoreRuleByConditionRequest()
                //{
                //    AccountId = message.AccountId,
                //    Condition = LeadScoreConditionType.ContactSubmitsForm,
                //    ConditionValue = message.EntityId.ToString()
                //});

                //LeadScoreRule rule = leadScoreRuleResponse.Rule;
                GetLeadScoreRuleByConditionRequest request = new GetLeadScoreRuleByConditionRequest()
                {
                    AccountId      = message.AccountId,
                    Condition      = LeadScoreConditionType.ContactSubmitsForm,
                    ConditionValue = message.EntityId.ToString()
                };


                GetLeadScoreRuleByConditionResponse response = leadScoreRuleService.GetLeadScoreRules(request);
                var rules = response.Rules;

                Logger.Current.Informational("Auditing the lead score for form submission for message:" + message.MessageId);
                var insertScoreResponse = leadScoreService.InsertLeadScore(new InsertLeadScoreRequest()
                {
                    Condition      = LeadScoreConditionType.ContactSubmitsForm,
                    ContactId      = message.ContactId,
                    ConditionValue = message.EntityId.ToString(),
                    AccountId      = message.AccountId,
                    RequestedBy    = message.UserId,
                    EntityId       = message.EntityId,
                    Rules          = rules
                });

                if (insertScoreResponse.Exception == null)
                {
                    Logger.Current.Informational("Audited successfully." + message.MessageId);
                    return(MessageHandlerStatus.LeadScoreAuditedSuccessfully);
                }
                else
                {
                    Logger.Current.Error("Error occurred while auditing the lead score." + message.MessageId, insertScoreResponse.Exception);
                    return(MessageHandlerStatus.FailedToAuditScore);
                }
                // return MessageHandlerStatus.LeadScoreAuditedSuccessfully;
                //var response = leadScoreService.IsScoreAudited(
                //    new LeadScoreAuditCheckRequest()
                //    {
                //        AccountId = message.AccountId,
                //        ContactId = message.ContactId,
                //        Condition = LeadScoreConditionType.ContactSubmitsForm,
                //        ConditionValue = message.EntityId.ToString(),
                //        EntityId = message.EntityId
                //    });

                //if (response.IsAudited)
                //    return MessageHandlerStatus.DuplicateLeadScoreRequest;
            }
            catch (Exception ex)
            {
                Logger.Current.Error("Exception occured while handling the Message.", ex);
                return(MessageHandlerStatus.FailedToAuditScore);
            }
        }