예제 #1
0
        public void Setup()
        {
            this.entity = new MessageResponse();
            this.model  = new MessageResponseModel();

            this.mapper = new MessageResponseMapper();
        }
예제 #2
0
        public static async Task <MessageResponseModel> GetMessageResponse(string token, int mpId, int messageId)
        {
            MessageResponseModel result = null;
            var url     = JobConfig.AppSettings["GetMessageResultUrl"];
            var handler = new HttpClientHandler()
            {
                AutomaticDecompression = System.Net.DecompressionMethods.None
            };

            using (HttpClient httpclient = new HttpClient(handler))
            {
                httpclient.BaseAddress = new Uri(url);
                var content = new FormUrlEncodedContent(new Dictionary <string, string>()
                {
                    { "token", token }, { "mpId", mpId.ToString() }, { "messageId", messageId.ToString() }
                });

                var response = await httpclient.PostAsync(url, content);

                string responseString = await response.Content.ReadAsStringAsync();

                result = JsonConvert.DeserializeObject <MessageResponseModel>(responseString);
            }
            return(result);
        }
예제 #3
0
        public async void AcceptTask(string UserLineId, string AppNo)
        {
            PushLineResponseModel response = new PushLineResponseModel();
            MessageResponseModel  message  = new MessageResponseModel();
            string strmessage = "";

            dt = new DataTable();
            dt = DAC.REST_UpdateStatusApp(UserLineId, AppNo);
            try
            {
                if (dt.Rows.Count > 0)
                {
                    strmessage  = template.AcceptTaskMessage();
                    strmessage  = string.Format(strmessage, dt.Rows[0]["User_Name"].ToString(), dt.Rows[0]["Application_No"].ToString(), dt.Rows[0]["Application_DealerName"].ToString(), dt.Rows[0]["User_PhoneNumber"].ToString());
                    message     = api.SetMessage(strmessage);
                    response.to = dt.Rows[0]["Application_CreateBy"].ToString();
                    response.messages.Add(message);
                    await api.CallApi(response);

                    DAC.REST_KeepEventTransaction("AcceptTask", response.to, "CheckerController -> AcceptTask", "[59]");
                }
                else
                {
                    DAC.REST_KeepEventTransaction("AcceptTask", AppNo, "CheckerController -> AcceptTask is Empty", "REST_UpdateStatusApp " + UserLineId + ", " + AppNo);
                }
            }
            catch (Exception e)
            {
                DAC.REST_KeepEventTransaction("AcceptTask", AppNo, "CheckerController -> AcceptTask", e.StackTrace);
            }
        }
예제 #4
0
        public async Task <IActionResult> CheckerAcceptTask(ExternalRequest request)
        {
            PushLineResponseModel response = new PushLineResponseModel();
            MessageResponseModel  message  = new MessageResponseModel();
            LineMessageTemplate   template = new LineMessageTemplate();

            dt = new DataTable();
            DAC.REST_KeepEventTransaction("CheckerAcceptTask", func.JsonSerialize(request), "CheckerAcceptTask", "[487]");
            dt = DAC.CheckApplicationNo(request.AppNo);
            if (dt.Rows.Count > 0)
            {
                dtifExists = new DataTable();
                dtifExists = DAC.REST_CheckAceptTaskExisting(request.AppNo);
                try
                {
                    if (dtifExists.Rows.Count > 0)
                    {
                        if (!string.IsNullOrEmpty(dtifExists.Rows[0]["Application_Responsibility"].ToString()))
                        {
                            message     = api.SetMessage("ไม่สามารถทำรายการได้เนื่องจากมีคนกดรับงานไปแล้ว");
                            response.to = request.LineUserId;
                            response.messages.Add(message);
                            await api.CallApi(response);

                            DAC.REST_KeepEventTransaction("CheckerAcceptTask", response.to, "DealerController -> CallApi", "[496]");
                            return(Ok());
                        }
                    }
                    else
                    {
                        DAC.REST_KeepEventTransaction("CheckerAcceptTask", request.AppNo, "DealerController -> REST_CheckAceptTaskExisting is Empty", "REST_CheckAceptTaskExisting " + request.AppNo);
                    }
                    try
                    {
                        checker.AcceptTask(request.LineUserId, request.AppNo);
                        message     = api.SetMessage("บันทึกข้อมูลสำเร็จ");
                        response.to = request.LineUserId;
                        response.messages.Add(message);
                        await api.CallApi(response);

                        DAC.REST_KeepEventTransaction("CheckerAcceptTask", response.to, "DealerController -> CallApi", "[511]");
                    }
                    catch (Exception e)
                    {
                        DAC.REST_KeepEventTransaction("CheckerAcceptTask", request.AppNo, "DealerController -> AcceptTask", e.StackTrace);
                    }
                }
                catch (Exception e)
                {
                    DAC.REST_KeepEventTransaction("CheckerAcceptTask", request.AppNo, "DealerController -> REST_CheckApplicationNo", e.StackTrace);
                }
                return(Ok());
            }
            else
            {
                DAC.REST_KeepEventTransaction("CheckerAcceptTask", request.AppNo, "DealerController -> REST_CheckApplicationNo is Empty", "REST_CheckApplicationNo " + request.AppNo);
            }

            return(Ok());
        }
