Example #1
0
        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            var message = await result;

            if (message != null)
            {
                if (message.Value != null)
                {
                    string  responseMsg = Resources.ChatBot.WhatElseHelp;
                    dynamic value       = message.Value;
                    string  submitType  = value.Type.ToString();
                    if (submitType.Equals("ContactUs", StringComparison.CurrentCultureIgnoreCase))
                    {
                        try
                        {
                            var model = ContactUsModel.Parse(value);
                            if (model != null)
                            {
                                // Trigger validation using Data Annotations attributes from the ContactUs model
                                List <ValidationResult> results = new List <ValidationResult>();
                                bool valid = Validator.TryValidateObject(model, new ValidationContext(model, null, null), results, true);
                                if (!valid)
                                {
                                    // Some field in the ContactUs details are not valid
                                    var errors = string.Join("\n", results.Select(o => " - " + o.ErrorMessage));
                                    await context.PostAsync($"{Resources.ChatBot.ContactUsValidationTitle}:\n" + errors);

                                    return;
                                }

                                responseMsg = string.Format(Resources.ChatBot.ContactUsWithDetailsMsg, model.Name, model.EmailAddress);
                            }
                        }
                        catch (Exception)
                        {
                            await context.PostAsync(Resources.ChatBot.ContactUsValidationTitle);

                            return;
                        }
                    }

                    await context.PostAsync(responseMsg);

                    context.Done(true);
                }
                else
                {
                    context.Done(false);
                }
            }
        }