Exemple #1
0
        public HttpResponseMessage SendText(SendTextViewModel viewModel)
        {
            //TODO replace this with proper user id from ASPNet Identity
            viewModel.UserId    = this.UserId;
            viewModel.AccountID = this.AccountId;
            SendTextRequest request = new SendTextRequest()
            {
                SendTextViewModel = viewModel
            };
            SendTextRequest ServiceProviderRequest = new SendTextRequest
            {
                UserId    = this.UserId,
                AccountId = this.AccountId
            };

            SendTextViewModel ServiceProviderViewmodel = communicationService.GetSendTextviewModel(ServiceProviderRequest).SendTextViewModel;

            request.SendTextViewModel.ServiceProvider = ServiceProviderViewmodel.ServiceProvider;
            SendTextResponse response = communicationService.SendText(request);

            if (response.SMSStatus == "Success")
            {
                response.Message = "Sent successfully";
            }
            else
            {
                if (response.Exception != null)
                {
                    response.Message = response.Exception.Message;
                }
            }

            return(Request.BuildResponse(response));
        }
Exemple #2
0
        private void LogResponse(SendTextRequest request, SendTextResponse response)
        {
            Logger.Current.Verbose("Request received for logging text response");
            //SentText & SentTextDetails Table
            var sentText = new SentTextDb
            {
                Token       = request.TokenGuid,
                RequestGuid = request.RequestGuid,
                CreatedDate = DateTime.Now,
            };

            unitOfWork.SentTextRepository.Add(sentText);
            unitOfWork.Commit();
            SentTextDb sentTextdb     = unitOfWork.SentTextRepository.FirstOrDefault(mr => mr.RequestGuid == request.RequestGuid);
            var        sentTextDetail = new SentTextDetailsDb
            {
                TextResponseID  = sentTextdb.TextResponseID,
                From            = request.From,
                To              = request.To.ToPlainString(),
                SenderID        = request.SenderId,
                Message         = request.Message,
                Status          = (byte)response.StatusID,
                ServiceResponse = response.ServiceResponse
            };

            unitOfWork.SentTextDetailsRepository.Add(sentTextDetail);
            unitOfWork.Commit();
            Logger.Current.Verbose("Logging text response was successful");
        }
Exemple #3
0
        public SendTextResponse Send(SendTextRequest request)
        {
            Logger.Current.Verbose("Request received for sending a text message");
            SendTextResponse response = GetService(request.TokenGuid).Send(request);

            LogResponse(request, response);
            return(response);
        }
Exemple #4
0
        /// <summary>
        /// 发送文本消息
        /// 文档:https://work.weixin.qq.com/api/doc#10167
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <returns>返回结果</returns>
        public SendMessageResult SendText(SendTextRequest request)
        {
            if (request.agentid == 0)
            {
                request.agentid = Client.AgentId;
            }

            return(Send(request));
        }
        public HttpResponseMessage GetPhoneNumbers()
        {
            SendTextRequest request = new SendTextRequest()
            {
                AccountId = this.AccountId,
                UserId    = this.UserId
            };
            SendTextResponse response = communitcationService.GetSendTextviewModel(request);

            return(Request.CreateResponse(HttpStatusCode.OK, response.SendTextViewModel.FromPhones));
        }
Exemple #6
0
        public override Task <SendMessageResponse> SendText(SendTextRequest request, ServerCallContext context)
        {
            var targets       = _processTarget(request.Targets);
            var messageStatus = new MessageStatus(_redis);

            messageStatus.GenMessageId();
            var now  = Util.GetTimestamp();
            var resp = new SendMessageResponse
            {
                MessageId = messageStatus.GetMessageId(),
                SendTime  = request.Time == 0 ? now : request.Time
            };

            if (request.NoStatus)
            {
                resp.MessageId = string.Empty;
                messageStatus.SetMessageId(null);
            }
            else
            {
                messageStatus.Create(targets.Keys.ToArray(), resp.SendTime);
            }
            foreach (var item in targets)
            {
                var tmpContent = _processValue(item.Value, request.Content);
                if (request.Time == 0)
                {
                    if (request.HighPriority)
                    {
                        BackgroundJob.Enqueue <SendMessage>(x => x.HighPriorityText(messageStatus.GetMessageId(), request.AppId, item.Key, tmpContent, null));
                    }
                    else
                    {
                        BackgroundJob.Enqueue <SendMessage>(x => x.Text(messageStatus.GetMessageId(), request.AppId, item.Key, tmpContent, null));
                    }
                }
                else
                {
                    var tmpJobId = string.Empty;
                    if (request.HighPriority)
                    {
                        tmpJobId = BackgroundJob.Schedule <SendMessage>(x => x.HighPriorityText(messageStatus.GetMessageId(), request.AppId, item.Key, tmpContent, null), TimeSpan.FromSeconds(request.Time - now));
                    }
                    else
                    {
                        tmpJobId = BackgroundJob.Schedule <SendMessage>(x => x.Text(messageStatus.GetMessageId(), request.AppId, item.Key, tmpContent, null), TimeSpan.FromSeconds(request.Time - now));
                    }
                    messageStatus.AddJobId(tmpJobId);
                }
            }
            return(Task.FromResult(resp));
        }
Exemple #7
0
        public void SendSingleMessage(string user, XmlNode TSubResultNode)
        {
            SendTextRequest str = new SendTextRequest();

            str.agentid = Agentid;
            str.safe    = "0";
            str.touser  = user;
            SendTextRequest.Text text = new SendTextRequest.Text();
            str.msgtype  = "text"; // TSubResultNode.SelectSingleNode("msgtype").InnerText;
            text.content = TSubResultNode.SelectSingleNode("content").InnerText;
            str.text     = text;

            messageBiz.Send <SendTextRequest>(str);
        }
        private void SendSingleMessage(string user, string message)
        {
            SendTextRequest str = new SendTextRequest();

            str.agentid = Agentid;
            str.safe    = "0";
            str.touser  = user;
            SendTextRequest.Text text = new SendTextRequest.Text();
            str.msgtype  = "text";
            text.content = message;
            str.text     = text;

            messageBiz.Send <SendTextRequest>(str);
        }
        public async Task <IActionResult> SendMessage([FromRoute] Request meta, [FromBody] SendTextRequest request)
        {
            IActionResult result = null;

            Ensure.Guid.IsNotEmpty(meta.Application);
            Ensure.Guid.IsNotEmpty(request.Application);
            Ensure.Bool.IsTrue(request.Application == meta.Application);

            var id = await Server.SendText(meta.Application, request.To, request.Message);

            result = Factory.CreateSuccessResponse(id);

            return(result);
        }
Exemple #10
0
        public SendTextResponse Send(SendTextRequest request)
        {
            Logger.Current.Verbose("Sending text message through twilio service");
            var response = new SendTextResponse {
                Token = registration.Guid, RequestGuid = request.RequestGuid, Message = request.Message
            };

            if (request != null && request.To != null && request.To.Count > 0)
            {
                for (int i = 0; i < request.To.Count; i++)
                {
                    try
                    {
                        string body = request.Message;
                        if (request.OwnerNumbers.IsAny())
                        {
                            string owner = request.OwnerNumbers.Where(o => o.ContactNumber == request.To[i]).Select(s => s.OwnerNumber).FirstOrDefault();
                            body = body + "\nReply to - " + owner;
                        }
                        var twilioResponse = twilioRestClient.SendMessage(string.Concat("+1", request.From), string.Concat("+1", request.To[i]), body);
                        response.StatusID = (twilioResponse.Status != null) ? CommunicationStatus.Success : CommunicationStatus.Failed;
                        if (twilioResponse.Body == null)
                        {
                            response.ServiceResponse = twilioResponse.RestException.Message;
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Current.Error("An error occured while sending text message " + ex);
                        response.ServiceResponse = ex.Message;
                        response.StatusID        = CommunicationStatus.Failed;
                        ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY, values: new object[] { request });
                    }
                }
            }
            else
            {
                response.StatusID = CommunicationStatus.Rejected;
            }
            return(response);
        }
Exemple #11
0
        public SendTextResponse SendText(SendTextRequest request)
        {
            var response = default(SendTextResponse);

            try
            {
                Logger.Current.Verbose("Request received for sending a text message");
                if (request.ScheduledTime > DateTime.Now.ToUniversalTime())
                {
                    Logger.Current.Verbose("Request received for sending a text message with scheduled-time");
                    this.QueueMessages(new List <SendTextRequest> {
                        request
                    });
                    Logger.Current.Verbose("Text request was queued successfully");
                    response = new SendTextResponse
                    {
                        //Token = request.TokenGuid,
                        RequestGuid     = request.RequestGuid,
                        StatusID        = CommunicationStatus.Queued,
                        ServiceResponse = string.Empty
                    };
                }
                else
                {
                    Logger.Current.Verbose("Request received for sending a text message with out scheduled-time");
                    response = Send(request);
                    this.LogResponse(request, response);
                }
            }
            catch (Exception ex)
            {
                var rethrowException = ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_AND_RETHROW_POLICY);
                Logger.Current.Error("Exception occured while sending a text message from text service.", ex);
                if (rethrowException)
                {
                    throw;
                }
            }

            return(response);
        }
