2017-12-22 12 views
1

루이스 인 텐트 (Luis Intent) 방법이 호출 될 때마다 항상 사용자 정의 방법을 호출 할 수있는 방법을 알고 있는지 알고 싶습니다. 기본적으로 나는 Bot가 LuisDialog에서 데이터를받을 때 사용자에게 로더 메시지를 추가하려고합니다.LUIS 대화 상자의 모든 의도에 맞는 일반적인 방법이 있습니까?

+0

언어를? 마디? 기음#? –

+0

답장을 보내 주셔서 감사합니다. 나는 C#을 사용하고있다. @EzequielJadib – Sandip

+0

그렇다면 각자의 LUIS Intent 메서드에서 메서드 호출을 할 수 없게되는 이유는 무엇입니까? –

답변

2

메시지를 LuisDialog로 전달하는 RootDialog가있는 경우 RootDialog 또는 LuisDialog의 StartAsync 메서드에 "로더 메시지"를 표시 할 수 있습니다. 또 다른 옵션은 LuisDialog의 MessageReceived를 무시하고 base.MessageReceived를 호출하기 전에 로더 메시지를 보내는 것입니다.

[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; 
     await context.PostAsync("RootDialog.MessageReceivedAsync"); 
     await context.Forward(new LuisTestDialog(), AfterLuisDialog, activity);    
    } 

    private async Task AfterLuisDialog(IDialogContext context, IAwaitable<object> result) 
    { 
     await context.PostAsync("RootDialog.AfterLuisDialog");    
    } 
} 

[LuisModel("xxx", "xxx")] 
[Serializable] 
public class LuisTestDialog : LuisDialog<object> 
{ 
    public async override Task StartAsync(IDialogContext context) 
    { 
     await context.PostAsync("LuisTestDialog.StartAsync"); 
     await base.StartAsync(context); 
    } 

    [LuisIntent("")] 
    [LuisIntent("None")] 
    public async Task None(IDialogContext context, LuisResult result) 
    { 
     await context.PostAsync("LuisTestDialog.None"); 
     context.Done(true); 
    } 

    protected async override Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item) 
    { 
     await context.PostAsync("LuisTestDialog.MessageReceived"); 
     await base.MessageReceived(context, item); 
    } 
} 

위의 다음과 같은 메시지가 발생합니다 :

enter image description here

+0

MessageRecieved Override에서 일반적인 방법을 추가하여 답변 해 주셔서 감사합니다. – Sandip

0

두 가지 아이디어가 있습니다.

  1. Messagescontroller에서 "loader message"를 전송하십시오.
  2. MessagesController에서 호출되는 루트 대화 상자가 있습니다. LUIS 대화 상자에 context.forward()를 수행하기 전에 로더 메시지를 보낼 수 있습니다.

이 정보가 도움이되기를 바랍니다.