public async Task <SendPushNotificationResponse> SendPushNotificationAsync(SendPushNotificationRequest model)
        {
            var result = await _pushNotificationService.SendPushNotificationAsync(
                _mapper.Map <Domain.SendPushNotificationModel>(model));

            return(_mapper.Map <SendPushNotificationResponse>(result));
        }
Пример #2
0
        public async Task <MessageResponseModel> SendPushNotificationAsync(SendPushNotificationRequest model)
        {
            var pushNotification = _mapper.Map <PushNotification>(model);

            var messageResponseContract = await _messageService.ProcessPushNotificationAsync(pushNotification, CallType.Rest);

            return(_mapper.Map <MessageResponseModel>(messageResponseContract));
        }
Пример #3
0
 public async Task <IActionResult> SendPushNotification([FromBody] SendPushNotificationRequest request)
 {
     if (request.Broadcast)
     {
         await PushNotificationService.BroadcastAsync(request.Title, request.Body, request.Data, request.Classification);
     }
     else
     {
         await PushNotificationService.SendAsync(request.Title, request.Body, request.Data, request.UserTag, request.Classification, request.Tags ?? Array.Empty <string>());
     }
     return(NoContent());
 }
        public async Task <string> SendAsync(ApiOptions options = null)
        {
            var request = new SendPushNotificationRequest {
                Push = this
            };

            ApiOptions.Apply(request, options);
            var response = await request.ExecuteAsync();

            if (response.Status.IsSuccessful == false)
            {
                throw response.Status.ToFault();
            }
            return(response.Id);
        }
Пример #5
0
        public async Task <IHttpActionResult> SendPushNotification(SendPushNotificationRequest request)
        {
            var notificationModel       = "{ \"data\" : {\"message\":\"" + "From " + request.Title + ": " + request.Content + "\"}}";
            NotificationOutcome outcome = null;

            switch (request.Platform)
            {
            case PushPlatformType.WNS:
                // Windows 8.1 / Windows Phone 8.1
                var toast = @"<toast><visual><binding template=""ToastText01""><text id=""1"">" +
                            "From " + request.Title + ": " + request.Content + "</text></binding></visual></toast>";
                outcome = await _notificationHubClient.SendWindowsNativeNotificationAsync(toast, request.Tag);

                break;

            case PushPlatformType.APNS:
                // iOS
                var alert = "{\"aps\":{\"alert\":\"" + "From " + request.Title + ": " + request.Content + "\"}}";
                outcome = await _notificationHubClient.SendAppleNativeNotificationAsync(alert, request.Tag);

                break;

            case PushPlatformType.GCM:
                // Android
                var notif = "{ \"data\" : {\"message\":\"" + "From " + request.Title + ": " + request.Content + "\"}}";
                outcome = await _notificationHubClient.SendGcmNativeNotificationAsync(notif, request.Tag);

                break;
            }

            if (outcome != null)
            {
                if (!((outcome.State == NotificationOutcomeState.Abandoned) ||
                      (outcome.State == NotificationOutcomeState.Unknown)))
                {
                    return(Ok());
                }
            }

            return(InternalServerError());
        }
        public async Task ProcessPushNotificationAsync(
            Guid messageId,
            string pushRegistrationId,
            string message,
            string customPayload,
            string messageGroupId,
            Dictionary <string, string> messageParameters)
        {
            var customPayloadDict = !string.IsNullOrWhiteSpace(customPayload)
                ? JsonConvert.DeserializeObject <Dictionary <string, string> >(customPayload)
                : new Dictionary <string, string>();

            if (!string.IsNullOrWhiteSpace(messageGroupId))
            {
                customPayloadDict.TryAdd("MessageGroupId", messageGroupId);
            }

            if (messageParameters != null && messageParameters.Count > 0)
            {
                foreach (var messageParameter in messageParameters)
                {
                    if (customPayloadDict.ContainsKey(messageParameter.Key))
                    {
                        _log.Warning(
                            $"Message parameter with key {messageParameter.Key} already exists in CustomPayload",
                            messageParameter.Key);
                    }
                    else
                    {
                        customPayloadDict.Add(messageParameter.Key, messageParameter.Value);
                    }
                }
            }

            var request = new SendPushNotificationRequest
            {
                MessageId          = messageId.ToString(),
                CustomPayload      = customPayloadDict,
                Message            = message,
                PushRegistrationId = pushRegistrationId
            };

            var response = await _pushProviderClient.Api.SendPushNotificationAsync(request);

            var auditMessage = new UpdateAuditMessageEvent
            {
                MessageId     = messageId.ToString(),
                SentTimestamp = DateTime.UtcNow
            };

            if (response.Result != ResultCode.Ok)
            {
                var errorMessage = $"Could not send PUSH for registration {pushRegistrationId}: {response.ErrorMessage}";
                _log.Error(message: errorMessage, context: new { messageId });
                auditMessage.DeliveryStatus  = DeliveryStatus.Error;
                auditMessage.DeliveryComment = errorMessage;
            }
            else
            {
                auditMessage.DeliveryStatus = DeliveryStatus.Ok;
            }

            await _auditMessagePublisher.PublishAsync(auditMessage);
        }
 public async Task<string> SendAsync(ApiOptions options = null)
 {
     var request = new SendPushNotificationRequest { Push = this };
     ApiOptions.Apply(request, options);
     var response = await request.ExecuteAsync();
     if (response.Status.IsSuccessful == false)
         throw response.Status.ToFault();
     return response.Id;
 }
Пример #8
0
 public async Task <IActionResult> SendPushNotification([FromBody] SendPushNotificationRequest request, CancellationToken cancellationToken = default)
 {
     return(Ok(await Mediator.Send(request, cancellationToken)));
 }