public async Task StartAsync(IDialogContext context)
        {
            var clusters = new List <ClusterDto>()
            {
                new ClusterDto()
                {
                    Description = "prodotto 1",
                    Id          = 1
                },
                new ClusterDto()
                {
                    Description = "prodotto 2",
                    Id          = 2
                },
                new ClusterDto()
                {
                    Description = "prodotto 3",
                    Id          = 3
                },
                new ClusterDto()
                {
                    Description = "prodotto 4",
                    Id          = 4
                }
            };

            var sender = new SendCorrectCategoriesListCard(context);
            await sender.Send(clusters);

            new HandleUserIncorrectInput(context).ResetCounter();

            context.Wait(GetTask);
        }
        public async Task GetTask(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            try
            {
                var userResponse = await result;

                var categorySelected = JsonConvert.DeserializeObject <OptionSelectionPayload>(userResponse.Text, new JsonSerializerSettings {
                    Error = delegate(object sender, ErrorEventArgs args) { args.ErrorContext.Handled = true; }
                });

                if (categorySelected != null)
                {
                    switch (categorySelected.Action)
                    {
                    case "add":
                    {
                        var products = new List <ProductDto>()
                        {
                            new ProductDto()
                            {
                                CategoryId  = 3034,
                                Description = "prodotto 1",
                                Id          = 1,
                                SKU         = "1"
                            },
                            new ProductDto()
                            {
                                CategoryId  = 3034,
                                Description = "prodotto 2",
                                Id          = 2,
                                SKU         = "2"
                            },
                            new ProductDto()
                            {
                                CategoryId  = 3034,
                                Description = "prodotto 3",
                                Id          = 3,
                                SKU         = "3"
                            },
                            new ProductDto()
                            {
                                CategoryId  = 3034,
                                Description = "prodotto 4",
                                Id          = 4,
                                SKU         = "4"
                            }
                        };

                        context.UserData.SetValue("CategoryPromoProducts", products);

                        if (products.Count == 0)
                        {
                            await context.PostAsync(MessagesResource.NoPromoProductForCategorySelected);

                            await context.PostAsync(MessagesResource.SelectAnotherCategory);

                            var clusters = new List <ClusterDto>()
                            {
                                new ClusterDto()
                                {
                                    Description = "prodotto 1",
                                    Id          = 1
                                },
                                new ClusterDto()
                                {
                                    Description = "prodotto 2",
                                    Id          = 2
                                },
                                new ClusterDto()
                                {
                                    Description = "prodotto 3",
                                    Id          = 3
                                },
                                new ClusterDto()
                                {
                                    Description = "prodotto 4",
                                    Id          = 4
                                }
                            };

                            var sender = new SendCorrectCategoriesListCard(context);
                            await sender.Send(clusters);

                            context.Wait(GetTask);
                        }
                        else
                        {
                            context.Call(_dialogFactory.Create <GetCategoryPromoProductByCardTask>(), Callback);
                        }
                        break;
                    }

                    case "cancel":
                    {
                        var sender = new SendCorrectGreetingCard(context);
                        await sender.Send();

                        context.Call(_dialogFactory.Create <GreetingDialog>(), Callback);
                    }
                    break;
                    }
                }
                else
                {
                    var handler = new HandleUserIncorrectInput(context);

                    if (handler.CheckCounterErrors())
                    {
                        await handler.UserErrorLimitExceeded();

                        context.Call(_dialogFactory.Create <GreetingDialog>(), Callback);
                    }
                    else
                    {
                        await context.PostAsync(MessagesResource.CourtesyCategoryError);

                        var clusters = new List <ClusterDto>()
                        {
                            new ClusterDto()
                            {
                                Description = "prodotto 1",
                                Id          = 1
                            },
                            new ClusterDto()
                            {
                                Description = "prodotto 2",
                                Id          = 2
                            },
                            new ClusterDto()
                            {
                                Description = "prodotto 3",
                                Id          = 3
                            },
                            new ClusterDto()
                            {
                                Description = "prodotto 4",
                                Id          = 4
                            }
                        };

                        var sender = new SendCorrectCategoriesListCard(context);
                        await sender.Send(clusters);

                        context.Wait(GetTask);
                    }
                }
            }
            catch (Exception ex)
            {
                await context.PostAsync(MessagesResource.CourtesyError);

                context.Call(_dialogFactory.Create <GreetingDialog>(), Callback);
            }
        }