The PromptValidator in the Bot Framework is a powerful mechanism for collecting form information. However, one slight snag with it is that it only allows a limited control of the flow, i.e. you can say true/false and you can alter the (re)prompt. In certain situations you may want the validator to restart your dialog. That’s relatively easy, you just call
dialogContext.ReplaceDialogAsync(this.Id). The problem is that whilst the framework will honor the replace request it will also continue with the retry prompt, almost certainly not what you want. To workaround this problem you provide a non-textual prompt and everything appears good to the user. E.g.
promptContext.Options.Prompt = new Activity(type: ActivityTypes.Typing);