Рассмотрим следующую подсказку:
PromptDialog.Choice(context, this.ChoiceReceivedAsync, new List<string>() { "Choice 1", "Choice 2" }, "stuff and things");
в методе возобновления после вы можете применять логику по выбору пользователя, например:
private Task ChoiceReceivedAsync(IDialogContext context, IAwaitable<string> result)
{
Activity a = context.Activity as Activity;
switch (a.Text)
{
case "Choice 1":
//do stuff
break;
case "Choice 2":
//do stuff
break;
default:
context.Forward(new Luis(), afterLuis, context.Activity, CancellationToken.None);
break;
}
a = a.CreateReply("things");
context.PostAsync(a);
return Task.CompletedTask;
}
Таким образом, если пользователь вводит что-то кроме выбора, он будет отправлен на Luis()
, в моем случае это public class Luis : LuisDialog<object>
или диалог Luis для обработки вызовов Luis.
Вы могли бы также сделать это, вызывая API LUIS вместо использования диалога LUIS.
private async Task ChoiceReceivedAsync(IDialogContext context, IAwaitable<string> result)
{
Activity a = context.Activity as Activity;
switch (a.Text)
{
case "Choice 1":
//do stuff
break;
case "Choice 2":
//do stuff
break;
default:
using (HttpClient client = new HttpClient())
{
string RequestURI = "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/YOUR_MODEL_ID?" +
"subscription-key=YOUR_SUBSCRIPTION_KEY&verbose=true&timezoneOffset=0&q=" +
a.Text;
HttpResponseMessage msg = await client.GetAsync(RequestURI);
if (msg.IsSuccessStatusCode)
{
var JsonDataResponse = await msg.Content.ReadAsStringAsync();
LUISData luisData = JsonConvert.DeserializeObject<LUISData>(JsonDataResponse);
}
}
break;
}
a = a.CreateReply("things");
await context.PostAsync(a);
}
для того, чтобы сделать это таким образом, вы должны добавить такие классы, чтобы поддерживать десериализацию.
public class LUISData
{
public string query { get; set; }
public LUISIntent[] intents { get; set; }
public LUISEntity[] entities { get; set; }
}
public class LUISEntity
{
public string Entity { get; set; }
public string Type { get; set; }
public string StartIndex { get; set; }
public string EndIndex { get; set; }
public float Score { get; set; }
}
public class LUISIntent
{
public string Intent { get; set; }
public float Score { get; set; }
}