Рубрики
Без рубрики

Руководство для начинающих к новым AWS Python SDK для Alexa

Автор оригинала: FreeCodeCapm Team.

RALU Болованом

Amazon Web Services (AWS) Недавно добавил новый Python SDK к их семье Алекса. В настоящее время в бета-версии, но это не должно помешать нам получить некоторую экспозицию.

Что мы построим: Очень простое голосовое приложение, которое может сказать 10 Факты о кошках Отказ

Почему мы построим это: Концепция приложения достаточно проста для нас, чтобы сосредоточиться на том, как работать с SDK, и как использовать DynamOdb, чтобы сохранить самые важные данные для нашего приложения.

К концу учебника вы уйдете с:

  1. Что каждый из главных типов запросов Alexa делает и как создать свой собственный.
  2. Понимание того, как вы можете сохранить данные вашего приложения в Dynaphodb и избежать подводных камней.
  3. Смотрите два стиля Python для Alexa в действии и выбирайте предпочтительный.
  4. Советы Python.
  5. Советы консоли Alexa.

Предпосылки:

1. AWS аккаунт

2. AWS разработчик аккаунт (Если вы хотите проверить на своем зарегистрированном устройстве, например, echo, регистрация с тем же электронной почтой, что и ваша учетная запись Amazon)

3. Python 3.6.

Если вы все еще со мной, давайте начнем!

Алекса: Что происходит за кулисами (большая картина)

Чтобы проиллюстрировать основную идею взаимодействия с Alexa, давайте посмотрим на запуск фиктивного навыка, называемого «моим примером».

Когда пользователь говорит: «Откройте мой пример», бит «Мой пример» – это навыки Название вызовов , который Алекса использует для общения. Устройство пользователя проходит то, что сказал пользователь «Моим примером».

На данный момент Alexa использует навыки Модель взаимодействия Чтобы понять, что запрашивается пользователем. Модель взаимодействия – это файл JSON, который отображает то, что пользователь говорит к типу запроса. В этом случае он будет сопоставлять его в встроенный Amazon.launchrequest Отказ

Далее он называет его бэкэндом, AWS LAMBDA ФУНКЦИЯ , который получает идентифицированный запрос.

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

Эта функция затем возвращает ответ, который отправляется обратно полностью до устройства пользователя. На этом этапе «мой пример» навык приветствует их и сможет принять дополнительные пользовательские запросы.

Давайте приступим к делу!

Обзор архитектуры

Теперь, когда мы прибили главную идею за вызовом навыка Alexa, давайте исследовать, как мы создадим наш выборки «Факты Cat».

Архитектура похожа на тот, который мы обсуждали: Alexa Smipple, который вызывает функцию лямбда для обработки идентифицированного запроса и возвращает ответ, который будет произнесен обратно пользователю.

У нас есть два дополнения: Dynamodb и Я.

Динамодб

Наш навык собирается отслеживать индекс последнего факта, что наш пользователь слышал из нашего списка десяти фактов CAT. Он использует DynamOdb для сохранения индекса и количество раз, когда пользователь открыл наш навык.

Я

Нам понадобится в двух местах:

  • Во-первых, роль для нашей лямбда сможет взаимодействовать с DynamOdb, чтобы сохранить наши пользовательские данные. Нам также необходимо предоставить разрешения CloudWatchlogs, чтобы написать важные подробности о запросах, которые мы получаем.
  • Во-вторых, нам понадобится разрешение на лямбда, чтобы позволить нашему умению Alexa вызывать нашу лямбду как ее бэкэнда.

Выполнение

Alexa Skill.

Перейдите в свою консоль разработчиков Alexa и нажмите «Создать навык». Назовите навык «Факты CAT» и выберите предпочитаемый английский язык.

Добавьте название вызовов: «Факты Cat».

Добавьте следующую модель взаимодействия в редактор JSON Console:

{    "interactionModel": {        "languageModel": {            "invocationName": "cat facts",            "intents": [                {                    "name": "AMAZON.CancelIntent",                    "samples": []                },                {                    "name": "AMAZON.HelpIntent",                    "samples": []                },                {                    "name": "AMAZON.StopIntent",                    "samples": []                },                {                    "name": "AMAZON.StartOverIntent",                    "samples": [                        "start",                        "start a new game",                        "restart",                        "restart game"                    ]                },                {                    "name": "AMAZON.YesIntent",                    "samples": []                },                {                    "name": "AMAZON.NoIntent",                    "samples": []                },                {                    "name": "AMAZON.FallbackIntent",                    "samples": []                },                {                    "name": "FactNumberIntent",                    "slots": [                        {                            "name": "fact_number",                            "type": "AMAZON.NUMBER"                        }                    ],                    "samples": [                        "{fact_number}",                        "I want {fact_number}",                        "I want fact {fact_number}",                        "I want fact number {fact_number}",                        "Tell me {fact_number}",                        "Tell me fact {fact_number}",                        "Tell me fact number {fact_number}"                    ]                }            ],            "types": []        }    }}

Нажмите кнопку «Сохранить модель».

Кончик:

Для ресурсов AWS используйте Алекса Поддержала регион :

  • Asia Pacific (Токио)
  • ЕС (Ирландия)
  • США Восток (Н. Вирджиния)
  • США запад (Орегон)

Dynamodb Таблица

В консоли перейдите к Dynamodb и создайте новую таблицу под названием «CAT_FACTSS». Назовите ключ раздела: «ID».

Я

Теперь мы создадим политику IAM, которую мы прикрепим к вашей роли лямбда.

Перейдите в «Услуги» -> «IAM» -> «Политика» и нажмите «Создать политику».

Затем вставьте следующую политику в редакторе JSON и нажмите «Политика просмотра».

{    "Version": "2012-10-17",    "Statement": [        {            "Sid": "",            "Effect": "Allow",            "Action": [                "dynamodb:BatchGetItem",                "dynamodb:BatchWriteItem",                "dynamodb:PutItem",                "dynamodb:ListTables",                "dynamodb:DeleteItem",                "dynamodb:Scan",                "dynamodb:ListTagsOfResource",                "dynamodb:Query",                "dynamodb:UpdateItem",                "dynamodb:DescribeTimeToLive",                "dynamodb:CreateTable",                "dynamodb:DescribeTable",                "dynamodb:GetItem",                "dynamodb:DescribeLimits",                "dynamodb:UpdateTable",                "logs:CreateLogGroup",                "logs:PutLogEvents",                "logs:CreateLogStream"            ],            "Resource": "*"        }    ]}

Назовите политику «CAT_FACTS_POLICY» и завершите, выбрав «Создать политику».

Затем мы хотим прикрепить эту политику к роли лямбды. Вернитесь к «IAM» -> «Роли» и выберите «Создать роль».

Затем мы выбираем услугу «Lambda» и нажмите «Далее: разрешения».

Присоединяем «CAT_FACTS_POLICY» и нажмите «Далее: обзор».

Мы заканчиваем, давая нашу роль названием «cat_facts_lambda_role» и нажав на «создать роль».

Лямбда код

В вашем терминале создайте новую папку:

mkdir alexa_cat_facts_skill.

В этой папке создайте новый каталог для лямбда:

cd alexa_cat_facts_skill/mkdir lambda

В рамках папки Lambda создайте новую виртуальную среду. Виртуальнаярица позволяет нам держать библиотеки наших навыков отдельными от тех, кто в любом другом проекте Python.

cd lambdapython3 -m venv catfactsenvsource catfactsenv/bin/activatepip install ask-sdkdeactivate

Подсказка Windows : Активировать виртуальную среду, выполните следующие действия: Catfactsenv \ Scripts \ Activate.bat

Класс и декоратор Python Styles

Python SDK предлагает нам два способа написать наши взаимодействия Alexa: либо используя классы, либо с помощью декораторов.

Теперь мы сделаем сравнение между двумя стилями, глядя на запросы, которые мы хотим поддерживать как часть нашего приложения. Мы достигнем точно такой же функциональности.

Создайте два новых файла Python, один для каждого стиля:

touch catfacts_classes_lambda.pytouch catfacts_decorators_lambda.py

Импорт

В обоих случаях мы импортируем модуль «ОС» для извлечения любых переменных среды, которые мы передаем на нашу лямбда – в этом случае имя таблицы dynamodb, чтобы сохранить наши пользовательские данные.

SkillBuilders Это классы, которые позволяют нам прикрепить компоненты, которые могут обрабатывать запросы наших пользователей и создавать соответствующие ответы.

Мы импортируем « Shradekillbuilder », который предлагает поддержку Dynamodb из коробки. Он также интегрируется с клиентом API по умолчанию, получая основные данные о устройстве пользователя.

