Извлеките указанное намерение и тип слота из запроса 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
                }
            }
Другие вопросы по тегам