Как использовать Dialog.ElicitSlot для Python в качестве среды выполнения - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу заполнить slot не в начале вызова намерения, а в более поздней части запроса намерения . Я хочу предоставить пользователю некоторые варианты, и я хочу, чтобы они выбрали один из них. Для этого я пытаюсь использовать Dialog.ElicitSlot, но почему-то получаю сообщение об ошибке:

"Запрос к конечной точке умения привел к ошибке."

Я возвращаю это, когда мне нужно, чтобы пользователь выбрал опцию из моего списка.

return {
    "version": "1.0",
    "sessionAttributes": {},
    "response": {
    "outputSpeech": {
        "type": "PlainText",
        "text": "These are the multiplex" + ("es" if len(multi_list) > 1 else "") + " " + outputSpeech + ". Please select one out of these."
        # outputSpeech contains the list of options I want the user to select from
    },
    "shouldEndSession": False,
    "directives": [
        {
            "type": "Dialog.ElicitSlot",
            "slotToElicit": "MULTIPLEX",
            "updatedIntent": {
                "name": "GetMovieDetails",
                "confirmationStatus": "NONE",
                "slots": {
                    "CITY" : {
                        "name" : "CITY",
                        "confirmationStatus" : "NONE",
                        "value" : city # this is already filled, it is just anti-capitalised 
                    },
                    "NAME" : {
                        "name" : "NAME",
                        "confirmationStatus" : "NONE",
                        "value" : movie_name # this is already filled, it is just anti-capitalised 
                    },
                    "MULTIPLEX" : {
                        "name" : "MULTIPLEX",
                        "confirmationStatus" : "NONE",
                    }
                }
            }
        }
    ]
}

Я проверяю свой навык, используя python-lambda-local, он отлично работает на моей локальной машине (мне просто нужно было вручную изменить dialogState на "COMPLETED", как здесь ). Возвращает все написанное выше. Но он выдает ошибку при тестировании на Skill Tester. Здесь - это результат, который возвращается в Skill Tester. PS: я не установил флажок заполнения слотов в разделе сборки. (Поскольку мне нужно заполнить слот позже), и здесь - полный код на всякий случай.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Боже, я ненавижу это признавать.

Dialog.ElicitSlot работает нормально, и я так и ожидаю. Ошибка с моим кодом: нет ошибки . Я полагал, что мое умение занимало некоторое время для получения данных с удаленного сайта и выполнения некоторых вычислений на нем. Поэтому я увеличил время ожидания, и это сработало.

Всегда лучше проверить свои навыки локально, но здорово проверить их один раз на aws лямбда-консоли . Я не знаю, почему я не сделал этого раньше.

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

0 голосов
/ 27 апреля 2018

Попробуйте пропустить всю часть "updatedIntent", так как эта информация не требуется для ElicitSlot.

Но более важно: вы должны убедиться, что ваш скрипт возвращает фактический текст в формате JSON!

Взгляните на http://flask.pocoo.org/docs/1.0/api/#flask.json.jsonify или https://docs.python.org/2/library/json.html

...