protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { Logger.LogInformation("Processing a Message Activity."); if (turnContext.Activity.Text?.Equals(EscalateOption, StringComparison.InvariantCultureIgnoreCase) == true) { await FacebookThreadControlHelper.RequestThreadControlToBot(turnContext, _configuration["SecondaryPageToken"], turnContext.Activity.From.Id, EscalateOption); } else if (turnContext.Activity.Text?.Equals(PrimaryBotOption, StringComparison.InvariantCultureIgnoreCase) == true) { await FacebookThreadControlHelper.PassThreadControlToPrimaryBot(turnContext, _configuration["PrimaryPageToken"], turnContext.Activity.From.Id, PrimaryBotOption); } else { // Show choices if the Facebook Payload from ChannelData is not handled if (!await ProcessFacebookPayload(turnContext, turnContext.Activity.ChannelData, cancellationToken)) { await ShowChoices(turnContext, cancellationToken); } } }
protected virtual async Task OnFacebookQuickReply(ITurnContext turnContext, FacebookQuickReply quickReply, CancellationToken cancellationToken) { Logger.LogInformation("QuickReply message received."); // TODO: Your quick reply event handling logic here... // Process the message by checking the Activity.Text. The FacebookQuickReply could also contain a json payload. // Initially the bot offers to showcase 3 Facebook features: Quick replies, PostBack and getting the Facebook Page Name. switch (turnContext.Activity.Text) { // Here we showcase how to obtain the Facebook page id. // This can be useful for the Facebook multi-page support provided by the Bot Framework. // The Facebook page id from which the message comes from is in turnContext.Activity.Recipient.Id. case FacebookPageIdOption: { var reply = turnContext.Activity.CreateReply($"This message comes from the following Facebook Page: {turnContext.Activity.Recipient.Id} for the following Bot: {turnContext.Activity.Recipient.Name}"); await turnContext.SendActivityAsync(reply, cancellationToken); await ShowChoices(turnContext, cancellationToken); break; } // Here we send a HeroCard with 2 options that will trigger a Facebook PostBack. case PostBackOption: { var card = new HeroCard { Text = "Is 42 the answer to the ultimate question of Life, the Universe, and Everything?", Buttons = new List <CardAction> { new CardAction() { Title = "Yes", Type = ActionTypes.PostBack, Value = "Yes" }, new CardAction() { Title = "No", Type = ActionTypes.PostBack, Value = "No" }, }, }; var reply = turnContext.Activity.CreateReply(); reply.Attachments = new List <Attachment> { card.ToAttachment() }; await turnContext.SendActivityAsync(reply, cancellationToken); break; } case EscalateOption: { await turnContext.SendActivityAsync("Requesting thread control for Secondary bot"); await FacebookThreadControlHelper.RequestThreadControlToBot(turnContext, _configuration["SecondaryPageToken"], turnContext.Activity.From.Id, EscalateOption); break; } case PrimaryBotOption: { await turnContext.SendActivityAsync("Passing thread control to Primary bot"); await FacebookThreadControlHelper.PassThreadControlToPrimaryBot(turnContext, _configuration["PrimaryPageToken"], turnContext.Activity.From.Id, PrimaryBotOption); break; } // By default we offer the users different actions that the bot supports, through quick replies. case QuickRepliesOption: default: { await ShowChoices(turnContext, cancellationToken); break; } } }