protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var utterance = turnContext.Activity.Text;

            _utteranceLog = _storage.ReadAsync <UtteranceLog>(new[] { UtteranceLogKey }).Result.FirstOrDefault().Value;
            if (_utteranceLog == null)
            {
                _utteranceLog = new UtteranceLog();
            }

            _utteranceLog.UtteranceList.Add(utterance);
            var changes = new Dictionary <string, object>
            {
                { UtteranceLogKey, _utteranceLog }
            };

            await _storage.WriteAsync(changes, cancellationToken);

            turnContext.Activity.RemoveRecipientMention();
            var text = turnContext.Activity.Text.Trim().ToLower();

            if (text.Contains("task", StringComparison.InvariantCultureIgnoreCase))
            {
                await GetTask(turnContext, cancellationToken);
            }
            else if (text.Contains("what?", StringComparison.InvariantCultureIgnoreCase))
            {
                await GetLastAnswer(turnContext, cancellationToken);
            }
            else
            {
                await AccessQnAMaker(turnContext, cancellationToken);
            }
        }
        private async Task GetTask(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var card   = _workflowService.GetTaskCard(turnContext.Activity.From.Name).ToHeroCard();
            var answer = "You have one task...";

            var message = MessageFactory.Text(answer);

            message.Attachments.Add(card.ToAttachment());

            _utteranceLog = _storage.ReadAsync <UtteranceLog>(new[] { UtteranceLogKey }).Result.FirstOrDefault().Value;
            _utteranceLog.UtteranceList.Add(answer);
            var changes = new Dictionary <string, object>
            {
                { UtteranceLogKey, _utteranceLog }
            };
            await _storage.WriteAsync(changes, cancellationToken);

            await turnContext.SendActivityAsync(message, cancellationToken);
        }
        private async Task AccessQnAMaker(ITurnContext <IMessageActivity> turnContext,
                                          CancellationToken cancellationToken)
        {
            var results = await _dumbBotQnAMaker.GetAnswersAsync(turnContext);

            var answer = "I have no idea how to answer that. Sorry.";

            if (results.Any())
            {
                answer = results.First().Answer;
            }

            _utteranceLog = _storage.ReadAsync <UtteranceLog>(new[] { UtteranceLogKey }).Result.FirstOrDefault().Value;
            _utteranceLog.UtteranceList.Add(answer);
            var changes = new Dictionary <string, object>
            {
                { UtteranceLogKey, _utteranceLog }
            };
            await _storage.WriteAsync(changes, cancellationToken);

            await turnContext.SendActivityAsync(MessageFactory.Text(answer), cancellationToken);
        }
Example #4
0
        public string Login(string id, string pass, string DeviceId, string offid = "")
        {
            //entities.GetValue("UserId").ToString()
            //entities.GetValue("Password").ToString()

            EmployeeModel employee = CallApi("vk032017", "Admin@123", DeviceId, "");

            employee.DeviceId = DeviceId;
            var myitem = new UtteranceLog();

            myitem.employee = employee;
            IDictionary <string, object> changes = new Dictionary <string, object>();

            {
                changes.Add(DeviceId + "employee", myitem);
            }
            System.Threading.CancellationToken s;
            EmptyBot._myStorage.WriteAsync(changes, s);

            string content = employee.Email != null ? "Thanks " + employee.FirstName + " you are logged in successfully" : "Wrong Credentilas";

            return(employee.Email != null ? "Thanks " + employee.FirstName + " you are logged in successfully" : "Wrong Credentilas");
        }
