public async Task LengthCheckPromptTest(IBotContext context)
        {
            dynamic conversationState = ConversationState <StoreItem> .Get(context);

            TextPrompt askForName = new TextPrompt(MinLengthValidator);

            if (conversationState["topic"] != "textPromptTest")
            {
                conversationState["topic"] = "textPromptTest";
                await askForName.Prompt(context, "Your Name:");
            }
            else
            {
                var textResult = await askForName.Recognize(context);

                if (textResult.Succeeded())
                {
                    context.Reply(textResult.Value);
                }
                else
                {
                    context.Reply(textResult.Status.ToString());
                }
            }
        }
Esempio n. 2
0
        public async Task LengthCheckPromptTest(IBotContext context)
        {
            dynamic conversationState = ConversationState <StoreItem> .Get(context);

            TextPrompt askForName = new TextPrompt(MinLengthValidator);

            if (conversationState["topic"] != "textPromptTest")
            {
                conversationState["topic"] = "textPromptTest";
                await askForName.Prompt(context, "Your Name:");
            }
            else
            {
                var text = await askForName.Recognize(context);

                if (text != null)
                {
                    context.Reply("Passed");
                    context.Reply(text);
                }
                else
                {
                    context.Reply("Failed");
                }
            }
        }
Esempio n. 3
0
        public static void ShowWorkItems(IBotContext context, List <Workitem> workitems, IHttpContextAccessor accessor, bool lastOnly = false)
        {
            if ((workitems == null) || (workitems.Count == 0))
            {
                context.Reply("You have no workitems saved.");
                return;
            }

            List <Attachment> attachments = new List <Attachment>();

            if (lastOnly)
            {
                workitems = new List <Workitem>()
                {
                    workitems.LastOrDefault()
                };
            }

            foreach (var item in workitems)
            {
                var card = new WorkItemCard(item);

                Attachment attachment = new Attachment()
                {
                    ContentType = AdaptiveCard.ContentType,
                    Content     = card.GetCard(accessor)
                };

                attachments.Add(attachment);
            }
            var activity = MessageFactory.Carousel(attachments);

            context.Reply(activity);
        }
        protected override Task OnReceiveActivity(IBotContext context)
        {
            var msgActivity = context.Request.AsMessageActivity();

            if (msgActivity != null)
            {
                var myState = context.GetConversationState <MyState>();
                myState.TurnNumber++;

                // calculate something for us to return
                int length = (msgActivity.Text ?? string.Empty).Length;

                // return our reply to the user
                context.Reply($"[{myState.TurnNumber}] You sent {msgActivity.Text} which was {length} characters");
                return(Task.CompletedTask);
            }

            var convUpdateActivity = context.Request.AsConversationUpdateActivity();

            if (convUpdateActivity != null)
            {
                foreach (var newMember in convUpdateActivity.MembersAdded)
                {
                    if (newMember.Id != convUpdateActivity.Recipient.Id)
                    {
                        context.Reply("Hello and welcome to the echo bot.");
                    }
                }
                return(Task.CompletedTask);
            }

            return(Task.CompletedTask);
        }
        protected override Task OnReceiveActivity(IBotContext context)
        {
            if ((context.Request.Type == ActivityTypes.Message) && (context.Request.AsMessageActivity().Text.Length > 0))
            {
                var message = context.Request.AsMessageActivity().Text;

                // If bot doesn't have state it needs, prompt for it.
                if (context.State.UserProperties["name"] == null)
                {
                    // On the first turn, prompt and update state that conversation is in a prompt.
                    if (context.State.ConversationProperties["prompt"] != "name")
                    {
                        context.State.ConversationProperties["prompt"] = "name";
                        context.Reply("What is your name?");
                    }
                    else
                    {
                        // On the subsequent turn, update state with reply and update state that prompt has completed.
                        context.State.ConversationProperties["prompt"] = "";
                        context.State.UserProperties["name"]           = message;
                        context.Reply($"Great, I'll call you '{ context.State.UserProperties["name"] }'!");
                    }
                }
                else
                {
                    context.Reply($"{ context.State.UserProperties["name"]} said: '{ message }'");
                }
            }

            return(Task.CompletedTask);
        }
            public async Task ReceiveActivity(IBotContext context, MiddlewareSet.NextDelegate next)
            {
                context.Reply("BEFORE");
                await next();

                context.Reply("AFTER");
            }