Мы создаем новый экземпляр, к которому мы передаем имя таблицы dynamodb. Мы хотим использовать Идентификатор пользователя что Алекса дает нам ключ раздела нашего стола. Мы делаем это, указав встроенный помощник функции, называемой user_id_partition_keygen . , который извлекает идентификатор пользователя из входящих запросов.

Мы включаем IS_REQUEST_TYPE, IS_INTENT_NAME Функции, которые помогут нам позже определить запросы, которые навыки отправили.

Мы импортируем ask_sdk_dynamodb Чтобы извлечь информацию из наших данных динамо.

Классы

В случае классов мы вводим четыре абстрактных класса, которые мы будем реализовывать для наших навыков на работу:

  • Abstractrequesthandler – Этот класс способен обрабатывать запросы от пользователя и вернуть соответствующий ответ
  • AludeExceptionHandler – для обработки исключений
  • Abstractrequestiternector – выполняет перед запросом
  • Abstractresponseiverector – выполняет после запроса

Декораторы

Кончик

Мы могли бы создать нашу таблицу Dynamodb в Lambda, установив auto_create_table = true Отказ Проблема в том, что это асинхронная функция, поэтому первый пользователь приложения будет иметь опытные ошибки во время инициализации таблицы.

Данные

Мы храним десять фактов кота в Список для обеих версий кода.

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

HandlerInput.

Всякий раз, когда нам нужно обрабатывать запрос, исключение или перехватить запрос до или после того, как мы обработали его, что делает это возможным, является HandlerInput (в коде, Handler_Input ) объект. Он содержит все, что нам нужно понять состояние наших навыков.

HandlerInput предлагает следующие атрибуты для нас:

  • request_envelope : весь тело запроса
  • atributes_manager: Простой способ доступа к запросу, сеансу и постоянным атрибутам
  • service_client_factory : Создает клиентов API, которые могут выполнять функции для нас, как извлечение имени и адреса пользователя, или совершать покупки
  • Ответ_Builder : способ построить ответ, который мы хотим перейти к нашему пользователю
  • контекст : Дополнительный объект, который передается сервисом, который выполняет код навыка. Для бэкэнда Lambda это контекстный объект, который дает нам информацию, как оставшееся время, пока AWS не прекращает нашу лямбду.

Maintrequest

Классы

Для всех типов запросов, которые отображаются на намерение, нам нужно реализовать Abstractrequesthandler Методы класса Can_Handle и ручка Отказ

Сначала мы определяем, может ли класс обрабатывать входящий запрос. Для этого мы используем IS_REQUEST_TYPE функция. Это принимает тип запроса – в нашем случае Maintrequest и возвращает функцию предикатов. Затем мы проходим Handler_Input К этому предикату, который проверяет, запускается ли входящий запрос на приложение или нет.

Если это Maintrequest мы можем справиться с этим. Поскольку запуск – это шлюз в наше приложение, мы хотим посмотреть, использовал ли этот пользователь наше приложение, чтобы мы могли настроить свой опыт. Мы делаем это, используя Attributes_manager атрибут Handler_Input Чтобы получить persistent_attributes От нашей таблицы Dynamodb Cat_facts.

За кулисами он называет partition_keygen Функция, которую мы использовали для создания СтандартыКиллтуитель экземпляр Отказ

В нашем случае мы заинтересованы в создании Идентификатор пользователя ключ раздела. Как только он извлекил идентификатор пользователя, используя эту функцию из конверта запроса, он запрашивает столбец «ID» Dynamodb Table, чтобы увидеть, есть ли запись для этого пользователя в нашем столе. Если есть, он возвращает словарь, содержащий все имена и значения атрибутов, в противном случае пустой словарь.

Если нет совпадения, мы записываем, что этот пользователь не играл нашей игры раньше. Кроме того, мы добавляем индекс текущего факта из нашего списка Cat_Facts, который является -1, потому что пользователь не прослушивал никаких фактов.

Мы указываем на содержание persistent_attributes к session_attributes Отказ Мы будем использовать атрибуты сеанса во всем приложении, когда мы изменяем поле. Это поможет нам не только поддерживать состояние нашего приложения, но и избежать ненужных вызовов на нашу таблицу Dynamodb.

Чтобы продемонстрировать функциональность, мы предполагаем, что пользователь может играть до тех пор, пока они не слушали все десять фактов.

Если они слушали все факты, мы спрашиваем их, хотят ли они начать снова. Если они хотят перезапустить, мы начнем играть факты в порядке возрастания от первого до последнего.

