Как я могу смешать IntentRequest и LaunchRequest на Alexa? - PullRequest
0 голосов
/ 27 января 2020

Я полный новичок в консоли разработки Alexa. Я использую Python SDK, чтобы создать приложение, которое соответствует еде и вину. Мой код работает, но мне все еще нужно запустить приложение (с LaunchRequest), а затем задать вопрос о соответствии между едой и вином.

Я хотел бы дать возможность пользователю напрямую задать свой вопрос: «Алекса, спроси Уини Бота, какое вино соответствует ...».

Однако я не знаю, как это сделать. Я не знаю, нужно ли мне создавать новый LaunchRequest или можно ли запустить IntentRequest напрямую.

Вот мой код, вы думаете, вы могли бы помочь мне?

class LaunchRequestHandler(AbstractRequestHandler):

    def can_handle(self, handler_input):
        # type: (HandlerInput) -> bool

        return ask_utils.is_request_type("LaunchRequest")(handler_input)

    def handle(self, handler_input):
        # type: (HandlerInput) -> Response
        speak_output = "Bonjour, je suis là pour vous aider. Demandez-moi des informations sur un vin ou sur une association plat / vin. Vous pouvez simplement me donner le nom d'un plat ou d'un vin et je m'occupe du reste.";
        reprompt_text = "Vous pouvez par exemple essayer de me demander des informations sur le Chablis.";

        return (
            handler_input.response_builder
                .speak(speak_output)
                .ask(reprompt_text)
                .response
        )

class CapturePlatIntentHandler(AbstractRequestHandler):

    def can_handle(self, handler_input):
        # type: (HandlerInput) -> bool
        return ask_utils.is_intent_name("CapturePlatIntent")(handler_input)

    def handle(self, handler_input):
        # type: (HandlerInput) -> Response

        slots = handler_input.request_envelope.request.intent.slots
        plat = slots["plat"].value

        attributes_manager = handler_input.attributes_manager

        plat_attributes = {
            "plat": plat
        }

        attributes_manager.persistent_attributes = plat_attributes
        attributes_manager.save_persistent_attributes()

        speak_output = correspondance(plat);
        reprompt = "Si vous le souhaitez, vous pouvez me demander des informations sur un de ces vins en disant simplement son nom."

        return (
            handler_input.response_builder
                .speak(speak_output)
                .ask(reprompt)
                .response
        )

Ответы [ 2 ]

1 голос
/ 27 января 2020

Я не эксперт по python, но ваш код мне подходит. Вам не нужно создавать дополнительное намерение для вашего варианта использования. Пользователь может вызвать ваш навык тремя способами: см. Документацию :

  • Произнося имя навыка, вызывая LaunchIntent
    • "Alexa, Запустить Wine Bot "
  • Произнося имя навыка и намерение, вызывая заданное c намерение (или FallbackIntent, если оно реализовано)
    • «Алекса, спроси у Вини Бота, какое вино сочетается с…» чтобы убедиться, что у вашего намерения есть правильные примеры высказываний
    • что вы либо извлекаете требуемый слот (например, через автоматическое делегирование ), либо обрабатываете дело если слот не установлен
0 голосов
/ 10 февраля 2020

Спасибо за ваш ответ. К сожалению, это все еще не работает для меня.

В моем случае, в моих образцах высказываний у меня есть "какое вино соответствует {тарелке}". Если я запускаю приложение, говоря: «Алекса, спрашивает Уини Бота, какое вино соответствует ...», оно не работает, и я не понимаю, почему.

Если я запускаю приложение с помощью LaunchRequest, а затем спрашиваю: «Какое вино соответствует ...», IntentRequest работает хорошо.

Как вы думаете, мне есть что изменить в моем коде? Или это что-то о намерениях?

...