Esempio n. 7
0
        private async Task <bool> PromptForLogin(IBotContext context)
        {
            if (context.Request.AsMessageActivity().Text == "signin")
            {
                //show card for the LogIn
                IMessageActivity activity = ((Activity)context.Request).CreateReply();
                var OAuthSignInUrl        = await AuthenticationHelper.GetAuthUrlAsync(context.ConversationReference);

                var card = new SigninCard(
                    text: "Sign in",
                    buttons: new CardAction[] {
                    new CardAction(
                        type: "signin",
                        title: "Sign In",
                        text: "Sign In",
                        value: $"{OAuthSignInUrl}"
                        )
                });

                activity.Attachments.Add(new Attachment(HeroCard.ContentType, content: card));

                context.Reply(activity);
                //if you want to send the link as a hyperlink --> context.Reply($"[Click Here to Sign In]({OAuthSignInUrl})");
                return(true);
            }
            else if (context.Request.AsMessageActivity().Text == "logout")
            {
                context.State.UserProperties.Remove("token");
                string signoutURl = "https://login.microsoftonline.com/common/oauth2/logout";
                context.Reply($"In order to finish the sign out, please click at this [link]({signoutURl}).");
                return(true);
            }
            return(false);
        }
Esempio n. 8
0
        public async Task OnReceiveActivity(IBotContext context)
        {
            var msgActivity = context.Request.AsMessageActivity();

            if (msgActivity != null)
            {
                var conversationState = context.GetConversationState <EchoState>() ?? new EchoState();

                conversationState.TurnNumber++;

                // calculate something for us to return
                int length = (msgActivity.Text ?? string.Empty).Length;

                // simulate calling a dependent service that was injected
                await _myService.DoSomethingAsync();

                // return our reply to the user
                context.Reply($"[{conversationState.TurnNumber}] You sent {msgActivity.Text} which was {length} characters");
            }

            var convUpdateActivity = context.Request.AsConversationUpdateActivity();

            if (convUpdateActivity != null)
            {
                foreach (var newMember in convUpdateActivity.MembersAdded)
                {
                    if (newMember.Id != convUpdateActivity.Recipient.Id)
                    {
                        context.Reply("Hello and welcome to the echo bot.");
                    }
                }
            }
        }
Esempio n. 9
0
        public async Task ReceiveActivity(IBotContext context, MiddlewareSet.NextDelegate next)
        {
            if (context.Request.Type == ActivityTypes.Message)
            {
                var messageActivity = context.Request.AsMessageActivity();
                if (!string.IsNullOrEmpty(messageActivity.Text))
                {
                    var results = await _qnaMaker.GetAnswers(messageActivity.Text.Trim()).ConfigureAwait(false);

                    if (results.Any())
                    {
                        if (!string.IsNullOrEmpty(_options.DefaultAnswerPrefixMessage))
                        {
                            context.Reply(_options.DefaultAnswerPrefixMessage);
                        }

                        context.Reply(results.First().Answer);

                        if (_options.EndActivityRoutingOnAnswer)
                        {
                            //Question is answered, don't keep routing
                            return;
                        }
                    }
                }
            }

            await next().ConfigureAwait(false);
        }