예제 #5
0
        public MessageResponseModel SetMessage(string txtmessage, string type = "text")
        {
            MessageResponseModel message = new MessageResponseModel();

            message.type = type;
            message.text = txtmessage;
            return(message);
        }
예제 #6
0
        private async Task LogMessage(ThreadEntity thread, MessageResponseModel message, DateTime?readAt)
        {
            var log = _mapper.Map <LogEntity>(thread);

            log               = _mapper.Map(message, log, options => options.Items[MappingConstants.RecipientUserId] = thread.Type == ThreadType.User ? message.FromUserId : 0);
            log.Id            = new Guid();
            log.RecepientName = thread.Name;
            log.SenderName    = message.FromUserName;
            log.CreatedAt     = message.CreatedAt;
            log.IsArchived    = thread.ArchivedBy.Count == 0 ? false : true;
            if (message.ReadBy.Contains(log.SenderId) && message.ReadBy.Count == 1)
            {
                log.IsRead = false;
            }
            else if (message.ReadBy.Count > 1)
            {
                log.IsRead = true;
            }
            if (log.IsArchived == false)
            {
                log.ArchivedAt = null;
            }
            else
            {
                log.ArchivedAt = thread.ModifiedAt;
            }
            if (log.IsRead == false)
            {
                log.ReadAt = null;
            }
            else
            {
                log.ReadAt = readAt;
            }

            switch (thread.Type)
            {
            case ThreadType.User:
                log.RecipientId = thread.Participants[1];
                break;

            case ThreadType.Group:
                log.RecipientId = 0;
                break;

            case ThreadType.Team:
                log.RecipientId = thread.TeamId;
                break;

            default:
                log.RecipientId = 0;
                break;
            }
            await _logRepository.CreateAsync(log);
        }
예제 #7
0
        public void UpdatingATextModelShouldUpdateEntity()
        {
            MessageResponseModel model = new MessageResponseModel();

            this.viewModel.Responses.Add(model);
            this.viewModel.IsSelected = true;

            model.Timeout = 1;

            this.repository.Verify(r => r.AddOrUpdate(It.IsAny <MessageResponse>()));
            this.mapper.Verify(r => r.MapToEntity(model, It.IsAny <MessageResponse>()));
        }
예제 #8
0
        public async Task <IActionResult> NoticeTracking(ExternalNotice request)
        {
            PushLineResponseMultiCastModel response = new PushLineResponseMultiCastModel();
            MessageResponseModel           message  = new MessageResponseModel();
            LineMessageTemplate            template = new LineMessageTemplate();

            dt = new DataTable();

            DAC.REST_KeepEventTransaction("NoticeTracking", func.JsonSerialize(request), "NoticeTracking", "[436]");

            string msg = template.MessageNotice(request.State, request);
            string statecancel;

            message.type = "text";
            message.text = msg;

            response.messages.Add(message);

            if (request.State == "cancel" && string.IsNullOrEmpty(request.CheckerName))
            {
                // Dealer Cancel
                request.State = "dealerupdate";
            }
            else if (request.State == "cancel" && !string.IsNullOrEmpty(request.CheckerName))
            {
                // Checker Cancel
                request.State = "checkerupdate";
            }

            dt = DAC.REST_GetUserforNotice(request.ApplicationNo, request.State);
            try
            {
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        response.to.Add(dt.Rows[i]["Receiver"].ToString());
                    }
                    await api.CallApiMultiCast(response);

                    DAC.REST_KeepEventTransaction("NoticeTracking", func.JsonSerialize(response.to), "DealerController -> CallApiMultiCast", "[461]");
                }
                else
                {
                    DAC.REST_KeepEventTransaction("NoticeTracking", request.ApplicationNo, "DealerController -> REST_GetUserforNotice is Empty", "REST_UpdateStatusApp " + request.ApplicationNo + ", " + request.State);
                }
            }
            catch (Exception e)
            {
                DAC.REST_KeepEventTransaction("NoticeTracking", request.ApplicationNo, "DealerController", e.StackTrace);
            }
            return(Ok());
        }
예제 #9
0
        public void RemoveResponseCommandShouldRemoveResponse(string id)
        {
            MessageResponseModel model = new MessageResponseModel {
                Id = id
            };

            this.viewModel.Responses.Add(model);

            this.viewModel.RemoveResponseCommand.Execute(model);

            Assert.AreEqual(0, this.viewModel.Responses.Count);
            this.repository.Verify(r => r.Remove(id));
        }
