Пример #1
0
        protected virtual async Task OnFacebookThreadControlRequest(ITurnContext turnContext, FacebookPayload facebookPayload, CancellationToken cancellationToken)
        {
            _logger.LogInformation("PrimaryBot - Thread Control Request message received.");

            string requestedOwnerAppId = facebookPayload.RequestThreadControl.RequestedOwnerAppId;

            if (facebookPayload.RequestThreadControl.Metadata == "please")
            {
                await turnContext.SendActivityAsync($"Primary Bot: {requestedOwnerAppId} requested thread control nicely. Passing thread control...");

                var success = await FacebookThreadControlHelper.PassThreadControlAsync(
                    _configuration["FacebookPageToken"],
                    requestedOwnerAppId,
                    facebookPayload.Sender.Id,
                    "allowing thread control");

                if (!success)
                {
                    // Account for situations when the primary receiver doesn't have thread control
                    await turnContext.SendActivityAsync("Primary Bot: Thread control could not be passed.");
                }
            }
            else
            {
                await turnContext.SendActivityAsync($"Primary Bot: {requestedOwnerAppId} requested thread control but did not ask nicely."
                                                    + " Thread control will not be passed."
                                                    + " Send any message to continue.");
            }
        }
Пример #2
0
        protected virtual async Task OnFacebookStandby(ITurnContext turnContext, FacebookStandby facebookStandby, CancellationToken cancellationToken)
        {
            _logger.LogInformation("PrimaryBot - Standby message received.");

            var text = facebookStandby?.Message?.Text;

            if (text?.Equals(OPTION_TAKE_THREAD_CONTROL, StringComparison.InvariantCultureIgnoreCase) == true)
            {
                await FacebookThreadControlHelper.TakeThreadControlAsync(_configuration["FacebookPageToken"], facebookStandby.Sender.Id, text);
            }
        }
        protected virtual async Task OnFacebookStandby(ITurnContext turnContext, FacebookStandby facebookStandby, CancellationToken cancellationToken)
        {
            _logger.LogInformation("SecondaryBot - Standby message received.");

            var text = facebookStandby?.Message?.Text;

            if (text?.Equals(OPTION_REQUEST_THREAD_CONTROL, StringComparison.InvariantCultureIgnoreCase) == true)
            {
                await FacebookThreadControlHelper.RequestThreadControlAsync(_configuration["FacebookPageToken"], facebookStandby.Sender.Id, "give me control");
            }
            else if (text?.Equals(OPTION_REQUEST_THREAD_CONTROL_NICELY, StringComparison.InvariantCultureIgnoreCase) == true)
            {
                await FacebookThreadControlHelper.RequestThreadControlAsync(_configuration["FacebookPageToken"], facebookStandby.Sender.Id, "please");
            }
        }
        protected virtual async Task OnFacebookThreadControlRequest(ITurnContext turnContext, FacebookPayload facebookPayload, CancellationToken cancellationToken)
        {
            Logger.LogInformation("Thread Control Request message received.");

            // TODO: Your Thread Control Request event handling logic here...

            if (facebookPayload.RequestThreadControl.RequestOwnerAppId == _configuration["SecondaryFacebookAppId"])
            {
                await FacebookThreadControlHelper.PassThreadControlToBot(turnContext, _configuration["PrimaryPageToken"], facebookPayload.RequestThreadControl.RequestOwnerAppId, facebookPayload.Sender.Id, "allowing thread control");
            }
            else
            {
                Logger.LogInformation($"Thread Control Request denied.  Only allowed for {_configuration["SecondaryFacebookAppId"]}");
            }
        }
Пример #5
0
        protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var text = turnContext.Activity.Text;

            switch (text)
            {
            case OPTION_PASS_PAGE_INBOX:
                await turnContext.SendActivityAsync("Primary Bot: Passing thread control to the page inbox...");

                await FacebookThreadControlHelper.PassThreadControlAsync(_configuration["FacebookPageToken"], PAGE_INBOX_ID, turnContext.Activity.From.Id, text);

                break;

            case OPTION_PASS_SECONDARY_BOT:

                var secondaryReceivers = await FacebookThreadControlHelper.GetSecondaryReceiversAsync(_configuration["FacebookPageToken"]);

                foreach (var receiver in secondaryReceivers)
                {
                    if (receiver != PAGE_INBOX_ID)
                    {
                        await turnContext.SendActivityAsync($"Primary Bot: Passing thread control to {receiver}...");

                        await FacebookThreadControlHelper.PassThreadControlAsync(_configuration["FacebookPageToken"], receiver, turnContext.Activity.From.Id, text);

                        break;
                    }
                }

                break;

            case OPTION_REQUEST_THREAD_CONTROL:
            case OPTION_REQUEST_THREAD_CONTROL_NICELY:
                // Do nothing because the secondary receiver should react to these instead
                break;

            default:
                await ShowChoices(turnContext, cancellationToken);

                break;
            }
        }
        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 override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            var text = turnContext.Activity.Text;

            switch (text)
            {
            case OPTION_PASS_PRIMARY_BOT:
                await turnContext.SendActivityAsync("Secondary Bot: Passing thread control to the primary receiver...");

                // A null target app ID will automatically pass control to the primary receiver
                await FacebookThreadControlHelper.PassThreadControlAsync(_configuration["FacebookPageToken"], null, turnContext.Activity.From.Id, text);

                break;

            case OPTION_TAKE_THREAD_CONTROL:
                // Do nothing because the primary receiver should react to this instead
                break;

            default:
                await ShowChoices(turnContext, cancellationToken);

                break;
            }
        }
        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;
            }
            }
        }