protected override async Task <DialogTurnResult> AfterTokenRecdAsync(WaterfallStepContext step, CancellationToken cancellationToken) { try { var bot = step.Context.TurnState.Get <ActivityBotBase>("bot"); var conversationStateProp = bot.ConversationState.CreateProperty <int>("counter"); var counter = await conversationStateProp.GetAsync(step.Context, () => 0, cancellationToken); if (counter == 0) { var attachments = new List <Attachment>(); // Reply to the activity we received with an activity. var reply = MessageFactory.Attachment(attachments); reply.Attachments.Add(DialogHelpers.CreateBotFunctionsCard("This is what I can do for you", bot).ToAttachment()); await step.Context.SendActivityAsync(reply, cancellationToken); } counter++; await conversationStateProp.SetAsync(step.Context, counter); } catch (Exception ex) { await step.Context.SendActivityAsync(MessageFactory.Text("Error occured."), cancellationToken); Trace.WriteLine(ex.Message + "\r\n" + ex.StackTrace); } return(Dialog.EndOfTurn); }