예제 #10
0
        public static MessageResponseModel GetMessagesFromData(IbaCmsDbContext cmsDb, decimal ibaUserId, MessageRequestModel model)
        {
            var result = new MessageResponseModel();
            IQueryable <AppUserMessage> msgs;

            if (model.AppUserMessageId > 0)
            {
                msgs = cmsDb.AppUserMessages.Where(a => a.Id == model.AppUserMessageId).AsQueryable();
                result.TotalRecords = msgs.Count();
            }
            else
            {
                msgs = cmsDb.AppUserMessages.Where(a => a.DeviceOwner.IbaId == ibaUserId && a.Deleted == null && a.Message.SendDate < DateTime.UtcNow)
                       .Where(a => (model.From.HasValue && a.Created > model.From.Value) || !model.From.HasValue)
                       .OrderByDescending(a => a.Created)
                       .AsQueryable();
                result.TotalRecords = msgs.Count();
                if (model.Start > 0)
                {
                    msgs = msgs.Skip(model.Start);
                }
                if (model.Length <= 0)
                {
                    model.Length = DefaultPageSize;
                }
                msgs = msgs.Take(model.Length);
            }
            foreach (var msg in msgs.ToList())
            {
                var item = new AppUserMessagesResponseItem
                {
                    AppUserMessageId = msg.Id,
                    Title            = msg.Message.Title,
                    MessageType      = msg.Message.MessageType,
                    Text             = msg.Message.Text,
                    Url           = msg.Message.Url ?? "",
                    FormattedDate = msg.Message.SendDate.HasValue ? DateTime.SpecifyKind(msg.Message.SendDate.Value, DateTimeKind.Utc) :  DateTime.SpecifyKind(msg.Created, DateTimeKind.Utc)
                };
                if (msg.Deleted != null)
                {
                    item.Status = AppUserMessagesResponseStatus.Deleted;
                }
                else if (msg.Read != null)
                {
                    item.Status = AppUserMessagesResponseStatus.Read;
                }
                result.Messages.Add(item);
            }
            return(result);
        }
예제 #11
0
파일: ModelTest.cs 프로젝트: bcgov/PSP
        public void MessageResponse_Constructor()
        {
            // Arrange
            var model = new MessageResponseModel()
            {
                MessageId = Guid.NewGuid(),
                Tag       = "tag"
            };

            // Act
            var response = new MessageResponse(model);

            // Assert
            response.MessageId.Should().Be(model.MessageId);
            response.Tag.Should().Be(model.Tag);
            response.To.Should().BeEmpty();
        }
예제 #12
0
        /// <summary>
        /// Synchronization users messages
        /// </summary>
        public void SynchronizeChatsMessages(MessageResponseModel message)
        {
            var chatUsers   = _mainLogic.GetChatUsers(message.ChatId);
            var onlineUsers = _connectedClients.Where(ou => ou.Id != message.UserId && chatUsers.FirstOrDefault(u => u.Id == ou.Id) != null);

            Parallel.ForEach(onlineUsers, (ou) =>
            {
                _logger.Info($"Sync chat message {message.Id}: {message.UserMassage} for user {ou.Id} by user {message.UserId} from chat {message.ChatId}");
                var responseJson = _jsonStringSerializer.Serialize(new OperationResultInfo()
                {
                    ErrorInfo       = string.Empty,
                    ToListener      = ListenerType.ChatsMessagesListener,
                    OperationResult = OperationsResults.Successfully,
                    JsonData        = _jsonStringSerializer.Serialize(message)
                });
                ou.SendMessage(_encoder.Encryption(responseJson));
                //ou.SendMessage(responseJson);
            });
        }
예제 #13
0
파일: ModelTest.cs 프로젝트: bcgov/PSP
        public void MessageResponse_WithTo_Constructor()
        {
            // Arrange
            var model = new MessageResponseModel()
            {
                MessageId = Guid.NewGuid(),
                Tag       = "tag",
                To        = new[] { "one", "two" }
            };

            // Act
            var response = new MessageResponse(model);

            // Assert
            response.MessageId.Should().Be(model.MessageId);
            response.Tag.Should().Be(model.Tag);
            response.To.Count().Should().Be(2);
            response.To.First().Should().Be("one");
            response.To.Last().Should().Be("two");
        }
예제 #14
0
        public SuccessfullOperated<MessageResponseModel> Update(int id, MessageResponseModel model)
        {
            var successfullOperated = new SuccessfullOperated<MessageResponseModel>()
            {
                IsSuccessfull = false,
                Element = model
            };

            var modelFromDb = this.data.Messages
                .All()
                .FirstOrDefault(m => m.Id == id);

            if (modelFromDb == null)
            {
                return successfullOperated;
            }

            if (model.Author != null)
            {
                modelFromDb.Author = model.Author;
            }

            if (!string.IsNullOrEmpty(model.Content))
            {
                modelFromDb.Content = model.Content;
            }

            if (model.FriendshipId != modelFromDb.FriendshipId && model.FriendshipId != 0)
            {
                modelFromDb.FriendshipId = model.FriendshipId;
            }

            this.data.SaveChanges();
            successfullOperated.IsSuccessfull = true;
            return successfullOperated;
        }
