簡體   English   中英

我努力向LuisResult隱瞞IAwait(Microsoft Bot框架上的LUIS)

[英]I struggle to covert an IAwaitable to LuisResult (LUIS on Microsoft Bot framework)

我正在使用帶有ResumeAfter的類Microsoft.Bot.Builder.Dialog.Promptoptions,該類是受委托的並且是必需的(IDialogContext上下文,IAwaitable結果)

但是,我要調用的委托不是私有異步任務測試(IDialogContext上下文,IAwaitable結果)

而是具有以下內容的LUIS委托

[LuisIntent(“ Test”) 私有異步任務測試(IDialogContext上下文,LuisResult結果)

非常感謝聽到一些關於如何調用LUIS屬性方法的想法

    private async Task ProductChoice(IDialogContext context, IAwaitable<string> result)
    {

        PromptDialog.Choice<string>(
        context,
        ProductOverview,
        this.productOptions,
        "Which plaform are you interested in?",
        "Ooops, what you wrote is not a valid option, please try again",
        3,
        PromptStyle.PerLine);
        await context.PostAsync(context.MakeMessage());
    }        

    [LuisIntent ("Products")]
    public async Task ProductOverview(IDialogContext context, LuisResult result)
    {
        string product = "";
        EntityRecommendation rec;
        Activity activity = (Activity)context.MakeMessage();
        Attachment attachment;

        if (result.TryFindEntity("ProductName", out rec))
        {
            //Here you could include other rich cards
            attachment = CreateNewHeroCard(product = rec.Entity);
            activity.Attachments.Add(attachment);
            await context.PostAsync(activity);
        }
        else
        {
            await context.PostAsync("Sorry, their is no product by that name");
        }
    }

首先,您無法做的事情。

然后是其他幾件事:

  • 調用Prompt之后,您不應發送PostAsync
  • 如果要重用LUIS Intent方法上的某些邏輯,則需要將該邏輯提取到一個公共方法中,提示的LUIS和ResumeAfter方法都可以調用該方法。 當然,該通用方法不應與LuisResult相關,因為在ResumeAfter方法中將不可用。 當ResumeAfter方法將被調用時; LUIS不會被調用。
  • 如果要執行此操作,請在提示后調用LUIS ,這時將需要編寫更多代碼,但這是可行的
  • 如果你只是想打電話給你ProductOverview從ResumeAfter方法方法,你可以做它作為一個標准的方法,但是,(再次),必須記住,你不會有LuisResult那里,所以你將不得不送空值,並在ProductOverview方法中進行相應處理。

就像是:

private async Task ProductChoice(IDialogContext context, IAwaitable<string> result)
    {

        PromptDialog.Choice<string>(
        context,
        AfterPromptChoiceMethod,
        this.productOptions,
        "Which plaform are you interested in?",
        "Ooops, what you wrote is not a valid option, please try again",
        3,
        PromptStyle.PerLine);
        await context.PostAsync(context.MakeMessage());
    }        

   private async Task AfterPromptChoiceMethod(IDialogContext context, IAwaitable<string> result)
    {
       await ProductOverview(context, null);
    }

暫無
暫無

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

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