2017-12-22 3 views
1

Luis Intentメソッドが呼び出されるたびにいつでもカスタムメソッドを呼び出す方法を知っている人がいるかどうかを知りたいと思います。基本的には、BotがLuisDialogからデータを取得しているときに、ユーザーにローダーメッセージを追加しようとしています。LUISダイアログのすべてのインテントにヒットする一般的な方法はありますか?

+0

言語?ノード? C#? –

+0

ご返信ありがとうございます。私はC#を使用しています。 @EzequielJadib – Sandip

+0

それでは、それぞれのLUISインテントメソッドのメソッド呼び出しを妨げる原因は何ですか? –

答えて

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

私には2つのアイデアがあります。

  1. Messagescontrollerから「ローダーメッセージ」を送信します。
  2. MessagesControllerから呼び出されるルートダイアログがあります。あなたのLUISダイアログにcontext.forward()を実行する前にローダーメッセージを送信できます。

私はこれが役に立ちそうです。

関連する問題