예제 #15
0
        public async Task <IActionResult> Webhook(LineRequestModel request)
        {
            LineResponseModel             response     = new LineResponseModel();
            LineCardTemplateResponseModel cardResponse = new LineCardTemplateResponseModel();
            BubbleMain           bubble         = new BubbleMain();
            dupBubbleMain        dupbubble      = new dupBubbleMain();
            MessageResponseModel message        = new MessageResponseModel();
            StickerModel         sticker        = new StickerModel();
            StickerMessageModel  stickerMessage = new StickerMessageModel();
            CarouselMain         master         = new CarouselMain();
            DateTime             date;
            Task <UserProfile>   profile;
            string  holyType = "text";
            decimal txtnumber;
            string  strMessage = "";

            profile = api.GetUserProfile(request.events[0].source.userId);
            if (profile.Result != null)
            {
                action.SP_InsertUserFollow(
                    request.events[0].source.userId,
                    profile.Result.displayName,
                    profile.Result.pictureUrl,
                    profile.Result.statusMessage,
                    profile.Result.language
                    );
            }

            if (request.events[0].message == null)
            {
                request.events[0].message = new MessageModel();
            }

            // KeepLog
            action.SP_InsertLogRequestMessage(
                request.events[0].type,
                request.destination,
                request.events[0].mode,
                request.events[0].type == "message" ? request.events[0].message.text : "",
                func.JsonSerialize(request),
                DateTime.Now,
                request.events[0].source.userId,
                request.events[0].source.userId
                );

            if (request.events[0].message.text == "เช็คยอดคงเหลือ")
            {
                customer.REST_InitialStep(request.events[0].source.userId, "1", "");
                strMessage = "รบกวนให้ลูกค้า กรอกข้อมูล รหัสบัตรประชาชน 13 หลัก";
                message    = api.SetMessage("รบกวนให้ลูกค้า กรอกข้อมูล รหัสบัตรประชาชน 13 หลัก");
            }
            else if (decimal.TryParse(request.events[0].message.text, out txtnumber) && request.events[0].message.text.Length == 13)
            {
                customer.REST_InitialStep(request.events[0].source.userId, "2", request.events[0].message.text);
                strMessage = "รบกวนขอ วัน/เดือน/ปี (คศ) เกิด ของลูกค้าครับ";
                message    = api.SetMessage("รบกวนขอ วัน/เดือน/ปี (คศ) เกิด ของลูกค้าครับ");
            }
            else if (DateTime.TryParseExact(request.events[0].message.text, "dd'/'MM'/'yyyy",
                                            CultureInfo.InvariantCulture,
                                            DateTimeStyles.None,
                                            out date))
            {
                customer.REST_InitialStep(request.events[0].source.userId, "3", request.events[0].message.text);

                dt = new DataTable();

                dt = customer.REST_SelectFilterCondition(request.events[0].source.userId);

                if (dt.Rows.Count > 0)
                {
                    List <CustomerData> data = new List <CustomerData>();
                    data = customer.REST_GetAccountInformation(dt.Rows[0]["IDCard"].ToString(), dt.Rows[0]["BirthDay"].ToString(), "");

                    if (data.Count > 0)
                    {
                        foreach (CustomerData cus in data)
                        {
                            strMessage = func.GetMessageCondition();
                            strMessage = string.Format(strMessage,
                                                       cus.AgreementNo,
                                                       cus.Model,
                                                       cus.NetFinance > 0 ? cus.NetFinance.ToString("#,###.00") : "-",
                                                       cus.InstallmentAmount > 0 ? cus.InstallmentAmount.ToString("#,###.00") : "-",
                                                       cus.DueDate,
                                                       cus.LastDueDate.Date.ToString("dd-MM-yyyy"),
                                                       cus.OSBalance > 0 ? cus.OSBalance.ToString("#,###.00") : "-",
                                                       cus.PeriodDue,
                                                       cus.CollectionAmount > 0 ? cus.CollectionAmount.ToString("#,###.00") : "-",
                                                       cus.PenaltyAmount > 0 ? cus.PenaltyAmount.ToString("#,###.00") : "-",
                                                       cus.OtherFee > 0 ? cus.OtherFee.ToString("#,###.00") : "-",
                                                       cus.PaymentDue > 0 ? cus.PaymentDue.ToString("#,###.00") : "-",
                                                       cus.PayDueDate.Date.ToString("dd-MM-yyyy") == "01-01-1900" ? "-" : cus.PayDueDate.Date.ToString("dd-MM-yyyy"),
                                                       cus.ODAmount > 0 ? cus.ODAmount.ToString("#,###.00") : "-",
                                                       cus.ODPeriodDue,
                                                       cus.isPastDue,
                                                       cus.CurrentInstallment > 0 ? cus.CurrentInstallment.ToString("#,###.00") : "-",
                                                       cus.ContractStatus,
                                                       cus.DiscountAmount > 0 ? cus.DiscountAmount.ToString("#,###.00") : "-",
                                                       cus.SuspensionTenor
                                                       );
                            message      = api.SetMessage(strMessage);
                            dupbubble    = new dupBubbleMain();
                            dupbubble    = api.SetBubbleMessage(strMessage);
                            dupbubble.to = request.events[0].source.userId;
                            await api.CallApi(dupbubble);

                            action.SP_InsertLogRequestMessage(
                                "reply",
                                request.events[0].source.userId,
                                request.events[0].mode,
                                strMessage,
                                "",
                                DateTime.Now,
                                request.destination,
                                "SYSTEM"
                                );
                        }
                        cardResponse = api.SetCardMessage(strMessage);
                        return(Ok());
                    }
                    else
                    {
                        action.SP_InsertLogRequestMessage(
                            "reply",
                            request.events[0].source.userId,
                            request.events[0].mode,
                            strMessage,
                            "",
                            DateTime.Now,
                            request.destination,
                            "SYSTEM"
                            );
                        strMessage = "สถานะสัญญาไม่สอดคล้องกับการแสดงผล รบกวนขอเบอร์ติดต่อ คุณลูกค้าเพื่อให้เจ้าหน้าที่ติดต่อให้ข้อมูลครับ";
                        message    = api.SetMessage("สถานะสัญญาไม่สอดคล้องกับการแสดงผล รบกวนขอเบอร์ติดต่อ คุณลูกค้าเพื่อให้เจ้าหน้าที่ติดต่อให้ข้อมูลครับ");
                    }
                }
                else
                {
                    strMessage = "ไม่พบข้อมูลที่ต้องการค้นหา กรุณาตรวจสอบข้อมูล หรือ ลองทำรายการใหม่";
                    message    = api.SetMessage("ไม่พบข้อมูลที่ต้องการค้นหา กรุณาตรวจสอบข้อมูล หรือ ลองทำรายการใหม่");
                }
            }
            else if (request.events[0].message.text == "เช็คยอดปิดบัญชี")
            {
                message = api.SetMessage(
                    @"
รบกวน แจ้งข้อมูล ดังนี้ครับ
1. เลขที่สัญญา หรือ เลขหลังบัตร Next Card หรือ ทะเบียนรถ
2. ชื่อนาม-สกุลของผู้เช่าซื้อ
3. วันที่ต้องการชำระยอดปิดทั้งหมด
4. พร้อมเบอร์ติดต่อกลับที่สะดวก
เพื่อให้เจ้าหน้าที่คำนวณยอดให้ตามระบบและติดต่อกลับครับ
");
                strMessage =
                    @"
รบกวน แจ้งข้อมูล ดังนี้ครับ
1. เลขที่สัญญา หรือ เลขหลังบัตร Next Card หรือ ทะเบียนรถ
2. ชื่อนาม-สกุลของผู้เช่าซื้อ
3. วันที่ต้องการชำระยอดปิดทั้งหมด
4. พร้อมเบอร์ติดต่อกลับที่สะดวก
เพื่อให้เจ้าหน้าที่คำนวณยอดให้ตามระบบและติดต่อกลับครับ
";
            }
            else if (request.events[0].message.text == "ช่องทางชำระเงิน")
            {
                message = api.SetMessage(
                    @"คุณสามารถชำระค่างวดรถเน็คซ์ได้ ตามช่องทางดังนี้ครับ
1. ผ่านแอปฯธนาคาร(ฟรีค่าธรรมเนียม) : ได้ทุกธนาคาร 
โดยใช้คิวร์อาร์โค้ดบนใบแจ้งชำระ แสกน หรือหากไม่มี ทักมาได้ครับ
👌 ธ.ไทยพาณิชย์ สามารถใช้บาร์โค้ดบนบัตรเน็คซ์การ์ด ชำระได้
2. ผ่านจุดรับชำระเงิน(ค่าบริการเริ่ม 10บ.) : เคาน์เตอร์เวอร์วิส, เทสโก้โลตัส, เพย์@โพส 
โดยใช้ บาร์โค้ดหลังบัตรเน็คซ์การ์ด หรือบนใบแจ้งชำระ เพื่อชำระเงิน"
                    );
                strMessage =
                    @"คุณสามารถชำระค่างวดรถเน็คซ์ได้ ตามช่องทางดังนี้ครับ
1. ผ่านแอปฯธนาคาร(ฟรีค่าธรรมเนียม) : ได้ทุกธนาคาร 
โดยใช้คิวร์อาร์โค้ดบนใบแจ้งชำระ แสกน หรือหากไม่มี ทักมาได้ครับ
👌 ธ.ไทยพาณิชย์ สามารถใช้บาร์โค้ดบนบัตรเน็คซ์การ์ด ชำระได้
2. ผ่านจุดรับชำระเงิน(ค่าบริการเริ่ม 10บ.) : เคาน์เตอร์เวอร์วิส, เทสโก้โลตัส, เพย์@โพส 
โดยใช้ บาร์โค้ดหลังบัตรเน็คซ์การ์ด หรือบนใบแจ้งชำระ เพื่อชำระเงิน";
            }
            else if (request.events[0].message.text == "ค้นหาสาขาเน็คซ์")
            {
                holyType   = "card";
                bubble     = api.SetCarouselMessage();
                strMessage = "Card Carousel";
                // message = api.SetMessage("https://www.nextcapital.co.th/locator");
            }
            else if (request.events[0].type == "follow")
            {
                message = api.SetMessage(
                    string.Format(
                        @"สวัสดีครับ คุณ {0} 
ขอบคุณที่เป็นเพื่อนกับ Next Connect โดย เน็คซ์แคปปิตอล

ให้เราได้ช่วยเหลือคุณ หรือจะพูดคุยสอบถาม กับเราได้ตลอดเวลาครับผม", profile.Result.displayName));
                strMessage =
                    string.Format(
                        @"สวัสดีครับ คุณ {0} 
ขอบคุณที่เป็นเพื่อนกับ Next Connect โดย เน็คซ์แคปปิตอล

ให้เราได้ช่วยเหลือคุณ หรือจะพูดคุยสอบถาม กับเราได้ตลอดเวลาครับผม", profile.Result.displayName);
            }
            else if (request.events[0].message.text.Length == 10 && !request.events[0].message.text.Contains("-") && !request.events[0].message.text.Contains("/"))
            {
                message    = api.SetMessage("ทางเราได้รับเบอร์ติดต่อแล้ว เดี๋ยวจะมีเจ้าหน้าที่ติดต่อกลับครับ");
                strMessage = "ทางเราได้รับเบอร์ติดต่อแล้ว เดี๋ยวจะมีเจ้าหน้าที่ติดต่อกลับครับ";
                sticker    = api.SetStickerMessage("11537", "52002739");
            }
            else
            {
                message = api.SetMessage("รบกวนขอเบอร์ติดต่อคุณลูกค้า เพื่อให้เจ้าหน้าที่ติดต่อเพื่อให้ข้อมูลครับ");
                //message = api.SetMessage(func.JsonSerialize(request));
                strMessage = "รบกวนขอเบอร์ติดต่อคุณลูกค้า เพื่อให้เจ้าหน้าที่ติดต่อเพื่อให้ข้อมูลครับ";
            }


            if (holyType == "text")
            {
                response.replyToken = request.events[0].replyToken;
                response.messages.Add(message);
                await api.CallApi(response);
            }
            else if (holyType == "card")
            {
                // cardResponse.to = request.events[0].source.userId;
                // await api.CallApi(cardResponse);

                bubble.to = request.events[0].source.userId;
                await api.CallApi(bubble);
            }
            else
            {
                master.to = request.events[0].source.userId;
                await api.CallApi(master);
            }

            if (sticker.messages.Count > 0)
            {
                sticker.to = request.events[0].source.userId;
                await api.CallApi(sticker);
            }

            action.SP_InsertLogRequestMessage(
                "reply",
                request.events[0].source.userId,
                request.events[0].mode,
                strMessage,
                "",
                DateTime.Now,
                request.destination,
                "SYSTEM"
                );
            return(Ok());
        }
 public void Add(MessageResponseModel messageResponseModel)
 {
     _wcfDemoDbContext.Set <MessageResponseModel>().Add(messageResponseModel);
     _wcfDemoDbContext.SaveChanges();
 }
예제 #17
0
 public void Setup()
 {
     this.model = new MessageResponseModel();
 }
예제 #18
0
        public async Task <IActionResult> WebHook(LineRequestModel request)
        {
            LineResponseModel response = new LineResponseModel();

            LineMessageTemplate.FlexMessageMain flex = new LineMessageTemplate.FlexMessageMain();
            MessageResponseModel message             = new MessageResponseModel();

            LineMessageTemplate.RichMenuMain menu = new LineMessageTemplate.RichMenuMain();
            Task <UserProfile> profile;
            Task <LineMessageTemplate.RichMenuResponse> result;
            DataTable checkHelperCase = new DataTable();
            string    msg             = "";
            string    typeofMenu      = "";

            profile         = api.GetUserProfile(request.events[0].source.userId);
            checkHelperCase = DAC.REST_CheckHelperCase(request.events[0].source.userId);
            // KeepLog
            action.SP_InsertLogRequestMessage(
                request.events[0].type,
                request.destination,
                request.events[0].mode,
                request.events[0].type == "message" ? request.events[0].message.text : "",
                func.JsonSerialize(request),
                DateTime.Now,
                request.events[0].source.userId,
                request.events[0].source.userId
                );

            if (request.events[0].type == "follow")
            {
                if (profile.Result != null)
                {
                    action.SP_InsertUserFollow(
                        request.events[0].source.userId,
                        profile.Result.displayName == null ? "" : profile.Result.displayName,
                        profile.Result.pictureUrl == null ? "" : profile.Result.pictureUrl,
                        profile.Result.statusMessage == null ? "" : profile.Result.statusMessage,
                        profile.Result.language == null ? "" : profile.Result.language
                        );
                }
                msg                 = string.Format(template.FollowMessage(), profile.Result.displayName);
                message             = api.SetMessage(msg);
                response.replyToken = request.events[0].replyToken;
                response.messages.Add(message);
                await api.CallApi(response);
            }
            else if (request.events[0].message.text == "เช็คสถานะ")
            {
                dt      = new DataTable();
                dt      = DAC.REST_CheckStatustoFlexMessage(request.events[0].source.userId);
                flex    = template.SetupFlexMessage(dt);
                flex.to = request.events[0].source.userId;
                await api.CallApi(flex);

                return(Ok());
            }
            else if (request.events[0].message.text == "ช่วยเหลือ")
            {
                message             = api.SetMessage("ต้องการให้เราช่วยอะไรครับ");
                response.replyToken = request.events[0].replyToken;
                response.messages.Add(message);
                await api.CallApi(response);

                action.SP_InsertLogRequestMessage(
                    "reply",
                    request.events[0].source.userId,
                    request.events[0].mode,
                    request.events[0].message.text,
                    "",
                    DateTime.Now,
                    request.destination,
                    "SYSTEM"
                    );
                return(Ok());
            }
            else if (checkHelperCase.Rows.Count > 0) // Helper Case
            {
                if (checkHelperCase.Rows[0]["Log_Message"].ToString() == "ช่วยเหลือ")
                {
                    message             = api.SetMessage("ทางเราได้รับทราบปัญหาแล้ว จะเร่งดำเนินการแก้ไขให้ครับ");
                    response.replyToken = request.events[0].replyToken;
                    response.messages.Add(message);
                    await api.CallApi(response);

                    action.SP_InsertLogRequestMessage(
                        "reply",
                        request.events[0].source.userId,
                        request.events[0].mode,
                        request.events[0].message.text,
                        "",
                        DateTime.Now,
                        request.destination,
                        "SYSTEM"
                        );
                    dt = new DataTable();
                    dt = DAC.REST_GetNeedHelpMessage(request.events[0].source.userId);
                    string alertLine = template.MessageNeedHelp();
                    if (dt.Rows.Count > 0)
                    {
                        alertLine = string.Format(alertLine, dt.Rows[0]["User_Role"].ToString(), dt.Rows[0]["BranchCode"].ToString(), dt.Rows[0]["User_Name"].ToString(), dt.Rows[0]["RequestDate"].ToString(), dt.Rows[0]["message"].ToString());

                        await api.MessageToGroupSupport(alertLine);
                    }

                    return(Ok());
                }
            }
            else
            {
                if (request.events[0].message.text == "เริ่มต้นใช้งาน")
                {
                    message             = api.SetMessage("กรุณากรอก Secret Code ที่ได้รับ เพื่อเริ่มต้นใช้งาน");
                    response.replyToken = request.events[0].replyToken;
                    response.messages.Add(message);
                    await api.CallApi(response);

                    return(Ok());
                }
                // Check is AppNo
                dt = new DataTable();
                dt = DAC.CheckApplicationNo(request.events[0].message.text);
                if (dt.Rows.Count > 0)
                {
                    dtifExists = new DataTable();
                    dtifExists = DAC.REST_CheckAceptTaskExisting(request.events[0].message.text);
                    if (dtifExists.Rows.Count > 0)
                    {
                        if (!string.IsNullOrEmpty(dtifExists.Rows[0]["Application_Responsibility"].ToString()))
                        {
                            message             = api.SetMessage("ไม่สามารถทำรายการได้เนื่องจากมีคนกดรับงานไปแล้ว");
                            response.replyToken = request.events[0].replyToken;
                            response.messages.Add(message);
                            await api.CallApi(response);

                            return(Ok());
                        }
                    }
                    checker.AcceptTask(request.events[0].source.userId, dt.Rows[0]["Application_No"].ToString());
                    message             = api.SetMessage("บันทึกข้อมูลสำเร็จ");
                    response.replyToken = request.events[0].replyToken;
                    response.messages.Add(message);
                    await api.CallApi(response);

                    return(Ok());
                }

                dt = new DataTable();
                dt = DAC.CheckSecretCode(request.events[0].message.text);
                if (dt.Rows.Count == 0)
                {
                    msg                 = string.Format(template.UnAuthorizeMessage(), profile.Result.displayName);
                    message             = api.SetMessage(msg);
                    response.replyToken = request.events[0].replyToken;
                    response.messages.Add(message);
                    await api.CallApi(response);
                }
                else
                {
                    dt = new DataTable();
                    dt = DAC.MatchingUser(request.events[0].source.userId, request.events[0].message.text);

                    if (dt.Rows.Count > 0)
                    {
                        if (dt.Rows[0]["User_Role"].ToString() == "Checker" || dt.Rows[0]["User_Role"].ToString() == "BranchHead")
                        {
                            typeofMenu = "checker";
                            menu       = template.SetupRichMenuChecker(request.events[0].source.userId);
                        }
                        else
                        {
                            typeofMenu = "dealer";
                            menu       = template.SetupRichMenuDealer(request.events[0].source.userId);
                        }

                        if (string.IsNullOrEmpty(dt.Rows[0]["User_RichMenuID"].ToString()))
                        {
                            result = api.SetupMenu(menu, typeofMenu);
                            await api.SetupBackgroundMenu(result.Result.richMenuId, typeofMenu + ".png");

                            if (result != null)
                            {
                                try
                                {
                                    await api.SetDefaultMenu(result.Result.richMenuId, request.events[0].source.userId);
                                }
                                catch (Exception e)
                                {
                                    await api.DeleteMenu(result.Result.richMenuId);

                                    return(BadRequest(e.Message));
                                }
                                finally
                                {
                                    DAC.SetupRichmenubyUser(request.events[0].source.userId, result.Result.richMenuId);
                                }
                            }
                        }

                        dt = new DataTable();
                        dt = DAC.GetUserInformation(request.events[0].source.userId);
                        if (dt.Rows.Count > 0)
                        {
                            msg = string.Format(
                                template.PassAuthorizeMessage()
                                , dt.Rows[0]["User_Name"].ToString()
                                , dt.Rows[0]["User_Code"].ToString()
                                , dt.Rows[0]["User_Area"].ToString()
                                );
                            message             = api.SetMessage(msg);
                            response.replyToken = request.events[0].replyToken;
                            response.messages.Add(message);
                            await api.CallApi(response);
                        }
                    }
                    else
                    {
                    }
                }
            }

            return(Ok());
        }
예제 #19
0
        private MessageResponseModel Messager(MessageRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidFields,
                    Message = "Required parameter(s) are missing"
                });
            }

            if (!model.Service.Equals(ServiceCode.Sms) && !model.Service.Equals(ServiceCode.Email))
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidService,
                    Message = "Invalid service request"
                });
            }

            var gateway = _gatewayService.List()
                          .FirstOrDefault(x => x.ServiceCode == model.Service && x.IsActive == true);

            if (gateway == null)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InactiveGateway,
                    Message = "No active gateway available"
                });
            }

            var client = _clientService.List().ToList().FirstOrDefault(x =>
                                                                       x.ClientId.Equals(model.ClientId) && x.AccessKey.Equals(model.AccesssKey) && x.IsActive == true);

            if (client == null)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidApplication,
                    Message = "No client record is found"
                });
            }

            var existingApplication = _applicationService.List()
                                      .FirstOrDefault(x => x.ClientId == model.ClientId && x.Name.ToLower().Equals(model.AppName.ToLower()) && x.IsActive == true);

            string applicationId;
            string applicationName;

            if (existingApplication == null)
            {
                var applicationModel = new ApplicationModel()
                {
                    ClientId    = model.ClientId,
                    Name        = model.AppName,
                    DateCreated = DateTime.UtcNow
                };
                var newApplication = _applicationService.Create(applicationModel).Result;
                applicationId   = newApplication.ApplicationId;
                applicationName = newApplication.Name;
            }
            else
            {
                applicationId   = existingApplication.ApplicationId;
                applicationName = existingApplication.Name;
            }

            var price        = (model.Service == ServiceCode.Sms) ? _priceSettings.Value.SmsPrice : _priceSettings.Value.EmailPrice;
            var destinations = model.To.Split(',');
            var cost         = destinations.Length * price;



            if (client.Balance < cost)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InsufficientCredit,
                    Message = "Insufficient credit"
                });
            }

            gateway.Password = _generator.Decrypt(gateway.Password).Result;

            try
            {
                //var gatewayResponse = "local testing";

                var gatewayResponse = _messageAdapter.Send(model, gateway);


                client.Balance = client.Balance - cost;
                _clientService.Update(client);

                var request = new RequestModel()
                {
                    ApplicationId = applicationId,
                    GatewayId     = gateway.GatewayId,
                    Recipients    = destinations.Length,
                    Cost          = cost,
                    Response      = gatewayResponse,
                    DateCreated   = DateTime.UtcNow
                };

                var lastRequest = _requestService.Create(request).Result;

                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.MessageSubmitted,
                    Message = "Message(s) submited successfully",
                    Reference = lastRequest.RequestId
                });
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                //throw;
            }



            var response = new MessageResponseModel()
            {
                Error   = Data.Enums.MessageStatus.InternalServerError,
                Message = "Internal server error"
            };

            return(response);
        }
