private static CommunicationSendRequest GetSendRequest(CustomerCommunicationUseCase useCase, string message) { var sendRequest = new CommunicationSendRequest() { UseCase = useCase, PersonId = JObject.Parse(message).SelectToken(useCase.PersonIdPath).ToObject <int>(), Parameters = new List <KeyValuePair <string, string> >() }; var templateParams = useCase.TemplateMessageParameters; var jmessage = JObject.Parse(message); if (templateParams != null) { foreach (var templateParamsKey in templateParams) { var value = jmessage.SelectToken(templateParamsKey.Value).ToString(); if (templateParamsKey.Key.ToLower().Contains("amount")) { value = value.FormatCurrency(); } sendRequest.Parameters.Add(new KeyValuePair <string, string>(templateParamsKey.Key, value)); } } return(sendRequest); }
private async Task <HttpContent> GetEmailSendForm(CommunicationSendRequest sendRequest) { if (sendRequest.UseCase.CanUnsubscribe) { var unsubLink = await GetUnsubscribeLink(sendRequest); sendRequest.Parameters.Add( new KeyValuePair <string, string>("UnsubscribeLink", unsubLink)); } var formDictionary = new Dictionary <string, string> { { "from", sendRequest.FromEmail.Length == 0 ? _fromEmail : sendRequest.FromEmail }, { "to", sendRequest.UserContactInfo.EmailAddress }, { "subject", sendRequest.UseCase.Parameters.First(p => p.Key == "EmailSubject").Value }, { "template", sendRequest.UseCase.Parameters.First(p => p.Key == "EmailTemplate").Value }, { "h:sender", sendRequest.FromEmail.Length == 0 ? _fromEmail : sendRequest.FromEmail }, //added to ensure sender address appears correctly in Outlook { "h:X-Mailgun-Variables", JsonConvert.SerializeObject(sendRequest.Parameters.ToDictionary(k => k.Key, v => v.Value)) }, { "o:testmode", (_mailgunTestMode).ToString() }, { "o:tag", sendRequest.UseCase.Id } }; if (_enableMailgun) { return(new FormUrlEncodedContent(formDictionary)); } return(new StringContent(JsonConvert.SerializeObject(formDictionary), Encoding.UTF8, "application/json")); }
private void LogEmailSent(IDurableOrchestrationContext client, CommunicationSendRequest request) { var key = new EntityId(nameof(CommsTrackingEntity), request.PersonId.ToString()); var proxy = client.CreateEntityProxy <ICommsTrackingEntity>(key); proxy.Track(request.UseCase.Id); }
private async Task SendEmail(CommunicationSendRequest request) { var emailSendForm = await GetEmailSendForm(request); var response = await _httpClient.PostAsync("messages", emailSendForm); request.MailgunResponse = await response.Content.ReadAsStringAsync(); }
private EventData FormatMessage(CommunicationSendRequest request) { var logEntry = new { request.PersonId, request.UserContactInfo.EmailAddress, request.UseCase.Id, request.UseCase.Type, Channel = "Email", TimeStamp = DateTime.UtcNow }; string message = JsonConvert.SerializeObject(logEntry); var messageBytes = Encoding.UTF8.GetBytes(message); return(new EventData(messageBytes)); }
private async Task <string> GetUnsubscribeLink(CommunicationSendRequest request) { var prefix = Environment.GetEnvironmentVariable("EmbeddedSiteUrl"); var suffix = "#!/contact-preferences"; var obj = new { personId = request.PersonId, signature = await SignString(string.Concat(request.PersonId.ToString(), request.UseCase.Id)), useCase = request.UseCase.Id }; var queryParam = Base64UrlEncoder.Encode(JsonConvert.SerializeObject(obj)); return(prefix + queryParam + suffix); }