Затем мы используем Ответ_Builder создать наш ответ. Мы используем его говорить Функция, чтобы сделать устройство пользователя сказать ответ. Если они не ответили за восемь секунд, команда «ASK» автоматически отсматривает их для ответа.

Декораторы

Код обработчика такой же, как для версии классов. Синтаксис отличается тем, что мы используем СтандартыКиллтуитель Объект request_handler Функция для украшения нашей функции. Мы должны пройти его параметр can_handle_func , который должен отобразить функцию. Мы используем то же самое IS_REQUEST_TYPE Метод, который возвращает нам необходимую функцию для этого декоратора для работы.

Советы Python:

Мы использовали attr.set_default ("Facts_index", -1) который проверяет, есть ли Факты_index Ключ в нашем словаре «attr» и устанавливает его до -1, если нет. В противном случае значение не изменяется.

Для Python 3.6 мы можем использовать строки «F» или отформатированные строки, которые являются выражениями, оцененными во время выполнения. Они быстрее и читабельны, чем другие способы форматирования.

Factnumberintent.

Это Пользовательские Тип запроса, который мы определяем. Мы хотим позволить нашему пользователю просить номер факта от 1 до 10, в дополнение к проходу через список фактов в порядке.

Классы

Интересный бит вот в том, что этот запрос передаст нам количество того факта, который пользователь хочет через слот. Слот – это аргумент, приведенный к намерению.

В нашем Модель взаимодействия Мы определили в нашей консоли Alexa, мы скажем Alexa, что мы можем поддержать пользователь, произносящий номер, и что его следует сопоставлять на один через встроенный Amazon.Number :

{                    "name": "FactNumberIntent",                    "slots": [                        {                            "name": "fact_number",                            "type": "AMAZON.NUMBER"                        }                    ],                    "samples": [                        "{fact_number}",                        "I want {fact_number}",                        "I want fact {fact_number}",                        "I want fact number {fact_number}",                        "Tell me {fact_number}",                        "Tell me fact {fact_number}",                        "Tell me fact number {fact_number}"                    ]                }

Из сторон лямбды мы знаем, что получим число. Мы получаем все прорези от намерения, а затем преобразовать это значение в целое число.

Мы уверены, что номер можно сопоставить с индексом, и мы возвращаем факт. В противном случае мы просим пользователя другой номер, который мы поддерживаем.

Мы используем iS_intent_name Функция, чтобы определить, что мы обработаем ФактNumberintent Отказ

Декораторы

Startoverintent.

Это встроенный Amazon Intent, используемый для перезапуска игр, аудио треков или транзакций. В нашем случае перезапуск означает сброс Факты_index Отказ

Классы

Декораторы

Посредница:

Встроенный Amazon намерен руководить пользователю.

Классы

Декораторы

Stoporcancelintent.

Здесь мы объединили обработку встроенных намерений Amazon.stopintent и Amazon.cancelintent к Явный конец Сессия пользователя по установке set_should_end_session на «правда» в Ответ_Builder Отказ

Классы

Мы сохраняем собранные session_attributes В Dynamodb, позвонив нашу функцию помощника persist_user_attributes Отказ Мы также увеличиваем количество раз, когда этот пользователь взаимодействовал с нашим приложением.

Save_persistent_attributes Функция сохранит атрибуты в dynamodb. Это использует экземпляр Skill Builder partition_keygen Функция, чтобы получить пользователя для использования в качестве клавиши раздела. Это делается за кулисами.

Декоратор:

Для can_handle_func Мы делаем нашу собственную встроенную функцию, используя оператор Lambda Python, где мы проходим в Handler_Input быть проверенным против Стопиннт и Открытие Отказ В этом случае мы должны явно вызвать iS_intent_name Функция с обоими этими входами, которая вернет логию. Потому что мы используем лямбда, результат будет Функция предиката , что такое can_handle_func потребности.

Сессионные данные

Мы используем IS_REQUEST_TYPE Функция, чтобы определить, был ли сеанс прекращен. Это происходит, когда пользователь говорит «Выход» – мы не получаем ответ, который может быть сопоставлен на любую цель, или возникает ошибка. Это не вызывается, когда явно заканчивая сеанс, используя set_should_end_session Итак, мы должны Убедитесь, что Что мы сохраняем атрибуты в обоих случаях.

Классы

Декораторы

Да

