コード例 #1
0
        internal async Task PublishCreateAuditMessageEvent(CallType callType, Guid messageId, Sms sms, string message)
        {
            var createAuditMessageEvent = _mapper.Map <CreateAuditMessageEvent>(sms);

            createAuditMessageEvent.CallType  = _mapper.Map <Contract.Enums.CallType>(callType);
            createAuditMessageEvent.MessageId = messageId.ToString();

            ValidateMessageFormatting(message, createAuditMessageEvent);

            await _createAuditMessageEventPublisher.PublishAsync(createAuditMessageEvent);
        }
コード例 #2
0
        public async Task <MessageResponseContract> ProcessEmailAsync(EmailMessage emailMessage, CallType callType)
        {
            var messageResponse = new MessageResponseContract
            {
                Status = ResponseStatus.Success
            };

            if (string.IsNullOrEmpty(emailMessage.CustomerId))
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find customer id");

                return(messageResponse);
            }

            //Check if we know where the message is from
            if (string.IsNullOrEmpty(emailMessage.Source))
            {
                ProcessErrorMessageResponse(messageResponse, "Message source field is not set",
                                            emailMessage.CustomerId);

                return(messageResponse);
            }

            if (string.IsNullOrEmpty(emailMessage.SubjectTemplateId))
            {
                ProcessErrorMessageResponse(messageResponse, "Message subject template id is not set",
                                            new { emailMessage.CustomerId, emailMessage.Source });

                return(messageResponse);
            }

            if (string.IsNullOrEmpty(emailMessage.MessageTemplateId))
            {
                ProcessErrorMessageResponse(messageResponse, "Message template id is not set",
                                            new { emailMessage.CustomerId, emailMessage.Source });

                return(messageResponse);
            }

            var identityParameters = await GetIdentityParameters(emailMessage.CustomerId);

            // Temporary work-around to send notifications for non-customers
            string email;

            if (emailMessage.TemplateParameters.ContainsKey(EmailParamKey) &&
                !string.IsNullOrEmpty(emailMessage.TemplateParameters[EmailParamKey]))
            {
                email = emailMessage.TemplateParameters[EmailParamKey];
            }
            // Get customer's email
            else if (!identityParameters.TryGetValue(GetFormattedEmailKey(), out email) || string.IsNullOrEmpty(email))
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find customer's email",
                                            new { emailMessage.CustomerId, Key = _emailKey, emailMessage.Source });

                return(messageResponse);
            }

            var localization = GetLocalization(identityParameters);

            //Find subject template
            var subjectTemplate =
                await _templateService.FindTemplateContentAsync(emailMessage.SubjectTemplateId, localization);

            if (subjectTemplate == null)
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find subject template",
                                            new { emailMessage.CustomerId, emailMessage.SubjectTemplateId, emailMessage.Source });

                return(messageResponse);
            }

            //Find message template
            var messageTemplate =
                await _templateService.FindTemplateContentAsync(emailMessage.MessageTemplateId, localization);

            if (messageTemplate == null)
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find message template",
                                            new { emailMessage.CustomerId, emailMessage.MessageTemplateId, emailMessage.Source });

                return(messageResponse);
            }

            // Join namespace parameters and custom parameters
            var templateParamValues = await GetNamespaceParamsAsync(emailMessage.CustomerId,
                                                                    identityParameters, subjectTemplate, messageTemplate);

            emailMessage.TemplateParameters.ForEach(tp => templateParamValues.Add(tp.Key, tp.Value));

            // Process subject and message templates
            var fullSubject = ProcessTemplate(subjectTemplate.Content, templateParamValues);
            var fullMessage = ProcessTemplate(messageTemplate.Content, templateParamValues);

            var subjectToSend = ProcessMessageParameters(messageResponse, fullSubject, out var subjectParameters);
            var messageToSend = ProcessMessageParameters(messageResponse, fullMessage, out var messageParameters);

            var messageId = Guid.NewGuid();

            // Publish audit event
            await PublishCreateAuditMessageEvent(callType, messageId, emailMessage, messageToSend);

            //Prepare email for broker and send it
            await SendEmailMessageAsync(messageId, email, subjectToSend, messageToSend, messageParameters);

            _log.Info("Email sent",
                      new { emailMessage.CustomerId, emailMessage.SubjectTemplateId, emailMessage.MessageTemplateId });

            messageResponse.MessageIds.Add(messageId.ToString());

            return(messageResponse);
        }