Example #5
0
        //protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
        //{

        //}

        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
        {
            //  DeviceId = turnContext.Activity.From.Id;


            RecognizerResult re = new RecognizerResult();


            EmployeeModel ems = new EmptyBot().GiveEmployee();

            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                DeviceId = turnContext.Activity.From.Id.Substring(0, 36);
                // await turnContext.SendActivityAsync(DeviceId);
                var recognizerResult = await this.Recognizer.RecognizeAsync(turnContext, cancellationToken);

                var    topIntent      = recognizerResult?.GetTopScoringIntent();
                string strIntent      = (topIntent != null) ? topIntent.Value.intent : "";
                double dblIntentScore = (topIntent != null) ? topIntent.Value.score : 0.0;
                re = recognizerResult;
                if (turnContext.Activity.Value != null)
                {
                    JObject data = turnContext.Activity.Value as JObject;
                    if (data.GetValue("code1") != null)
                    {
                        string[] codes = data.GetValue("code1").ToString().Split(",");

                        // await turnContext.SendActivityAsync(data.GetValue("code1").ToString());



                        if (ems.Allow_ticketing == "FALSE")
                        {
                            await turnContext.SendActivityAsync("You are not able to create booking");
                        }
                        else
                        {
                            await turnContext.SendActivityAsync(new RequestToBookApi().BookFlight(recognizerResult.Entities, codes));
                        }
                    }
                    else if (data.GetValue("LoginID", StringComparison.CurrentCulture) != null)
                    {
                        //JObject login = turnContext.Activity.Value as JObject;


                        await turnContext.SendActivityAsync(new LoginIntent().Login(data.GetValue("LoginID", StringComparison.CurrentCulture).ToString(), data.GetValue("Password", StringComparison.CurrentCulture).ToString(), DeviceId, ""));
                    }
                }

                else
                {
                    string LoginId  = turnContext.Activity.From.Id.Substring(turnContext.Activity.From.Id.IndexOf("|") + 1, turnContext.Activity.From.Id.LastIndexOf("|") - (turnContext.Activity.From.Id.IndexOf("|") + 1));
                    string Password = turnContext.Activity.From.Id.Substring(turnContext.Activity.From.Id.LastIndexOf("|") + 1);
                    new LoginIntent().Login(LoginId, Password, DeviceId, "");
                    List <CustomFlightDetailModel> cfdm = new EmptyBot().GetIteneraries();

                    switch (strIntent)
                    {
                    case "Welcome":
                        Random        rm  = new Random();
                        int           num = rm.Next(1, 8);
                        EmployeeModel e   = new EmptyBot().GiveEmployee();
                        switch (num)
                        {
                        case 1:
                            await turnContext.SendActivityAsync(" How can I help you today?");

                            break;

                        case 2:
                            await turnContext.SendActivityAsync("Hello");

                            break;

                        case 8:
                            await turnContext.SendActivityAsync(DateTime.Now.Hour < 12 && DateTime.Now.Hour > 5? "Good morning" : DateTime.Now.Hour > 16? "Good evening" : "Good afternoon");

                            break;

                        case 7:
                            await turnContext.SendActivityAsync("Welcome " + e.FirstName);

                            break;

                        case 4:
                            await turnContext.SendActivityAsync("Namaste!! What can I assist you with today?");

                            break;

                        case 3:
                            await turnContext.SendActivityAsync("How can I assist you today?");

                            break;

                        case 5:
                            await turnContext.SendActivityAsync("Hi " + e.FirstName);

                            break;

                        case 6:
                            await turnContext.SendActivityAsync("Hello " + e.FirstName);

                            break;

                        default:
                            await turnContext.SendActivityAsync("hope you are having a great day? How can I assist you today?");

                            break;
                        }



                        break;

                    case "Flight_availability":

                        //await turnContext.SendActivityAsync(DeviceId);
                        //await turnContext.SendActivityAsync(LoginId);
                        //await turnContext.SendActivityAsync(Password);
                        EmployeeModel em = GiveEmployee();
                        if (em.Email == null)
                        {
                            var inputcard = turnContext.Activity.CreateReply();
                            var inputjson = new LoginIntent().InputCard();
                            //var inputjson = File.ReadAllText(System.IO.Directory.GetCurrentDirectory() + @"/simplecard.json");
                            Attachment attachment = new Attachment
                            {
                                ContentType = AdaptiveCard.ContentType,
                                Content     = AdaptiveCard.FromJson(inputjson).Card
                            };
                            inputcard.Attachments = new List <Attachment>()
                            {
                                attachment
                            };
                            await turnContext.SendActivityAsync("please login to proceed..");

                            await turnContext.SendActivityAsync(inputcard);
                        }
                        else
                        {
                            await turnContext.SendActivityAsync("Search is in progress...");

                            var response = turnContext.Activity.CreateReply();
                            var x        = new GiveJson().CreateAdaptiveCardFromJsonModified(recognizerResult.Entities);
                            response.Attachments = x;
                            if (x != null)
                            {
                                Random rm1  = new Random();
                                int    num1 = rm1.Next(1, 6);
                                switch (num1)
                                {
                                case 1:
                                    await turnContext.SendActivityAsync("Here is the snapshot");

                                    break;

                                case 2:
                                    await turnContext.SendActivityAsync("Hi " + em.FirstName + ", as per policy the lowest fare is available");

                                    break;

                                case 3:
                                    await turnContext.SendActivityAsync("Certainly " + em.FirstName + ", Here are the details");

                                    break;

                                case 4:
                                    await turnContext.SendActivityAsync("Sharing results for flights ");

                                    break;

                                case 5:
                                    await turnContext.SendActivityAsync("Sure, Here you are!!Please select the flight to book");

                                    break;

                                case 6:
                                    await turnContext.SendActivityAsync("Hi" + em.FirstName + ", you have booked for " + recognizerResult.Entities.GetValue("City").First + " to " + recognizerResult.Entities.GetValue("City").Last + ". Here are the flight details");

                                    break;
                                }


                                await turnContext.SendActivityAsync(response);

                                //await turnContext.SendActivityAsync("would you like to search for other flights??");
                                var myitem = new UtteranceLog();



                                myitem.UtteranceList.AddRange(PIT.GiveItenerary());


                                IDictionary <string, object> changes = new Dictionary <string, object>();
                                {
                                    changes.Add(DeviceId + "pricedIteneraries", myitem);
                                }
                                await _myStorage.WriteAsync(changes, cancellationToken);

                                //  await turnContext.SendActivityAsync(DeviceId);
                            }
                            else
                            {
                                await turnContext.SendActivityAsync("Sorry no flights are available");
                            }
                        }
                        break;

                    case "Flight_details":


                        if (cfdm.Count > 0)
                        {
                            await turnContext.SendActivityAsync(new FlightDetails().GetFlightDetails(recognizerResult.Entities));
                        }
                        else
                        {
                            await turnContext.SendActivityAsync("Please seacrh for available flights to see details");
                        }
                        break;

                    case "mail":

                        if (cfdm.Count > 0)
                        {
                            await turnContext.SendActivityAsync(new SendMail().Mail(recognizerResult.Entities));
                        }
                        else
                        {
                            await turnContext.SendActivityAsync("Please seacrh for available flights to see details");
                        }

                        break;

                    case "Fares":

                        if (cfdm.Count > 0)
                        {
                            await turnContext.SendActivityAsync(new SendMail().FareDetail(recognizerResult.Entities));
                        }
                        else
                        {
                            await turnContext.SendActivityAsync("Please seacrh for available flights to see fares");
                        }
                        break;

                    case "Queries":
                        EmployeeModel em2 = GiveEmployee();
                        if (em2.Email == null)
                        {
                            var        inputcard  = turnContext.Activity.CreateReply();
                            var        inputjson  = new LoginIntent().InputCard();
                            Attachment attachment = new Attachment
                            {
                                ContentType = AdaptiveCard.ContentType,
                                Content     = AdaptiveCard.FromJson(inputjson).Card
                            };
                            inputcard.Attachments = new List <Attachment>()
                            {
                                attachment
                            };
                            await turnContext.SendActivityAsync("please login to proceed..");

                            await turnContext.SendActivityAsync(inputcard);
                        }
                        else
                        {
                            Query    Query = new Query();
                            string[] str1  = new string[] { DeviceId + "query" };
                            var      temp1 = _myStorage.ReadAsync <UtteranceLog>(str1);
                            if (temp1.Result.Count > 0)
                            {
                                Query = temp1.Result[DeviceId + "query"].query;
                            }
                            var qresponse = turnContext.Activity.CreateReply();
                            var r         = new QueryResponse().CreateAdaptiveCardFromJson(recognizerResult.Entities, Query);

                            if (r != null && !(r is List <Attachment>))
                            {
                                await turnContext.SendActivityAsync(r);
                            }

                            if (r != null && (r is List <Attachment>))
                            {
                                qresponse.Attachments = r;

                                Random rm1  = new Random();
                                int    num1 = rm1.Next(1, 6);
                                switch (num1)
                                {
                                case 1:
                                    await turnContext.SendActivityAsync("Here is the snapshot");

                                    break;

                                case 2:
                                    await turnContext.SendActivityAsync("Hi " + ems.FirstName + ", as per policy the lowest fare is available");

                                    break;

                                case 3:
                                    await turnContext.SendActivityAsync("Certainly " + ems.FirstName + ", Here are the details");

                                    break;

                                case 4:
                                    await turnContext.SendActivityAsync("Sharing results for flights ");

                                    break;

                                case 5:
                                    await turnContext.SendActivityAsync("Sure, Here you are!!Please select the flight to book");

                                    break;

                                case 6:
                                    await turnContext.SendActivityAsync("Hi" + ems.FirstName + ", you have booked for " + recognizerResult.Entities.GetValue("City").First + " to " + recognizerResult.Entities.GetValue("City").Last + ". Here are the flight details");

                                    break;
                                }
                                await turnContext.SendActivityAsync(qresponse);

                                //await turnContext.SendActivityAsync("would you like to search for other flights??");
                                var myitem = new UtteranceLog();



                                myitem.UtteranceList.AddRange(PIT.GiveItenerary());


                                IDictionary <string, object> changes = new Dictionary <string, object>();
                                {
                                    changes.Add(DeviceId + "pricedIteneraries", myitem);
                                }
                                await _myStorage.WriteAsync(changes, cancellationToken);
                            }

                            if (r == null)
                            {
                                await turnContext.SendActivityAsync("Sorry no flights are available");
                            }
                        }
                        break;

                    case "BookFlight":

                        if (cfdm.Count > 0)
                        {
                            EmployeeModel em1 = GiveEmployee();

                            if (em1.Allow_ticketing == "FALSE")
                            {
                                await turnContext.SendActivityAsync("You are not able to create booking");
                            }
                            else
                            {
                                if (recognizerResult.Entities.GetValue("FlightNumber") != null)
                                {
                                    await turnContext.SendActivityAsync(new RequestToBookApi().BookFlight(recognizerResult.Entities, new string[] { }));
                                }
                                else
                                {
                                    await turnContext.SendActivityAsync("Please select flight");
                                }
                            }
                        }
                        else
                        {
                            await turnContext.SendActivityAsync("Please seacrh for available flights to book flights");
                        }

                        break;

                    case "CustomFlights":

                        var res = turnContext.Activity.CreateReply();
                        res.Attachments = new List <Attachment> {
                            new FlightDetails().Customflights(recognizerResult.Entities)
                        };
                        await turnContext.SendActivityAsync(res);

                        break;

                    default:
                        await turnContext.SendActivityAsync("Sorry i did not understand");

                        break;
                    }
                }
            }
            //else if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate&& turnContext.Activity.MembersAdded.Count==1)
            //{
            //    await turnContext.SendActivityAsync("Hello!! I am SPARROW, a virtual travel assistant. How can I help you today?"+ DeviceId);


            //    //try
            //    //{
            //    //    await turnContext.SendActivityAsync("Hello!! I am SPARROW, a virtual travel assistant. How can I help you today?");
            //    //    WebRequest request = WebRequest.Create("http://online-corporate-traveller.amadeus.com/live/V17_2_0/webapi/api/SBTMobile/FlightSearch");
            //    //    request.Method = "POST";
            //    //    request.ContentType = "application/json";
            //    //    Stream dataStream = request.GetRequestStream();

            //    //    // getJson(date, direct, type, quantity, origin, desti);
            //    //    // JObject abc = new SearchRequest().GetJson();
            //    //    new LoginIntent().Login(re.Entities);
            //    //    EmployeeModel em = new EmptyBot().GiveEmployee();
            //    //    byte[] byteArray = Encoding.UTF8.GetBytes(new SearchRequest().GetJson("DEL", "BOM", DateTime.Now.AddDays(3), "0", "1",em.TokenID, "AI"));
            //    //    request.ContentLength = byteArray.Length;
            //    //    dataStream.Write(byteArray, 0, byteArray.Length);
            //    //    dataStream.Close();
            //    //    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //    //    using (Stream receiveStream = Flight_Availability.GetStreamForResponse(response))
            //    //    {
            //    //        StreamReader sr = new StreamReader(receiveStream);
            //    //        string responseFromServer = sr.ReadToEnd();
            //    //        await turnContext.SendActivityAsync(responseFromServer);
            //    //    }

            //    //    dataStream.Close();
            //    //    response.Close();
            //    //}
            //    //catch (Exception ex)
            //    //{
            //    //    throw ex;
            //    //}

            //}

            else if (turnContext.Activity.Type == ActivityTypes.Event)
            {
                await turnContext.SendActivityAsync("Hello!! I am SPARROW, a virtual travel assistant.");
            }
        }