Esempio n. 10
0
        private Task BotReceiveHandler(IBotContext context)
        {
            var msgActivity = context.Request.AsMessageActivity();

            if (msgActivity != null)
            {
                long turnNumber = context.State.Conversation["turnNumber"] ?? 0;
                context.State.Conversation["turnNumber"] = ++turnNumber;

                // calculate something for us to return
                int length = (msgActivity.Text ?? string.Empty).Length;

                // return our reply to the user
                context.Reply($"[{turnNumber}] You sent {msgActivity.Text} which was {length} characters");
                return(Task.CompletedTask);
            }

            var convUpdateActivity = context.Request.AsConversationUpdateActivity();

            if (convUpdateActivity != null)
            {
                foreach (var newMember in convUpdateActivity.MembersAdded)
                {
                    if (newMember.Id != convUpdateActivity.Recipient.Id)
                    {
                        context.Reply("Hello and welcome to the echo bot.");
                    }
                }
                return(Task.CompletedTask);
            }

            return(Task.CompletedTask);
        }
Esempio n. 11
0
        public RootTopic(IBotContext context) : base(context)
        {
            // User state initialization should be done once in the welcome
            //  new user feature. Placing it here until that feature is added.
            if (context.State.UserProperties[USER_STATE_ALARMS] == null)
            {
                context.State.UserProperties[USER_STATE_ALARMS] = new List <Alarm>();
            }

            this.SubTopics.Add(ADD_ALARM_TOPIC, () =>
            {
                var addAlarmTopic = new AddAlarmTopic();

                addAlarmTopic.Set
                .OnSuccess((ctx, alarm) =>
                {
                    this.ClearActiveTopic();

                    ((List <Alarm>)ctx.State.UserProperties[USER_STATE_ALARMS]).Add(alarm);

                    context.Reply($"Added alarm named '{ alarm.Title }' set for '{ alarm.Time }'.");
                })
                .OnFailure((ctx, reason) =>
                {
                    this.ClearActiveTopic();

                    context.Reply("Let's try something else.");

                    this.ShowDefaultMessage(ctx);
                });

                return(addAlarmTopic);
            });
        }
Esempio n. 12
0
        private Task BotReceiveHandler(IBotContext context, MiddlewareSet.NextDelegate next)
        {
            if (context.Request.Type == ActivityTypes.Message)
            {
                context.Reply($"the top intent was: {context.TopIntent.Name}");

                foreach (var entity in context.TopIntent.Entities)
                {
                    context.Reply($"entity: {entity.ValueAs<string>()}");
                }
            }
            return(Task.CompletedTask);
        }
            public async Task ReceiveActivity(IBotContext context, MiddlewareSet.NextDelegate next)
            {
                context.Reply("BEFORE");

                try
                {
                    await next();
                }
                catch (Exception ex)
                {
                    context.Reply("CAUGHT:" + ex.Message);
                }

                context.Reply("AFTER");
            }
 private async Task BotReceiveHandler(IBotContext context, MiddlewareSet.NextDelegate next)
 {
     if (context.Request.Type == ActivityTypes.Message)
     {
         context.Reply($"echo: {context.Request.AsMessageActivity().Text}");
     }
 }
Esempio n. 15
0
        public static IBotContext ShowTyping(this IBotContext context)
        {
            Activity activity = ((Activity)context.Request).CreateReply();

            activity.Type = ActivityTypes.Typing;
            return(context.Reply((IActivity)activity));
        }
Esempio n. 16
0
        public async Task MyCodeHandler(IBotContext context)
        {
            Assert.AreEqual(true, context.State["ContextCreated"]);
            Assert.IsTrue(context.Request.AsMessageActivity().Text.Contains("ReceiveActivity"));
            Assert.IsFalse(context.Request.AsMessageActivity().Text.Contains("SendActivity"));
            if (context.Request.AsMessageActivity().Text.StartsWith("proactive"))
            {
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                var reference = context.ConversationReference;
                Task.Run(async() =>
                {
                    await Task.Delay(1000).ConfigureAwait(false);
                    await context.Adapter.ContinueConversation(reference, async(context2) =>
                    {
                        Assert.AreEqual(true, context2.State["ContextCreated"]);
                        Assert.IsNull(context2.Request);
                        context2.Reply("proactive");
                    }).ConfigureAwait(false);
                });
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                return;
            }
            else
            {
                context.Reply(context.Request.AsMessageActivity().Text);
            }
        }
 private Task BotReceiveHandler(IBotContext context)
 {
     if (context.Request.Type == ActivityTypes.Message)
     {
         context.Reply("hello");
     }
     return(Task.CompletedTask);
 }
        protected override Task ReceiveMessage(IBotContext context, IMessageActivity activity)
        {
            long turnNumber = context.State.ConversationProperties["turnNumber"] ?? 0;

            context.State.ConversationProperties["turnNumber"] = ++turnNumber;
            context.Reply($"[{turnNumber}] echo: {activity.Text}");
            return(Task.CompletedTask);
        }