コード例 #3
0
        public async Task <MessageResponseContract> ProcessPushNotificationAsync(PushNotification pushNotification, CallType callType)
        {
            var messageResponse = new MessageResponseContract
            {
                Status = ResponseStatus.Success
            };

            if (string.IsNullOrEmpty(pushNotification.CustomerId))
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find customer id");

                return(messageResponse);
            }

            //Check if we know where the message is from
            if (string.IsNullOrEmpty(pushNotification.Source))
            {
                ProcessErrorMessageResponse(messageResponse, "Message source field is not set", pushNotification.CustomerId);

                return(messageResponse);
            }

            if (string.IsNullOrEmpty(pushNotification.MessageTemplateId))
            {
                ProcessErrorMessageResponse(messageResponse, "Message template id is not set",
                                            new { pushNotification.CustomerId, pushNotification.Source });

                return(messageResponse);
            }

            //Get customer personal data - this is where localization will come from
            var identityParameters = await GetIdentityParameters(pushNotification.CustomerId);

            var pushNotificationParameters =
                await GetNamespaceParamsAsync(pushNotification.CustomerId, new[] { _pushNotificationsNamespace });

            // Get push registration ids
            if (!pushNotificationParameters.TryGetValue(GetFormattedPushRegistrationIds(), out var pushRegistrationIdsString) ||
                string.IsNullOrEmpty(pushRegistrationIdsString))
            {
                ProcessInfoMessageResponse(messageResponse, "Could not find any customer push registration ids",
                                           new { pushNotification.CustomerId, Key = _pushRegistrationIdsKey, pushNotification.Source });

                return(messageResponse);
            }

            var localization = GetLocalization(identityParameters);

            //Find message template
            var messageTemplate =
                await _templateService.FindTemplateContentAsync(pushNotification.MessageTemplateId, localization);

            if (messageTemplate == null)
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find message template",
                                            new { pushNotification.CustomerId, pushNotification.MessageTemplateId, pushNotification.Source });

                return(messageResponse);
            }

            // Join namespace parameters and custom parameters
            var templateParamValues = await GetNamespaceParamsAsync(pushNotification.CustomerId,
                                                                    identityParameters, messageTemplate);

            pushNotification.TemplateParameters.ForEach(tp => templateParamValues.Add(tp.Key, tp.Value));

            // Process subject and message templates
            var fullMessage = ProcessTemplate(messageTemplate.Content, templateParamValues);

            var messageToSend = ProcessMessageParameters(messageResponse, fullMessage, out var messageParameters);

            var pushRegistrationIds = JsonConvert.DeserializeObject <List <string> >(pushRegistrationIdsString);

            if (!pushRegistrationIds.Any())
            {
                ProcessInfoMessageResponse(messageResponse, "Could not find any customer push registration ids",
                                           new
                {
                    pushNotification.CustomerId,
                    Key = _pushRegistrationIdsKey,
                    pushNotification.Source,
                    pushNotification.MessageTemplateId
                });

                return(messageResponse);
            }

            var messageGroupId = Guid.NewGuid();

            foreach (var pushRegistrationId in pushRegistrationIds)
            {
                var messageId = Guid.NewGuid();

                // Publish audit event
                await PublishCreateAuditMessageEvent(callType, messageId, messageGroupId, pushNotification,
                                                     messageToSend);

                //Prepare email for broker and send it
                await SendPushNotificationAsync(messageId, messageGroupId, pushRegistrationId,
                                                pushNotification.CustomerId, messageToSend, pushNotification.CustomPayload,
                                                messageParameters);

                messageResponse.MessageIds.Add(messageId.ToString());
            }

            _log.Info("Push notifications sent",
                      new { pushNotification.CustomerId, pushNotification.MessageTemplateId });

            return(messageResponse);
        }
コード例 #4
0
        public async Task <MessageResponseContract> ProcessSmsAsync(Sms sms, CallType callType)
        {
            var messageResponse = new MessageResponseContract
            {
                Status = ResponseStatus.Success
            };

            if (string.IsNullOrEmpty(sms.CustomerId))
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find customer id");

                return(messageResponse);
            }

            //Check if we know where the message is from
            if (string.IsNullOrEmpty(sms.Source))
            {
                ProcessErrorMessageResponse(messageResponse, "Message source field is not set", sms.CustomerId);

                return(messageResponse);
            }

            if (string.IsNullOrEmpty(sms.MessageTemplateId))
            {
                ProcessErrorMessageResponse(messageResponse, "Message template id is not set",
                                            new { sms.CustomerId, sms.Source });

                return(messageResponse);
            }

            //Get customer personal data - this is where localization will come from
            var identityParameters = await GetIdentityParameters(sms.CustomerId);

            // Temporary work-around to send notifications for non-customers
            string phoneNumber;

            if (sms.TemplateParameters.ContainsKey(PhoneNumberParamKey) &&
                !string.IsNullOrEmpty(sms.TemplateParameters[PhoneNumberParamKey]))
            {
                phoneNumber = sms.TemplateParameters[PhoneNumberParamKey];
            }
            // Get customer's phone number
            else if (!identityParameters.TryGetValue(GetFormattedPhoneNumberKey(), out phoneNumber) ||
                     string.IsNullOrEmpty(phoneNumber))
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find customer's phone number",
                                            new { sms.CustomerId, Key = _phoneNumberKey, sms.Source });

                return(messageResponse);
            }

            var localization = GetLocalization(identityParameters);

            //Find message template
            var messageTemplate =
                await _templateService.FindTemplateContentAsync(sms.MessageTemplateId, localization);

            if (messageTemplate == null)
            {
                ProcessErrorMessageResponse(messageResponse, "Could not find message template",
                                            new { sms.CustomerId, sms.MessageTemplateId, sms.Source });

                return(messageResponse);
            }

            // Join namespace parameters and custom parameters
            var templateParamValues = await GetNamespaceParamsAsync(sms.CustomerId,
                                                                    identityParameters, messageTemplate);

            sms.TemplateParameters.ForEach(tp => templateParamValues.Add(tp.Key, tp.Value));

            // Process subject and message templates
            var fullMessage = ProcessTemplate(messageTemplate.Content, templateParamValues);

            var messageToSend = ProcessMessageParameters(messageResponse, fullMessage, out var messageParameters);

            var messageId = Guid.NewGuid();

            // Publish audit event
            await PublishCreateAuditMessageEvent(callType, messageId, sms, messageToSend);

            //Prepare email for broker and send it
            await SendSmsAsync(messageId, phoneNumber, messageToSend, messageParameters);

            _log.Info("SMS sent",
                      new { sms.CustomerId, sms.MessageTemplateId });

            messageResponse.MessageIds.Add(messageId.ToString());

            return(messageResponse);
        }