Это встроенный намерение для позитивных ответов на вопрос да/нет. Мы сохраняем вещи очень базовыми. Мы проверяем, можно ли получить новый факт и, если нет, мы просим пользователя перезапустить игру. В противном случае мы говорим им тот факт и спросите их, хотите ли они услышать еще один.

Классы

Декораторы

Нерешительный

Это встроенный намерение для негативных ответов на вопрос да/нет. Мы решили завершить сеанс и упорствовать атрибуты сеанса в Dynamodb.

Классы

Декораторы

Fallbackintent.

Еще один встроенный намерение Amazon, который поддерживается на момент написания английских местных мест.

Он обеспечивает защитный механизм, когда пользователь говорит что-то, что не соответствует ни одному из наших навыков.

Классы

Декораторы

Allexception.

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

Классы

Нам нужно реализовать Can_Handle Метод, к которому мы проходим Handler_Input и Исключение Отказ Мы хотим, чтобы эта функция обрабатываем любые исключения, но для более специализированных случаев мы могли бы посмотреть классы исключения и иметь определенные способы справиться с ними.

В ручка Функция мы проходим Handler_Input и Исключение И мы вернем простое сообщение.

Декоратор

Для версии декоратора нам нужно передать can_handle_func Функция, которая принимает в качестве ввода Handler_Input и Исключение и возвращает логию. Функция, которая украшена, получает оба этих параметра.

Global ProcessivereTore

Мы используем глобальный перехватчик запроса для выполнения кода до того, как обрабатывается обработчик каждого запроса. В нашем случае мы хотим записать запрос, которую мы получили. Мы также хотим регистрировать идентификатор пользователя и их идентификатор устройства.

Классы

Декораторы

Для декоративов глобальный перехватчик запроса перехватывается непосредственно как функция. Нужен экземпляр построителя навыков, чтобы зарегистрировать перехватчик от нашего имени.

Функции помощника

get_device_id и get_user_id два функция помощника для демонстрирования того, как извлечь deviceid и UserID из запроса с использованием ask_dynamo_db упаковка.

Мы можем использовать ask_sdk_dynamodb.partition_keygen.device_id_partition_keygen и ask_sdk_dynamodb.partition_keygen.user_id_partition_keygen . Как ключ раздела для нашего стола. Когда мы создали наш экземпляр построителя навыков, мы использовали вторую функцию.

GlobalResponseiverector.

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

Классы

Декораторы

Регистрация и вызов наших обработчиков:

Перехватыватели запроса и ответа выполняются в тот же заказ как они зарегистрированы.

Классы

Мы должны явно регистрировать каждый обработчик запроса, каждый обработчик исключения и глобальный запрос и глобальные перехватыватели реагирования.

Затем мы создаем lambda_handler Это можно использовать нашей Lambda в качестве ворот, чтобы вызвать все поддерживаемые обработчики.

Декораторы

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

Мы официально сделаны с помощью синтаксической части и понимаем, что входит в наш код.

Упаковка нашего кода Python

Поскольку мы используем нестандартные библиотеки Python, такие как AWS Python SDK, нам нужно упаковать их рядом с нашим кодом лямбда.

То, как мы достигаем этого, – создать сценарий Bash, который будет делать для нас работу. В каталоге «Alexa_Cat_Facts_skill» создайте новый файл bash: “create_lambda_package.sh”

cd ..touch create_lambda_package.sh

Добавьте следующее в новый файл Bash. Это будет Zip библиотеки Python, а также две версии нашего кода в пакет под названием «Lambda_Package.zip».

#!/bin/bash
BASEDIR=$(pwd)rm -rf $BASEDIR/lambda_package.zipcd  $BASEDIR/lambda/catfactsenv/lib/python3.6/site-packages/zip -r9 $BASEDIR/lambda_package.zip *cd $BASEDIR/lambda/catfactsenv/lib64/python3.6/site-packages/zip -r9 $BASEDIR/lambda_package.zip *cd $BASEDIR/lambda
zip -r9 $BASEDIR/lambda_package.zip catfacts_classes_lambda.py catfacts_decorators_lambda.py

Запустите скрипт Bash: bash -x create_lambda_package.sh.

Совет Windows

Вместо того, чтобы библиотеки Python будут найдены вместо Catfactsenv \ lib \ сайт-пакеты Отказ

Настройка лямбда

Начните с ходьбы на «консоль AWS» -> «Услуги» -> «ЛАМБДА»

