簡體   English   中英

Bot Framework轉發類型參數錯誤

[英]Bot Framework Forward Type Arguments Error

嘗試使用MS Bot Framework Example調用其他對話框時,出現以下錯誤 這是我的代碼:

 using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Bot.Builder.Dialogs; using Microsoft.Bot.Connector; namespace ReadMeBot.Dialogs { [Serializable] public class RootDialog : IDialog<object> { public Task StartAsync(IDialogContext context) { context.Wait(MessageReceivedAsync); return Task.CompletedTask; } private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result) { var activity = await result as Activity; if (activity != null && activity.Text.ToLower().Contains("what is")) { await context.Forward(new InternetSearchDialog(), this.ResumeAfterInternetSearchDialog, activity, CancellationToken.None); } // calculate something for us to return int length = (activity.Text ?? string.Empty).Length; // return our reply to the user await context.PostAsync($"You sent {activity.Text} which was {length} characters. Thank you!"); context.Wait(MessageReceivedAsync); } private async Task ResumeAfterInternetSearchDialog(IDialogContext context, IAwaitable<string> result) { } } } 

我該如何解決? 我四處搜尋,似乎沒有人遇到這個問題。 我究竟做錯了什么?

由於您要轉發到另一個對話框,因此無需在此對話框中等待。 您將要調用context.Wait在簡歷中。

如果將代碼更改為以下內容,則事情應該會按預期進行:

[Serializable]
public class RootDialog : IDialog<object>
{
    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;

        if (activity != null && activity.Text.ToLower().Contains("what is"))
        {
            await
                context.Forward(new InternetSearchDialog(), this.ResumeAfterInternetSearchDialog, activity, CancellationToken.None);
        }
        else
        {
            // calculate something for us to return
            int length = (activity.Text ?? string.Empty).Length;

            // return our reply to the user
            await context.PostAsync($"You sent {activity.Text} which was {length} characters. Thank you!");
            context.Wait(MessageReceivedAsync);
        }       
    }

    private async Task ResumeAfterInternetSearchDialog(IDialogContext context, IAwaitable<string> result)
    {
        context.Wait(MessageReceivedAsync);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM