Извлеките указанное намерение и тип слота из запроса Alexa в сервисе c # - PullRequest
0 голосов
/ 20 декабря 2018

На AWS Lambda запущена служба ac #, FunctionHandler правильно получает запрос и различает тип запуска и тип намерения.Как и в заголовке, как мне получить то, что пользователь фактически ввел?

Намерение называется «swap_screens», пример высказывания - «переключить экран на {display}», а в пользовательском слоте есть опции:«компьютер» или «телевизор».

Как выбрать «компьютер» или «телевизор»?

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;
    }

Спасибо.

1 Ответ

0 голосов
/ 14 марта 2019

Здесь я предполагаю, что у вас может быть более одного слота в одном намерении / высказывании.

Запрос Alexa преобразует все значения слота в массиве, поэтому вы можете получить доступ к значению слота, используя следующий код (здесь «date» - это имя моего слота)

       if (intentRequest.Intent.Slots.TryGetValue("date", out var dateSlot))
            {
                if (!string.IsNullOrEmpty(dateSlot.Value))
                {
                   //Slot value
                }
            }
...