public static IDisposable BindPreviewLoading(
     this StickerMessageModel model)
 {
     return(BindPreviewLoading(
                model,
                Locator.Current.GetService <IPreviewLoader>()));
 }
        private static Preview GetPreview(IPreviewLoader previewLoader, StickerMessageModel model)
        {
            if (model.StickerData?.Thumbnail != null)
            {
                return(previewLoader.GetPreview(model.StickerData.Thumbnail));
            }

            return(null);
        }
Exemple #3
0
        public StickerModel SetStickerMessage(string packageid, string stickerid)
        {
            StickerModel        sticker = new StickerModel();
            StickerMessageModel message = new StickerMessageModel();

            message.type      = "sticker";
            message.packageId = packageid;
            message.stickerId = stickerid;

            sticker.messages.Add(message);

            return(sticker);
        }
        /// <summary>
        /// 自動產生訊息類型(回傳Json字串)
        /// </summary>
        /// <param name="receiveMessage">接收到的訊息</param>
        public async Task <string> AutoProcessMessageTypeWithJson(ReceiveMessage receiveMessage)
        {
            string        jsonMessages = "{0}";
            StringBuilder message      = new StringBuilder();

            StickerMessageModel stickerMessage = new StickerMessageModel();
            TextMessageModel    textMessage    = new TextMessageModel();

            SpecificTextMessage specificTextMessage = new SpecificTextMessage(_lineClient);

            switch (receiveMessage.type)
            {
            case MessageType.sticker:
                stickerMessage.packageId = receiveMessage.packageId;
                stickerMessage.stickerId = receiveMessage.stickerId;
                message.Append(JsonConvert.SerializeObject(stickerMessage));
                break;

            case MessageType.text:
                string repltResult = await specificTextMessage.ReplySpecificTextWithJson(receiveMessage.text);

                message.Append(repltResult);
                break;

            case MessageType.image:
                textMessage.text = "那是什麼?一片黑?";
                message.Append(JsonConvert.SerializeObject(textMessage));
                break;

            case MessageType.audio:
                textMessage.text = "蛤?你說什麼?";
                message.Append(JsonConvert.SerializeObject(textMessage));
                break;

            default:
                textMessage.text = "很抱歉,我只會重複你說的話或貼圖。";
                message.Append(JsonConvert.SerializeObject(textMessage));
                break;
            }

            jsonMessages = string.Format(jsonMessages, message.ToString());

            return(jsonMessages);
        }
        /// <summary>
        /// 自動產生訊息類型
        /// </summary>
        /// <param name="receiveMessage">接收到的訊息</param>
        public async Task <List <MessageModel> > AutoProcessMessageType(ReceiveMessage receiveMessage)
        {
            List <MessageModel> messagesList = new List <MessageModel>();

            StickerMessageModel stickerMessage = new StickerMessageModel();
            TextMessageModel    textMessage    = new TextMessageModel();

            SpecificTextMessage specificTextMessage = new SpecificTextMessage(_lineClient);

            switch (receiveMessage.type)
            {
            case MessageType.sticker:
                stickerMessage.packageId = receiveMessage.packageId;
                stickerMessage.stickerId = receiveMessage.stickerId;
                messagesList.Add(stickerMessage);
                break;

            case MessageType.text:
                MessageModel result = await specificTextMessage.ReplySpecificText(receiveMessage.text);

                messagesList.Add(result);
                break;

            case MessageType.image:
                textMessage.text = "那是什麼?一片黑?";
                messagesList.Add(textMessage);
                break;

            case MessageType.audio:
                textMessage.text = "蛤?你說什麼?";
                messagesList.Add(textMessage);
                break;

            default:
                textMessage.text = "很抱歉,我只會重複你說的話或貼圖。";
                messagesList.Add(textMessage);
                break;
            }

            return(messagesList);
        }
        public static IDisposable BindPreviewLoading(
            this StickerMessageModel model,
            IPreviewLoader previewLoader)
        {
            if (model.Preview == null)
            {
                model.Preview = GetPreview(previewLoader, model);

                if (model.Preview == null || model.Preview.Bitmap == null)
                {
                    return(LoadPreview(previewLoader, model)
                           .SubscribeOn(RxApp.TaskpoolScheduler)
                           .ObserveOn(RxApp.MainThreadScheduler)
                           .Accept(preview =>
                    {
                        model.Preview = preview;
                    }));
                }
            }

            return(Disposable.Empty);
        }
Exemple #7
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());
        }
        private static IObservable <Preview> LoadPreview(IPreviewLoader previewLoader, StickerMessageModel model)
        {
            if (model.StickerData != null)
            {
                if (model.StickerData?.Thumbnail != null)
                {
                    return(previewLoader.LoadPreview(model.StickerData.Thumbnail)
                           .Concat(previewLoader.LoadPreview(model.StickerData)));
                }

                return(previewLoader.LoadPreview(model.StickerData));
            }

            return(Observable.Empty <Preview>());
        }