Мы будем автором с нуля. Назовите лямбда: “cat_facts_lambda”. Выберите время выполнения, чтобы быть «Python 3.6», а для роли выберите «CAT_FACTS_LAMBDA_ROLE», которые мы создали выше. Нажмите на «Создать функцию».

Добавьте переменную среды «Skill_Persistence_Table» со значением cat_facts Отказ

Увеличьте «тайм-аут».

Импортируйте код, загрузив файл «lambda_package.zip». Добавьте обработчик лямбда, чтобы быть: “CatFacts_decorators_lambda.handler”.

Сохранить функцию.

Добавить триггер Alexa

Из меню «Дизайнерские» функции выберите «Комплект навыков Alexa». Затем нажмите на кнопку с тем же именем, чтобы исправить конфигурацию.

Перейти к Alexa Developer Console , чтобы «конечную точку», и вы увидите Идентификатор навыков Отказ Скопируйте его в свой буфер обмена.

Вставьте идентификатор навыка в консоль лямбда, а затем нажмите «Добавить».

Сохранить функцию.

Затем скопируйте Лямбда Арн от верхнего правого угла страницы.

Устройство консоли Alexa Fineup

Выберите «AWS Lambda ARN» с «конечной точки» и вставьте лямбда в поле «По умолчанию регион».

Затем перейдите к «Build» -> «JSON Edader» -> «Сохранить модель». После того, как модель сохраняется, нажмите «Модель сборки», чтобы все наши изменения вступили в силу.

Мы официально сделаны с нашей настройкой! Поздравляем с тем, чтобы сделать это далеко!

Тестирование

Давайте взаимодействуем с нашим навыком напрямую от консоли Alexa. Перейдите в «Тест» и включите тестирование для навыка, чтобы запустить симулятор Alexa.

Совет консоли Алекса

При тестировании фактов, напишите цифры в качестве символов, например «два» вместо «2». В противном случае намерение будет сопоставлено с падебгантом.

Давайте тестируем версию декораторов

Давайте запустим простой сценарий, чтобы увидеть, как работает наш навык. Мы особенно заинтересованы в тестировании числа фактов намерения и его границы. Не стесняйтесь либо говорить над командами, нажав и удерживая значок MIC или написав их.

Посмотрите результаты в Dynamodb, переходя в вашу консоль AWS в «Услуги» -> «DynamOdb» -> «Таблицы» -> «CAT_FACTS». Вы увидите подобный элемент, с вашим пользовательским идентификатором в качестве ключа раздела.

Давайте проверим версию классов

Чтобы перейти на версию классов нашего кода, перейдите в «Услуги» -> «ЛАМБДА» -> «CAT_FACTS_LABMDA». Простое изменение это Переименуйте обработчик от «CAT FACKS_DECO rators_lambda.handler» на «Cat Facts_c lasses_lambda.handler». «Сохранить» функцию и переключатель происходит автоматически.

Давайте сделаем еще один бег с нами навыком Alexa, где мы хотим проверить начало над поведением. Хотя мы изменили код, поведение одинаково.

Давайте вернемся к нашему столу «Динамодб» и обновите нашу страницу. Наша лямбда успешно записала последний индекс слышанного факта, и что пользователь дважды взаимодействовал с навыком.

Поздравляем ! Вы успешно создали свой первый навык Alexa, используя Python SDK. Теперь вы знаете, как сохраняться соответствующие атрибуты в DynamOdb, как создать инфраструктуру своей навыки, то, что делают основные намерения, как создать свой собственный и как сделать лямбда ответить на любые намерения.

Есть куда расти

Мы конкретно Не сосредоточился на инфраструктуре, такую как код, Git, несколько языков, Ci/CD, тестирование и API для наших фактов CAT. Это сделало бы учебное пособие намного сложнее и забрали бы от основного направления. В реальной среде они заставляют нашу жизнь намного проще.

Несмотря на то, что добавление таких улучшений увеличит нашу продуктивность, зная, как начать и как пойти, может быть подавляющим. Сочетание новых технологических тенденций, как Ай , Смертный и Дежол Требуется удовлетворение многих ролей одновременно, что может показаться непреодолимым.

Получить больше помощи

Но что, если произошел способ преодолеть это препятствие и уполномочить создание собственных приложений, используя эти концепции? Я создал курс, который демистифицирует этот процесс. Вы можете найти это здесь , с бесплатной пробной версией, собираясь здесь Отказ

Спасибо, что нашли время, чтобы прочитать эту статью. Пусть это будет ступенька в вашем путешествии, чтобы создать что-то отличное!