示例#1
0
        public async Task <DialogTurnResult> FinishIntentSwitch(WaterfallStepContext sc, CancellationToken cancellationToken)
        {
            if (sc.Options != null && sc.Options is SkillSwitchConfirmOption skillSwitchConfirmOption)
            {
                // Do skill switching
                if (sc.Result is bool result && result)
                {
                    // 1) End remote skill dialog
                    await _skillTransport.CancelRemoteDialogsAsync(_skillManifest, _serviceClientCredentials, sc.Context);

                    // 2) Reset user input
                    sc.Context.Activity.Text  = skillSwitchConfirmOption.UserInputActivity.Text;
                    sc.Context.Activity.Speak = skillSwitchConfirmOption.UserInputActivity.Speak;

                    // 3) End dialog
                    return(await sc.EndDialogAsync(true));
                }

                // Cancel skill switching
                else
                {
                    var dialogResult = await ForwardToSkillAsync(sc, skillSwitchConfirmOption.FallbackHandledEvent);

                    return(await sc.EndDialogAsync(dialogResult));
                }
            }
示例#2
0
        public override async Task EndDialogAsync(ITurnContext turnContext, DialogInstance instance, DialogReason reason, CancellationToken cancellationToken)
        {
            if (reason == DialogReason.CancelCalled)
            {
                // when dialog is being ended/cancelled, send an activity to skill
                // to cancel all dialogs on the skill side
                if (_skillTransport != null)
                {
                    await _skillTransport.CancelRemoteDialogsAsync(turnContext);
                }
            }

            await base.EndDialogAsync(turnContext, instance, reason, cancellationToken);
        }