Esempio n. 19
0
        public static IBotContext Delay(this IBotContext context, int duration)
        {
            Activity activity = ((Activity)context.Request).CreateReply();

            activity.Type  = ActivityTypesEx.Delay;
            activity.Value = duration;
            return(context.Reply(activity));
        }
Esempio n. 20
0
        protected override Task OnReceiveActivity(IBotContext context)
        {
            if (context.Request.Type == ActivityTypes.Message)
            {
                context.Reply($@"You said {context.Request.AsMessageActivity().Text}");
            }

            return(Task.CompletedTask);
        }
        public async Task MyBotLogic(IBotContext context)
        {
            switch (context.Request.AsMessageActivity().Text)
            {
            case "count":
                context.Reply("one");
                context.Reply("two");
                context.Reply("three");
                break;

            case "ignore":
                break;

            default:
                context.Reply($"echo:{context.Request.AsMessageActivity().Text}");
                break;
            }
        }
Esempio n. 22
0
 private Task BotReceiveHandler(IBotContext context, MiddlewareSet.NextDelegate next)
 {
     if (context.Request.Type == ActivityTypes.Message && context.Responses.Count == 0)
     {
         // add app logic when QnA Maker doesn't find an answer
         context.Reply("No good match found in the KB.");
     }
     return(Task.CompletedTask);
 }
Esempio n. 23
0
        private void ShowHelp(IBotContext context)
        {
            var message = "Here's what I can do:\n\n";

            message += "To see your work items, you could say 'Show workitems'.\n\n";
            message += "To add a work item, you could say 'Add workitem'.\n\n";
            message += "To see this again, you could say 'Help'.";

            context.Reply(message);
        }
Esempio n. 24
0
        private void ShowHelp(IBotContext context)
        {
            var message = "Here's what I can do:\n\n";

            message += "To see your alarms, say 'Show Alarms'.\n\n";
            message += "To add an alarm, say 'Add Alarm'.\n\n";
            message += "To delete an alarm, say 'Delete Alarm'.\n\n";
            message += "To see this again, say 'Help'.";

            context.Reply(message);
        }
 protected override Task ReceiveConversationUpdate(IBotContext context, IConversationUpdateActivity activity)
 {
     foreach (var newMember in activity.MembersAdded)
     {
         if (newMember.Id != activity.Recipient.Id)
         {
             context.Reply("Hello and welcome to the echo bot.");
         }
     }
     return(Task.CompletedTask);
 }
Esempio n. 26
0
        public static void ShowAlarms(IBotContext context, List <Alarm> alarms)
        {
            if ((alarms == null) || (alarms.Count == 0))
            {
                context.Reply("You have no alarms.");
                return;
            }

            if (alarms.Count == 1)
            {
                context.Reply($"You have one alarm named '{ alarms[0].Title }', set for '{ alarms[0].Time }'.");
                return;
            }

            string message = $"You have { alarms.Count } alarms: \n\n";

            foreach (var alarm in alarms)
            {
                message += $"'{ alarm.Title }' set for '{ alarm.Time }' \n\n";
            }

            context.Reply(message);
        }
Esempio n. 27
0
        public async Task ReceiveActivity(IBotContext context, MiddlewareSet.NextDelegate next)
        {
            if (context.Request.Type == ActivityTypes.Message)
            {
                var results = await this.GetAnswers(context.Request.AsMessageActivity().Text.Trim()).ConfigureAwait(false);

                if (results.Any())
                {
                    context.Reply(results.First().Answer);
                }
            }

            await next().ConfigureAwait(false);
        }
