Кроме того, метод StartAsync является частью базового класса LuisDialog. Вы должны добавить ключевое слово override на него.

ель - внедрить оба диалога и LUIS в приложение Microsoft Bot Framework, используя их C # SDK.Я пытался следовать этой теме https://github.com/Microsoft/BotBuilder/issues/127 и связанные с ними посты (на которые есть ссылки в конце), но я не смог заставить мой код работать на практике. Это мой класс RootDialog. Обратите внимание, что я создал метод, который обрабатывает намерение «GetProduct», когда он получает это намерение, он должен перенаправить LuisResult в ProductsDialog, используя метод context.Forward (), но вместо этого я вижу только то, что он идет прямо в метод ResumeAfter. , ProductsDialogCompleted. Теперь, возможно, здесь я потерпел неудачу, но я не смог найти пример, показывающий несколько диалогов LUIS.

public class RootDialog : LuisDialog<object>
{
    [LuisIntent("GetProduct")]
    private async Task GetProduct(IDialogContext context, LuisResult result)
    {
        await context.PostAsync("Calling ProductsDialog...");
        await context.Forward(Chain.From(() => new ProductsDialog()), ProductsDialogCompleted, context.Activity, CancellationToken.None);
    }

    private async Task ProductsDialogCompleted(IDialogContext context, IAwaitable<object> result)
    {
        var res = await result;
        context.PostAsync("ProductsDialogCompleted" + result);
        context.Wait(this.MessageReceived);
    }
}
public class ProductsDialog : LuisDialog<object>
{
    public async Task StartAsync(IDialogContext context)
    {
        await context.PostAsync("Entered ProductsDialog");

        context.Wait(this.MessageReceived);
    }
    [LuisIntent("None")]
    private async Task None(IDialogContext context, LuisResult result)
    {
        context.Done(true);
    }
}

Ожидаемое поведение следующее

Пользователь вызывает намерение GetProductБот создает новый диалог и переходит к методу StartAsync, где он ожидает другого ввода пользователяПользователь запускает Нет намеренияДиалог закрывается, возвращает истину и запускает ProductsDialogCompleted.

Кажется, я не правильно связываю диалоги. Как я могу решить это?

РЕДАКТИРОВАТЬ: Добавлен MessageController, версия 3.8.1

[BotAuthentication]
public class MessagesController : ApiController
{
    /// <summary>
    /// POST: api/Messages
    /// Receive a message from a user and reply to it
    /// </summary>
    public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
    {
        if (activity.Type == ActivityTypes.Message)
        {
            await Conversation.SendAsync(activity, () => new RootDialog());
        }
        else
        {
            HandleSystemMessage(activity);
        }
        var response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

    private Activity HandleSystemMessage(Activity message)
    {
        if (message.Type == ActivityTypes.DeleteUserData)
        {
            // Implement user deletion here
            // If we handle user deletion, return a real message
        }
        else if (message.Type == ActivityTypes.ConversationUpdate)
        {
            // Handle conversation state changes, like members being added and removed
            // Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
            // Not available in all channels
        }
        else if (message.Type == ActivityTypes.ContactRelationUpdate)
        {
            // Handle add/remove from contact lists
            // Activity.From + Activity.Action represent what happened
        }
        else if (message.Type == ActivityTypes.Typing)
        {
            // Handle knowing tha the user is typing
        }
        else if (message.Type == ActivityTypes.Ping)
        {
        }

        return null;
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос