2016-10-21 7 views
3

Я хотел бы использовать сетевой интерфейс в качестве моего корневого диалога для переключения разговора по пользовательскому сообщению, например, я могу вызвать HelpDialog, если пользователь напишет «help», а другие входы управляются LuisDialog.Как использовать свободный диалог LuisDialog в цепочке?

Моя проблема заключается в том, что LuisDialog ожидает сообщения от пользователя, поэтому в сетевой среде пользователь должен написать дважды ввод, прежде чем Луис вернет одно из своих намерений.

Это мой пример кода:

public static readonly IDialog<string> dialog = Chain 
     .PostToChain() 
     .Switch(
      new Case<IMessageActivity, IDialog<string>>(msg => 
       { 
        var regex = new Regex("^help$", RegexOptions.IgnoreCase); 
        return regex.IsMatch(msg.Text); 
       }, 
       (ctx, msg) => 
       { 
        return new HelpDialog(); 
       }), 

      new DefaultCase<IMessageActivity, IDialog<string>>(
       (ctx, msg) => { 
        return new MyLuisDialog(); 
       }) 
     )   
     .Unwrap().PostToUser(); 

Можно ли использовать LuisDialog с цепочкой или как я могу использовать несколько Диалоги вместе?

Благодаря Marco

+0

Одним из лучших решений для связывания диалога может быть использование context.forward и context.call внутри диалогового окна, когда вам нужно. – OmG

ответ

0

Для использования, context.Forward и context.Call требует, чтобы создать новый класс, реализующий IDialog.

Если вам не нравится это делать, попробуйте использовать приведенный ниже код в вашей реализации LuisDialog. Оно работает!

public override async Task StartAsync(IDialogContext context) 
    { 
     await this.MessageReceived(context, Awaitable.FromItem(context.Activity.AsMessageActivity())); 
    } 
+0

Когда я это сделаю и завершу переадресованный диалог с context.done, он возвращается к моему методу завершения, для которого я тогда также вызываю context.Done. Однако затем он снова начинает возвращаться назад, снова возвращаясь в LuisDialog, который использовался, чтобы отбросить его. Решения? –