Exemple #12
0
 public void UpdateScheduledReminder(Guid requestGuid, SendTextRequest request)
 {
     Logger.Current.Verbose("Request received for updating scheduled reminder from SendTextQueue");
     if (requestGuid != null && request != null)
     {
         SendTextQueueDb sendTextQueue = this.unitOfWork.SendTextQueueRepository.FirstOrDefault(f => f.RequestGuid == requestGuid);
         if (sendTextQueue != null)
         {
             sendTextQueue.QueueTime     = DateTime.UtcNow;
             sendTextQueue.ScheduledTime = request.ScheduledTime;
         }
         SentTextDetailsDb sendTextDetail = new SentTextDetailsDb();
         SentTextDb        textResponse   = this.unitOfWork.SentTextRepository.FirstOrDefault(f => f.RequestGuid == requestGuid);
         if (textResponse != null)
         {
             sendTextDetail = this.unitOfWork.SentTextDetailsRepository.FirstOrDefault(f => f.TextResponseID == textResponse.TextResponseID);
         }
         if (sendTextDetail != null)
         {
             sendTextDetail.From     = request.From;
             sendTextDetail.Message  = request.Message;
             sendTextDetail.SenderID = request.SenderId;
             sendTextDetail.To       = request.To.FirstOrDefault();
         }
         if (sendTextQueue == null && sendTextDetail != null)
         {
             this.unitOfWork.SendTextQueueRepository.Add(new SendTextQueueDb
             {
                 TokenGuid   = request.TokenGuid,
                 RequestGuid = request.RequestGuid,
                 //From = item.From,
                 //PriorityID = item.PriorityID,
                 ScheduledTime = request.ScheduledTime,
                 QueueTime     = DateTime.UtcNow,
                 //StatusID = CommunicationStatus.Queued,
                 //ServiceResponse = string.Empty
             });
         }
         unitOfWork.Commit();
     }
 }
Exemple #13
0
        public List <SendTextRequest> ConvertToSendTextRequest(List <SendSingleTextRequest> requests)
        {
            Logger.Current.Verbose("Converting SendSingleTextRequest to SendTextRequest");
            List <SendTextRequest> sendTextRequests = new List <SendTextRequest>();

            requests.ForEach(item =>
            {
                SendTextRequest textRequest = new SendTextRequest();
                textRequest.From            = item.From;
                textRequest.Message         = item.Message;
                textRequest.RequestGuid     = item.RequestGuid;
                textRequest.ScheduledTime   = item.ScheduledTime;
                textRequest.SenderId        = item.SenderId;
                textRequest.TokenGuid       = item.TokenGuid;
                textRequest.To = (item.To != null && item.To != string.Empty) ? new List <string>()
                {
                    item.To
                } : null;
                sendTextRequests.Add(textRequest);
            });
            return(sendTextRequests);
        }
