/// <summary> /// Handles the specific domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> /// <param name="cancellationToken">The cancellation token.</param> private async Task HandleSpecificDomainEvent(ResponseReceivedFromSMSProviderEvent domainEvent, CancellationToken cancellationToken) { SMSAggregate smsAggregate = await this.AggregateRepository.GetLatestVersion(domainEvent.MessageId, cancellationToken); // Update the aggregate with the status request information // Get the message status from the provider MessageStatusResponse messageStatus = await this.SMSServiceProxy.GetMessageStatus(domainEvent.ProviderSMSReference, cancellationToken); // Update the aggregate with the response switch (messageStatus.MessageStatus) { case MessageStatus.Expired: smsAggregate.MarkMessageAsExpired(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Rejected: smsAggregate.MarkMessageAsRejected(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Undeliverable: smsAggregate.MarkMessageAsUndeliverable(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Delivered: smsAggregate.MarkMessageAsDelivered(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; } // Save the changes await this.AggregateRepository.SaveChanges(smsAggregate, cancellationToken); }
private static void TestObject(MessageStatusResponse messageStatusResponse) { Assert.AreEqual(messageStatusResponse.Status, "0"); Assert.AreEqual(messageStatusResponse.MessageStatus, "5"); Assert.AreEqual(messageStatusResponse.MsgId, "CPASS_restapi_C0000002737000000.0001"); Assert.AreEqual(messageStatusResponse.CreditDeducted, "0.0000"); }
public async Task <MessageStatusResponse> GetMessageStatus(String providerReference, CancellationToken cancellationToken) { MessageStatusResponse response = new MessageStatusResponse(); using (HttpClient client = new HttpClient()) { // Create the Auth Request TheSmsWorksTokenRequest apiTokenRequest = new TheSmsWorksTokenRequest { CustomerId = ConfigurationReader.GetValue("TheSMSWorksCustomerId"), Key = ConfigurationReader.GetValue("TheSMSWorksKey"), Secret = ConfigurationReader.GetValue("TheSMSWorksSecret") }; String apiTokenRequestSerialised = JsonConvert.SerializeObject(apiTokenRequest).ToLower(); StringContent content = new StringContent(apiTokenRequestSerialised, Encoding.UTF8, "application/json"); // First do the authentication HttpResponseMessage apiTokenHttpResponse = await client.PostAsync($"{ConfigurationReader.GetValue("TheSMSWorksBaseAddress")}auth/token", content, cancellationToken); if (apiTokenHttpResponse.IsSuccessStatusCode) { TheSmsWorksTokenResponse apiTokenResponse = JsonConvert.DeserializeObject <TheSmsWorksTokenResponse>(await apiTokenHttpResponse.Content.ReadAsStringAsync()); client.DefaultRequestHeaders.Add("Authorization", apiTokenResponse.Token); HttpResponseMessage apiGetSMSMessageHttpResponse = await client.GetAsync($"{ConfigurationReader.GetValue("TheSMSWorksBaseAddress")}messages/{providerReference}", cancellationToken); if (apiGetSMSMessageHttpResponse.IsSuccessStatusCode) { // Message has been sent TheSMSWorksGetMessageResponse apiSmsWorksGetMessageResponse = JsonConvert.DeserializeObject <TheSMSWorksGetMessageResponse>(await apiGetSMSMessageHttpResponse.Content.ReadAsStringAsync()); response = new MessageStatusResponse { ApiStatusCode = apiGetSMSMessageHttpResponse.StatusCode, MessageStatus = this.TranslateMessageStatus(apiSmsWorksGetMessageResponse.Status), ProviderStatusDescription = apiSmsWorksGetMessageResponse.Status, Timestamp = DateTime.Parse(apiSmsWorksGetMessageResponse.Modified) }; } else { throw new NotFoundException($"Error getting message Id [{providerReference}]"); } } else { throw new Exception("Authentication Error"); } } return(response); }
public void StopMessage(string[] APIMessageID) { MessageStatusResponse messageStatusResponse = _apiClient.StopMessage(new APIMessageRequest(APIMessageID)); for (int i = 0; i < messageStatusResponse.MessageStatuses.Length; i += 1) { MessageStatus messageStatus = new MessageStatus(); messageStatus = messageStatusResponse.MessageStatuses[i]; Response.Write("messageStatus:" + i.ToString() + "<br/>" + "messageStatus.APIMessageID : " + messageStatus.APIMessageID + "<br/>" + "messageStatus.Status : " + messageStatus.Status + "<br/>" + "messageStatus.Description: " + messageStatus.Description + "<br/><br/>"); } }
/// <summary> /// Gets the message status. /// </summary> /// <param name="providerReference">The provider reference.</param> /// <param name="startDate">The start date.</param> /// <param name="endDate">The end date.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public async Task <MessageStatusResponse> GetMessageStatus(String providerReference, DateTime startDate, DateTime endDate, CancellationToken cancellationToken) { MessageStatusResponse response = null; Smtp2GoEmailSearchRequest apiRequest = new Smtp2GoEmailSearchRequest { ApiKey = ConfigurationReader.GetValue("SMTP2GoAPIKey"), EmailId = new List <String> { providerReference }, StartDate = startDate.ToString("yyyy-MM-dd"), EndDate = endDate.ToString("yyyy-MM-dd"), }; String requestSerialised = JsonConvert.SerializeObject(apiRequest, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None }); Logger.LogDebug($"Request Message Sent to Email Provider [SMTP2Go] {requestSerialised}"); StringContent content = new StringContent(requestSerialised, Encoding.UTF8, "application/json"); String requestUri = $"{ConfigurationReader.GetValue("SMTP2GoBaseAddress")}email/search"; HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, requestUri); requestMessage.Content = content; HttpResponseMessage httpResponse = await this.HttpClient.SendAsync(requestMessage, cancellationToken); Smtp2GoEmailSearchResponse apiResponse = JsonConvert.DeserializeObject <Smtp2GoEmailSearchResponse>(await httpResponse.Content.ReadAsStringAsync()); Logger.LogDebug($"Response Message Received from Email Provider [SMTP2Go] {JsonConvert.SerializeObject(apiResponse)}"); // Translate the Response response = new MessageStatusResponse { ApiStatusCode = httpResponse.StatusCode, MessageStatus = this.TranslateMessageStatus(apiResponse.Data.EmailDetails.Single().Status), ProviderStatusDescription = apiResponse.Data.EmailDetails.Single().Status, Timestamp = apiResponse.Data.EmailDetails.Single().EmailStatusDate }; return(response); }
public override Task <MessageStatusResponse> GetStatus(MessageStatusRequest request, ServerCallContext context) { var resp = new MessageStatusResponse(); var info = new MessageStatus(_redis, request.MessageId).GetInfo(); if (info == null) { resp.Error = new Error { ErrCode = 404, ErrMsg = "invalid MessageId" }; } else { var pendingNum = info.PendingList.Count(); var sendedNum = info.SendedList.Count(); if (pendingNum == 0 && sendedNum == 0) { resp.Status = MessageStatusResponse.Types.Status.Finished; } else if (pendingNum < info.Total) { resp.Status = MessageStatusResponse.Types.Status.Processing; } else { resp.Status = MessageStatusResponse.Types.Status.Pending; } resp.TotalNum = info.Total; resp.SuccessNum = info.SuccessList.Count(); resp.UserBlockNum = info.UserBlockList.Count(); resp.SystemFailedNum = info.SystemFailedList.Count(); resp.SendErrorNum = info.SendErrorList.Count(); resp.SendTime = info.Time; if (request.Detail) { resp.SuccessList.AddRange(info.SuccessList); resp.UserBlockList.AddRange(info.UserBlockList); resp.SystemFailedList.AddRange(info.SystemFailedList); resp.SendErrorList.AddRange(info.SendErrorList); } } return(Task.FromResult(resp)); }
/// <summary> /// Handles the specific domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> /// <param name="cancellationToken">The cancellation token.</param> private async Task HandleSpecificDomainEvent(ResponseReceivedFromEmailProviderEvent domainEvent, CancellationToken cancellationToken) { EmailAggregate emailAggregate = await this.AggregateRepository.GetLatestVersion(domainEvent.MessageId, cancellationToken); // Update the aggregate with the status request information // Get the message status from the provider MessageStatusResponse messageStatus = await this.EmailServiceProxy.GetMessageStatus(domainEvent.ProviderEmailReference, domainEvent.EventTimestamp.DateTime, domainEvent.EventTimestamp.DateTime, cancellationToken); // Update the aggregate with the response switch (messageStatus.MessageStatus) { case MessageStatus.Failed: emailAggregate.MarkMessageAsFailed(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Rejected: emailAggregate.MarkMessageAsRejected(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Bounced: emailAggregate.MarkMessageAsBounced(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Spam: emailAggregate.MarkMessageAsSpam(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Delivered: emailAggregate.MarkMessageAsDelivered(messageStatus.ProviderStatusDescription, messageStatus.Timestamp); break; case MessageStatus.Unknown: break; } // Save the changes await this.AggregateRepository.SaveChanges(emailAggregate, cancellationToken); }
public MessageStatusResponse SendMessageMediaResponse(string MessageID) { try { Guid guidResult; bool isValid = Guid.TryParse(MessageID, out guidResult); if (isValid == true) { _log.Log(LogLevel.Information, "SendMessageMediaResponse Start"); var basicAuthUserName = _iconfiguration["basicAuthUserName"]; var basicAuthPassword = _iconfiguration["basicAuthPassword"]; bool useHmacAuthentication = false; MessageMediaMessagesClient client = new MessageMediaMessagesClient(basicAuthUserName, basicAuthPassword, useHmacAuthentication); MessagesController messages = client.Messages; GetMessageStatusResponse _getmessageresponse = messages.GetMessageStatus(MessageID); MessageStatusResponse messageStatusResponse = new MessageStatusResponse() { DeliveryStatus = _getmessageresponse.Status.ToString(), MessageId = _getmessageresponse.MessageId, CallbackUrl = _getmessageresponse.CallbackUrl, Content = _getmessageresponse.Content, DestinationNumber = _getmessageresponse.DestinationNumber, DeliveryReport = _getmessageresponse.DeliveryReport, Format = _getmessageresponse.Format, MessageExpiryTimestamp = _getmessageresponse.MessageExpiryTimestamp, Metadata = _getmessageresponse.Metadata, Scheduled = _getmessageresponse.Scheduled, SourceNumber = _getmessageresponse.SourceNumber, SourceNumberType = _getmessageresponse.SourceNumberType }; _log.Log(LogLevel.Information, "SendMessageMediaResponse End"); return(messageStatusResponse); } else { _log.Log(LogLevel.Information, "Invalid GUID"); return(null); } } catch (Exception ex) { _log.Log(LogLevel.Information, "SendMessageMediaResponse SMS reply error while sending." + ex.Message); return(null); } }