在 MessageController 之外并在身份验证之后调用 LUIS
Call LUIS outside of MessageController and after Authentication
在使用 ADAL (AuthBot) 进行身份验证的机器人上工作,然后 post-Auth 获取用户输入并发送到 LUIS 以收集 intents/entities。我使用 returned 构建一个 URI,然后发送到 Sharepoint Online REST API。如果用户输入有效,我解析的 Sharepoint returns JSON 和 return 给用户。
问题是在身份验证后让用户输入我的 LUIS class。我从 MessageController 调用 AuthBot ActionDialog。
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, () => new ActionDialog());
}
在 ActionDialog 中,我不确定如何将 Message 移动到 LUIS Class
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> item)
{
var message = await item;
if (message.Text == "logon")
{
if (string.IsNullOrEmpty(await context.GetAccessToken(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"])))
{
await context.Forward(new AzureAuthDialog(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"]), this.ResumeAfterAuth, message, CancellationToken.None);
}
else
{
context.Wait(MessageReceivedAsync);
}
}
else if (string.IsNullOrEmpty(await context.GetAccessToken(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"])))
{
await context.Forward(new AzureAuthDialog(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"]), this.ResumeAfterAuth, message, CancellationToken.None);
}
else
{
//this is where I want to send the next user input from bot to LUIS class.
}
}
LUIS Class 是标准的,如下所示:
//Define the LuisModel that will be used. The LuisModel JSON file can be found at ~/json/letseat.json
[LuisModel("ModelID", "ModelSecret")]
[Serializable]
public class LuisDialog : LuisDialog<object>
有什么想法吗?谢谢。
我假设您正在使用 AuthBot(通过查看代码)。
您需要补充的是:
await base.MessageReceived(context, item);
这只会将消息传递给 LUISDialog 的 MessageReceived 实现;它将向 LUIS 发出查询以了解应执行哪个意图。
在使用 ADAL (AuthBot) 进行身份验证的机器人上工作,然后 post-Auth 获取用户输入并发送到 LUIS 以收集 intents/entities。我使用 returned 构建一个 URI,然后发送到 Sharepoint Online REST API。如果用户输入有效,我解析的 Sharepoint returns JSON 和 return 给用户。
问题是在身份验证后让用户输入我的 LUIS class。我从 MessageController 调用 AuthBot ActionDialog。
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, () => new ActionDialog());
}
在 ActionDialog 中,我不确定如何将 Message 移动到 LUIS Class
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> item)
{
var message = await item;
if (message.Text == "logon")
{
if (string.IsNullOrEmpty(await context.GetAccessToken(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"])))
{
await context.Forward(new AzureAuthDialog(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"]), this.ResumeAfterAuth, message, CancellationToken.None);
}
else
{
context.Wait(MessageReceivedAsync);
}
}
else if (string.IsNullOrEmpty(await context.GetAccessToken(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"])))
{
await context.Forward(new AzureAuthDialog(ConfigurationManager.AppSettings["ActiveDirectory.ResourceId"]), this.ResumeAfterAuth, message, CancellationToken.None);
}
else
{
//this is where I want to send the next user input from bot to LUIS class.
}
}
LUIS Class 是标准的,如下所示:
//Define the LuisModel that will be used. The LuisModel JSON file can be found at ~/json/letseat.json
[LuisModel("ModelID", "ModelSecret")]
[Serializable]
public class LuisDialog : LuisDialog<object>
有什么想法吗?谢谢。
我假设您正在使用 AuthBot(通过查看代码)。
您需要补充的是:
await base.MessageReceived(context, item);
这只会将消息传递给 LUISDialog 的 MessageReceived 实现;它将向 LUIS 发出查询以了解应执行哪个意图。