Ejemplo n.º 1
0
        public MessageResponse Consume(string phone, string Text = "", bool isStart = false)
        {
            DetailedResponse <MessageResponse> messageResponse;

            assistant.SetServiceUrl(ApiUrl);
            assistant.DisableSslVerification(true);

            var sessionId = string.Empty;

            if (isStart)
            {
                UserSession[phone] = assistant.CreateSession(AssistantId);
                _sessionsManager.SetSession(phone, UserSession[phone].Result.SessionId);
            }
            else if (UserSession[phone] == null)
            {
                UserSession[phone] = assistant.CreateSession(AssistantId);

                sessionId = _sessionsManager.GetSession(phone)?.LastSessionId;
                if (string.IsNullOrWhiteSpace(sessionId))
                {
                    _sessionsManager.SetSession(phone, UserSession[phone].Result.SessionId);
                }
                else
                {
                    UserSession[phone].Result.SessionId = sessionId;
                }
            }

            messageResponse = assistant.Message(AssistantId, UserSession[phone].Result.SessionId, new MessageInput()
            {
                Text = Text
            });

            MessageResponse watsonResponse = messageResponse.Result;


            return(watsonResponse);
        }
Ejemplo n.º 2
0
        public Task ChatBot([FromForm] object data)
        {
            try
            {
                var webHookMessage = JsonSerializer.Deserialize <WebhookResponse>(this.HttpContext.Request.Form["data"].ToString());

                var senderPhone = _config.GetValue <string>("SenderPhone");
                if (senderPhone == webHookMessage.from)
                {
                    return(null);
                }
                var userStep = _sessionsManager.GetSession(webHookMessage.from)?.LatestResponseStep;
                switch (userStep)
                {
                case 1:
                {
                    var car = UserAuctionDetails[webHookMessage.from].Cars[UserCarNum[webHookMessage.from]];

                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);

                    string message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    if (message.Contains("please select from choices"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else
                    {
                        using (var multiPartFormData = new MultipartFormDataContent())
                        {
                            multiPartFormData.Add(new StringContent(webHookMessage.from), "authtoken");
                            multiPartFormData.Add(new StringContent(car.AuctionInfo.lot.ToString()), "ciaid");
                            multiPartFormData.Add(new StringContent(Emirates.GetValueOrDefault(int.Parse(webHookMessage.text)).Key.ToString()), "hayazaOriginId");
                            var result = WebClientHelper.Consume(APIBaseUrl, HttpMethod.Get, "carsonline/updatehyazaorigin?source=androidphone", multiPartFormData);
                        }

                        UserSelectedEmirate[webHookMessage.from] = webHookMessage.text;
                        message = message.Replace("{number}", webHookMessage.text).Replace("{country}", Emirates.GetValueOrDefault(int.Parse(webHookMessage.text)).Value);
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }


                    break;
                }

                case 2:
                {
                    var car = UserAuctionDetails[webHookMessage.from].Cars[UserCarNum[webHookMessage.from]];



                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;

                    if (message.Contains("please type yes or no"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else if (UserWatsonResult[webHookMessage.from].Output.Entities[0].Value.Contains("no"))
                    {
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{CarNum}", car.makeEn + " " + car.modelEn).Replace("{number}", car.AuctionInfo.lot.ToString()).
                                  Replace("{currency}", car.AuctionInfo.currencyEn).Replace("{price}", car.AuctionInfo.currentPrice.ToString());

                        message += Environment.NewLine + "1- Abu Dhabi" + Environment.NewLine + "2- Dubai" + Environment.NewLine + "3- Sharja" + Environment.NewLine + "4- Ras Al Khaimah" +
                                   Environment.NewLine + "5- Fujairah" + Environment.NewLine + "6- Ajman" + Environment.NewLine + "7- Umm Al Quwian";
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from, 1);
                    }
                    else if (UserWatsonResult[webHookMessage.from].Output.Entities[0].Value.Contains("yes"))
                    {
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{country}", Emirates.GetValueOrDefault(int.Parse(UserSelectedEmirate[webHookMessage.from])).Value).Replace("{lot}", car.AuctionInfo.lot.ToString());
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }

                    break;
                }

                case 3:
                {
                    if (webHookMessage.text.Contains("https://maps.google.com/maps?q="))
                    {
                        var locationText    = WebUtility.UrlDecode(webHookMessage.text);
                        var splits          = locationText.Split(new string[] { "?q=", "&" }, options: StringSplitOptions.RemoveEmptyEntries);
                        var locationLatLong = splits[1];
                        var locationSplits  = locationLatLong.Split(",");
                        var latitude        = locationSplits[0];
                        var longitude       = locationSplits[1];

                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, "1");
                        var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }
                    else
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from);
                        var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    break;
                }

                case 4:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    message += Environment.NewLine + "1- 9:00AM - 1:00PM" + Environment.NewLine + "2- 1:00PM - 5:00PM" + Environment.NewLine + "3- 5:00PM - 9:00PM";
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    break;
                }

                case 5:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    if (message.Contains("please choose from choices"))
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                    }
                    else
                    {
                        WebHookHelper.sendTXTMsg(webHookMessage.from, message);
                        _sessionsManager.UpdateSessionStep(webHookMessage.from);
                    }

                    break;
                }

                case 6:
                {
                    UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, webHookMessage.text);
                    var message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);

                    var nextCars = UserCars[webHookMessage.from].Where(c => (string.IsNullOrEmpty(c.BidderHyazaOrigin) && c.RequireSelectHyaza == 1) ||
                                                                       (c.DeliveryStatus != 1 && c.CheckOutInfo.HasSourceLocation == 1 && c.CheckOutInfo.AllowDeliveryRequest == 1));
                    if (nextCars != null && nextCars.Any())
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from, "1");
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text.Replace("{lot}", nextCars.FirstOrDefault().AuctionInfo.lot.ToString());
                    }
                    else
                    {
                        UserWatsonResult[webHookMessage.from] = _watsonHelper.Consume(webHookMessage.from);
                        message = UserWatsonResult[webHookMessage.from].Output.Generic[0].Text;
                    }
                    WebHookHelper.sendTXTMsg(webHookMessage.from, message);

                    ChatBot(UserAuthToken[webHookMessage.from], UserAuctionId[webHookMessage.from], webHookMessage.from);

                    break;
                }



                default:
                {
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                LogHelper.LogException(ex);
            }
            return(null);
        }