루이스 인 텐트 (Luis Intent) 방법이 호출 될 때마다 항상 사용자 정의 방법을 호출 할 수있는 방법을 알고 있는지 알고 싶습니다. 기본적으로 나는 Bot가 LuisDialog에서 데이터를받을 때 사용자에게 로더 메시지를 추가하려고합니다.LUIS 대화 상자의 모든 의도에 맞는 일반적인 방법이 있습니까?
1
A
답변
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);
}
}
위의 다음과 같은 메시지가 발생합니다 :
+0
MessageRecieved Override에서 일반적인 방법을 추가하여 답변 해 주셔서 감사합니다. – Sandip
0
두 가지 아이디어가 있습니다.
- Messagescontroller에서 "loader message"를 전송하십시오.
- MessagesController에서 호출되는 루트 대화 상자가 있습니다. LUIS 대화 상자에 context.forward()를 수행하기 전에 로더 메시지를 보낼 수 있습니다.
이 정보가 도움이되기를 바랍니다.
언어를? 마디? 기음#? –
답장을 보내 주셔서 감사합니다. 나는 C#을 사용하고있다. @EzequielJadib – Sandip
그렇다면 각자의 LUIS Intent 메서드에서 메서드 호출을 할 수 없게되는 이유는 무엇입니까? –