예제 #20
0
        public async Task <IActionResult> TestConnection(LineRequestModel request)
        {
            LineResponseModel response = new LineResponseModel();

            LineMessageTemplate.FlexMessageMain flex = new LineMessageTemplate.FlexMessageMain();
            MessageResponseModel message             = new MessageResponseModel();

            LineMessageTemplate.RichMenuMain menu = new LineMessageTemplate.RichMenuMain();
            Task <UserProfile> profile;
            Task <LineMessageTemplate.RichMenuResponse> result;
            DataTable checkHelperCase = new DataTable();
            string    msg             = "";
            string    typeofMenu      = "";

            try
            {
                message = api.SetMessage("กรุณากรอก Secret Code ที่ได้รับ เพื่อเริ่มต้นใช้งาน");
                for (int i = 0; i < request.events.Count; i++)
                {
                    response.replyToken = request.events[i].replyToken;
                    response.messages.Add(message);
                    // await api.CallApi(response);
                    try
                    {
                        using (HttpClient client = new HttpClient())
                        {
                            action.SP_InsertLogRequestMessage(
                                "Call API",
                                "",
                                "request.events[0].mode",
                                "",
                                "Before Call API",
                                DateTime.Now,
                                "request.events[0].source.userId",
                                "request.events[0].source.userId"
                                );
                            StringContent content = new StringContent(func.JsonSerialize(response),
                                                                      System.Text.Encoding.UTF8,
                                                                      "application/json");
                            client.DefaultRequestHeaders.Authorization
                                = new AuthenticationHeaderValue("Bearer", "q281ubFyT1L3Z1gAyrcLdLY4mHv2hXJFqAb/MEUO2OncgbgXdSsR6BDCXsrTZh0I3haZwDDaz1lrKF694gC0fTnp/CnbLma8WkiHW3UXwSf6gHxU5lNJP/IYeb1+KQRFeun9E5jJT8qx9lpQpY1S9AdB04t89/1O/w1cDnyilFU=");
                            var sresult = await client.PostAsync("https://api.line.me/v2/bot/message/reply", content);

                            var contents = await sresult.Content.ReadAsStringAsync();

                            action.SP_InsertLogRequestMessage(
                                "Call API",
                                "",
                                "request.events[0].mode",
                                "",
                                contents[0].ToString(),
                                DateTime.Now,
                                "request.events[0].source.userId",
                                "request.events[0].source.userId"
                                );
                        }
                    }
                    catch (Exception e)
                    {
                        action.SP_InsertLogRequestMessage(
                            "request.events[0].type",
                            "",
                            "Error",
                            "",
                            e.Message,
                            DateTime.Now,
                            "request.events[0].source.userId",
                            "request.events[0].source.userId"
                            );

                        return(Ok());
                    }
                }
                return(Ok());
            }
            catch (Exception e)
            {
                action.SP_InsertLogRequestMessage(
                    "request.events[0].type",
                    "",
                    "request.events[0].mode",
                    "",
                    e.Message,
                    DateTime.Now,
                    "request.events[0].source.userId",
                    "request.events[0].source.userId"
                    );

                return(Ok());
            }
        }