title: Bot Framework - Wait for User To Click Hero Card Action In Waterfall Dialog
body: <p>I've been trying to figure out how to "pause" a waterfall on a step showing a carousel and wait for user input.</p>
  
  <p>I've got a working implementation but I'm totally convinced there is a better / tidier way to do this.</p>
  
  <p>Inside a waterfall step I have this code:</p>
  
  <pre><code>if (search.Result != null &amp;&amp; search.Result.Properties.Any())
  {
      var carousel = CarouselBuilder.BuildCarousel(search.Result);
      await stepContext.Context.SendActivityAsync(carousel);
      //return await stepContext.ContinueDialogAsync(cancellationToken);
      return await stepContext.PromptAsync("propertySelected", new PromptOptions
      {
  
      }, cancellationToken);
  }
  </code></pre>
  
  <p>my <code>propertySelected</code> dialog is this:</p>
  
  <pre><code>public class EventActivityPrompt : ActivityPrompt
  {
      public EventActivityPrompt(string dialogId, PromptValidator&lt;Activity&gt; validator)
          : base(dialogId, validator)
      {
      }
  }
  </code></pre>
  
  <p>Which requires a validator like this:</p>
  
  <pre><code>public static class ActivityPromptValidator
  {
      public static async Task&lt;bool&gt; ActivityValidator(
          PromptValidatorContext&lt;Activity&gt; promptContext,
          CancellationToken cancellationToken)
      {
          return true;
      }
  }
  </code></pre>
  
  <p>This passes values to the next step ok</p>
  
  <pre><code>AddStep(async (stepContext, cancellationToken) =&gt;
  {
      botState.InterestedPropertyIdentifier = stepContext.Result.ToString();
  
      return await stepContext.BeginDialogAsync(MyNextDialog.Id, cancellationToken);
  });
  </code></pre>
  
  <p>All these empty blocks and a validator that just returns true suggests this isn't the best method of getting this working but I've not enough experience with the Bot Framework to improve on this at the moment.  There also doesn't appear to be any documentation that I can find that discusses this.</p>
  
  <p>How can I best handle waiting for user input?</p>
  
  <p>I think there used to be a <code>.Wait()</code> method in BF v3 which is all I can find on this topic but I've on v4.</p>