/// <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);
        }
Esempio n. 2
0
 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);
        }
Esempio n. 4
0
        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/>");
            }
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        /// <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);
            }
        }