Esempio n. 28
0
        public override Task OnReceiveActivity(IBotContext context)
        {
            if (HasActiveTopic)
            {
                ActiveTopic.OnReceiveActivity(context);
                return(Task.CompletedTask);
            }

            // If there are no alarms to delete...
            if (this.State.Alarms.Count == 0)
            {
                context.Reply("There are no alarms to delete.");
                return(Task.CompletedTask);
            }

            if (this.State.AlarmIndex == null)
            {
                // If there is only one alarm to delete, use that index. No need to prompt.
                if (this.State.Alarms.Count == 1)
                {
                    AlarmsView.ShowAlarms(context, this.State.Alarms);

                    this.State.AlarmIndex = 0;
                }
                else
                {
                    this.SetActiveTopic(WHICH_ALARM_PROMPT);
                    this.ActiveTopic.OnReceiveActivity(context);
                    return(Task.CompletedTask);
                }
            }

            this.State.Alarm.Title = this.State.Alarms[(int)this.State.AlarmIndex].Title;

            if (this.State.DeleteConfirmed == null)
            {
                this.SetActiveTopic(CONFIRM_DELETE_PROMPT);
                this.ActiveTopic.OnReceiveActivity(context);
                return(Task.CompletedTask);
            }

            this.OnSuccess(context, new DeleteAlarmTopicValue
            {
                Alarm           = this.State.Alarm,
                AlarmIndex      = (int)this.State.AlarmIndex,
                DeleteConfirmed = (bool)this.State.DeleteConfirmed
            });
            return(Task.CompletedTask);
        }
Esempio n. 29
0
        private void ShowDefaultMessage(IBotContext context)
        {
            if (context.State.ConversationProperties["flagInit"] == null)
            {
                // Prompt user for name
                context.Reply("Hi. What's your name?");
                // Set flag to some non-null value
                context.State.ConversationProperties["flagInit"] = true;
            }
            else
            {
                if (context.State.UserProperties["owner"] == null)
                {
                    // Save user's name in context.State.UserProperties["name"]
                    var name = context.Request.AsMessageActivity().Text;
                    context.State.UserProperties["owner"] = name;
                    // Greet user
                    context.Reply($"Nice to meet you, {name}.");
                }

                //context.Reply("Choose an action: 'Add workitem', 'Show workitems', 'Help'.");
                context.Reply("How can I help you? Type 'help' to show actions available.");
            }
        }
        public Task AddWorkItem(IBotContext context)
        {
            //switch
            var message = context.Request.AsMessageActivity();

            if (context.State.ConversationProperties["currentState"] == null)
            {
                context.Reply("Enter customerid:");
                context.State.ConversationProperties["currentState"] = "customerId";

                return(Task.CompletedTask);
            }

            switch (context.State.ConversationProperties["currentState"])
            {
            case "customerId":
                context.State.ConversationProperties["customerId"] = message.Text;
                context.Reply("Enter description:");
                context.State.ConversationProperties["currentState"] = "description";
                break;

            case "description":
                context.State.ConversationProperties["description"] = message.Text;
                context.Reply("Enter work hours:");

                context.State.ConversationProperties["currentState"] = "hours";
                break;

            case "hours":
                context.State.ConversationProperties["hours"] = message.Text;

                // Recognize number
                NumberModel numberModel = (NumberModel)NumberRecognizer.Instance.GetNumberModel(Culture.English);
                var         result      = numberModel.Parse(context.Request.AsMessageActivity().Text);

                if (result.Count > 0 && long.TryParse(result[0].Resolution.Values.FirstOrDefault().ToString(), out long n))
                {
                    context.Reply($"You entered: {n}");
                    context.Reply("Enter attachment:");
                    context.State.ConversationProperties["currentState"] = "attachment";
                }
                else
                {
                    context.Reply("Invalid number. Enter an integer.");
                }
                break;

            default:
                // Once you completed your steps
                context.State.ConversationProperties["currentIntent"] = null;
                break;
            }

            return(Task.CompletedTask);
        }