Извлеките указанное намерение и тип слота из запроса Alexa в сервисе C#
На AWS Lambda работает служба aC#, FunctionHandler правильно получает запрос и различает тип запуска и тип намерения. Как и в заголовке, как мне получить то, что пользователь фактически ввел?
Намерение называется "swap_screens", пример высказывания - "переключить экран на {display}", а в пользовательском слоте есть опции "computer" или "TV".
Как выбрать "компьютер" или "телевизор"?
private SkillResponse skillResponse = null;
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public SkillResponse FunctionHandler(SkillRequest input, ILambdaContext ctx)
{
if (input.GetRequestType() == typeof(LaunchRequest))
{
skillResponse = LaunchRequestHandler(input);
}
else if (input.GetRequestType() == typeof(IntentRequest))
{
skillResponse = IntentRequestHandler(input);
}
return skillResponse;
}
private SkillResponse LaunchRequestHandler(SkillRequest skillRequest)
{
var skillResponse = new SkillResponse
{
Version = "1.0",
Response = new ResponseBody()
};
skillResponse.Response.OutputSpeech = new PlainTextOutputSpeech
{
Text = "Launch."
};
return skillResponse;
}
private SkillResponse IntentRequestHandler(SkillRequest skillRequest)
{
var skillResponse = new SkillResponse
{
Version = "1.0",
Response = new ResponseBody()
};
skillResponse.Response.OutputSpeech = new PlainTextOutputSpeech
{
Text = "Intent."
};
return skillResponse;
}
Благодарю.
0 ответов
Здесь я предполагаю, что вы можете иметь более одного слота в одном намерении / высказывании.
Запрос Alexa преобразует все значения слота в массиве, поэтому вы можете получить доступ к значению слота, используя приведенный ниже код (здесь "date" - это название моего слота)
if (intentRequest.Intent.Slots.TryGetValue("date", out var dateSlot))
{
if (!string.IsNullOrEmpty(dateSlot.Value))
{
//Slot value
}
}