Exemple #14
0
        public JsonResult SendText(string sendTextViewModel)
        {
            SendTextViewModel viewModel = JsonConvert.DeserializeObject <SendTextViewModel>(sendTextViewModel);

            //TODO replace this with proper user id from ASPNet Identity
            viewModel.UserId    = this.Identity.ToUserID();
            viewModel.AccountID = this.Identity.ToAccountID();
            SendTextRequest request = new SendTextRequest()
            {
                SendTextViewModel = viewModel
            };
            SendTextResponse response = communicationService.SendText(request);

            if (response.SMSStatus == "Success")
            {
                return(Json(new { success = true, response = "[|Sent successfully|]" }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                throw new UnsupportedOperationException(response.Message);
            }
        }
Exemple #15
0
        public string SendMessage(string inputMessage, string user)
        {
            string      xmlFilePath = xmlPath;
            XmlDocument doc         = new XmlDocument();

            doc.Load(xmlFilePath);

            var rp = GetLusiResult(inputMessage);

            if (rp != null)
            {
                var res = rp.intents.OrderByDescending(x => x.score).First();
                if (res.intent.ToLower() == "none" && rp.entities.Count == 0)//没有查到结果返回默认结果
                {
                    XmlNodeList NoResultNodeList = doc.SelectNodes("Results/NoResult");
                    if (NoResultNodeList != null)
                    {
                        foreach (XmlNode noResultNode in NoResultNodeList)
                        {
                            SendSingleMessage(user, noResultNode);
                        }
                    }
                }
                //else if (res.intent.ToLower() != "none" && rp.entities.Count == 0)//有搜到,但不能精确定位
                //{
                //    SendTextRequest str = new SendTextRequest();
                //    str.agentid = Agentid;
                //    str.safe = "0";
                //    str.touser = user;
                //    SendTextRequest.Text text = new SendTextRequest.Text();
                //    str.msgtype = "text";
                //    text.content = "您是要搜索" + res.intent + "么?请再提供更多关键字来精确定位吧。";
                //    str.text = text;
                //    messageBiz.Send<SendTextRequest>(str);
                //}
                else
                {
                    bool        HasFind        = false;
                    XmlNodeList ResultNodeList = doc.SelectNodes("Results/Result");
                    if (ResultNodeList != null)
                    {
                        foreach (XmlNode ResultNode in ResultNodeList)
                        {
                            if (rp.entities.Any() && ResultNode.Attributes["name"].Value != "" && res.intent.ToLower() == ResultNode.Attributes["name"].Value.ToLower())//查询贺卡/邀请卡
                            {
                                foreach (XmlNode SubResultNode in ResultNode)
                                {
                                    if (rp.entities.First().type == SubResultNode.Attributes["name"].Value)//贺卡/邀请卡::StarProducts"
                                    {
                                        foreach (XmlNode TSubResultNode in SubResultNode)
                                        {
                                            if (rp.entities.First().entity.ToLower() == TSubResultNode.Attributes["name"].Value)
                                            {
                                                if (TSubResultNode.SelectSingleNode("msgtype").InnerText == "text")
                                                {
                                                    HasFind = true;
                                                    SendSingleMessage(user, TSubResultNode);
                                                }
                                                else if (TSubResultNode.SelectSingleNode("msgtype").InnerText == "mpnews")
                                                {
                                                    HasFind = true;
                                                    SendMpMessage(user, TSubResultNode);
                                                }
                                                else if (TSubResultNode.SelectSingleNode("msgtype").InnerText == "image")
                                                {
                                                    HasFind = true;
                                                    SendImageMessage(user, TSubResultNode);
                                                }
                                                else if (TSubResultNode.SelectSingleNode("msgtype").InnerText == "news")
                                                {
                                                    HasFind = true;
                                                    SendNewsMessage(user, TSubResultNode);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (!HasFind)
                        {
                            foreach (XmlNode ResultNode in ResultNodeList)
                            {
                                if (ResultNode.Attributes["name"].Value != "" && res.intent.ToLower() == ResultNode.Attributes["name"].Value.ToLower())//查询贺卡/邀请卡
                                {
                                    foreach (XmlNode SubResultNode in ResultNode)
                                    {
                                        if (SubResultNode.Attributes["name"].Value.ToLower() == "default")//查询贺卡/邀请卡
                                        {
                                            if (SubResultNode.SelectSingleNode("msgtype").InnerText == "text")
                                            {
                                                HasFind = true;
                                                SendSingleMessage(user, SubResultNode);
                                            }
                                            else if (SubResultNode.SelectSingleNode("msgtype").InnerText == "mpnews")
                                            {
                                                HasFind = true;
                                                SendMpMessage(user, SubResultNode);
                                            }
                                            else if (SubResultNode.SelectSingleNode("msgtype").InnerText == "image")
                                            {
                                                HasFind = true;
                                                SendImageMessage(user, SubResultNode);
                                            }
                                            else if (SubResultNode.SelectSingleNode("msgtype").InnerText == "news")
                                            {
                                                HasFind = true;
                                                SendNewsMessage(user, SubResultNode);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (!HasFind)
                        {
                            SendTextRequest str = new SendTextRequest();
                            str.agentid = Agentid;
                            str.safe    = "0";
                            str.touser  = user;
                            SendTextRequest.Text text = new SendTextRequest.Text();
                            str.msgtype  = "text";
                            text.content = "您是要搜索" + res.intent + "么?请再提供更多关键字来精确定位吧。";
                            str.text     = text;
                            messageBiz.Send <SendTextRequest>(str);
                        }
                    }
                }
            }
            return("");
        }
Exemple #16
0
        public SendTextResponse SendText(SendTextRequest request)
        {
            TextService Text = new TextService();

            return(Text.Send(request));
        }
Exemple #17
0
 public SendTextResponse SendText(SendTextRequest request, Guid userToken)
 {
     Text Text = new Text(); return(Text.Send(TextProvider.Twillio, userToken, request));
 }