Проверка, которую Alexa предоставляет в консоли разработчика Alexa, более проста, поскольку она полностью управляется на стороне Alexa.
Но на самом деле вы можете управлять всем также с помощью лямбда-функции.Например, если вы используете библиотеку python ask-sdk-core
, вы можете перехватить значение слота, проверить его с помощью выбранного вами пользовательского правила, а затем вернуть ElicitSlotDirective
, если оно не удовлетворяет ему.
Пример кода:
if slot_value is not in ['accepted', 'values']:
prompt = "The slot value is invalid, say something else"
return handler_input.response_builder.ask(prompt).add_directive(
ElicitSlotDirective(
slot_to_elicit=slot_name
)).response
Это заставит alexa запрашивать у пользователя другое значение для слота, сохраняя при этом всю другую информацию о намерении, такую как другие слоты, фактическое намерение, sessionId ...
документация здесь и официальный пример alexa на github