Создайте свой собственный навык Alexa
Язык Английский
Рейтинг
2 0
Время 1,7 часа
Скачать
Для членов клуба Вход | Регистрация

Технологии все больше интегрируются в повседневную жизнь. Теперь с такими устройствами, как Amazon Alexa, программное обеспечение перемещается в дома пользователей и живет совершенно по-новому. Если вы ищете новый способ привлечения клиентов и общения с ними на ежедневной основе, то Amazon Alexa – это то, что вам нужно! Создав новый навык Alexa, вы можете разрешить пользователям взаимодействовать с вашим приложением с помощью своего голоса.

В этом курсе Дерек Дженсен покажет вам, что создать свой собственный навык Amazon Alexa с нуля проще, чем вы думали. Вы узнаете, как создать новый навык Alexa с помощью Amazon Web Services и Node.js.

1.Введение
  • 1,1 Введение 1:03
  • 1.2 Предпосылки 6:17
2.Основы Алекса
  • 2,1 Alexa Skill Kit Прохождение 8:25
  • 2,2 Прохождение AWS Lambda 10:14
  • 2,3 Создание навыка Hello World 8:00
  • 2,4 Создание функции Lambda Hello World 10:14
  • 2.5 Обработка нескольких объектов и слотов 7:03
3.Создание навыков реального мира
  • 3,1 Создание навыков 6:37
  • 3,2 Создание функции Lambda 3:48
  • 3,3 Создание приложения Node.js для вашей функции Lambda 7:11
  • 3,4 Создание вашего первого обработчика 4:38
  • 3,5 Создание данных настройки для вашего навыка 3:00
  • 3,6 Завершение работы обработчика новых курсов 3:49
  • 3,7 Создайте обработчик `GetCourseTeaser`7:08
  • 3,8 Создайте обработчик AddToWatchList 6:30
  • 3,9 Создайте обработчик `GetWatchList`3:43
  • 3,10 Сквозное тестирование 3:37
4.Заключение
  • 4,1 Вывод 2:33

Как поставщики программного обеспечения, мы постоянно нуждаемся в развитии наших навыков и использовании новых технологий. Это означало изучение новых фреймворков и библиотек или даже языка. Но сейчас мы подошли к тому моменту, когда нам нужно изучить новые способы взаимодействия с нашими пользователями. И в эти дни это включает в себя больше, чем просто их компьютеры, часы и мобильные устройства. А как насчет их кухни, гаражей, автомобилей и других вещей в их повседневной жизни? Кажется слишком сложным? Не с взрывом интерактивных устройств, таких как Amazon Alexa. Это устройство создает для нас совершенно новый способ написания программного обеспечения и вкладывает нас не только в жизнь наших клиентов, но и в их дома. Итак, давайте потратим несколько минут на изучение основ этого очень интересного устройства и на то, как написать простое программное обеспечение для его работы. И к концу этого курса, вы узнаете, как создать полноценное приложение Amazon Alexa, содержащее всего лишь пару веб-интерфейсов и немного JavaScript. Так чего же мы ждем? Давайте начнем.

Теперь, прежде чем мы действительно начнем создавать навык Alexa или пару навыков Alexa, нужно выполнить несколько предварительных условий и немного настроек. Во-первых, и, возможно, не так очевидно, что если вы собираетесь следить за этим видео и заниматься развитием навыков Alexa. И вы часто произносите слово Alexa, тогда вы можете захотеть отключить, отключить или отключить любое из ваших устройств с поддержкой Alexa. Поскольку чем больше и больше вы говорите это, тем больше и больше устройство будет распознавать этот сигнал, и тогда вы будете говорить всевозможные вещи, и тогда ваше Эхо начнет отвечать, и тогда все станет довольно запутанным. Поэтому, если вы находитесь в среде, где у вас есть устройство с поддержкой Alexa, вы можете, как я уже сказал, отключить его, отключите его или что-то еще, когда вы проходите этот процесс. И тогда, очевидно, вы можете включить его позже. Теперь, прежде чем вы сможете начать, вам нужно иметь несколько вещей. Потому что Alexa – это продукт Amazon, или он включен через продукты Amazon. Тогда вам понадобится аккаунт разработчика в Amazon. Так что для этого вам просто нужно зайти на developer.amazon.com, и вы можете нажать кнопку «Войти» и создать учетную запись. И как вы можете видеть здесь, вы можете начать создавать сервисы и приложения, использующие Alexa, App Store, AWS, о которых мы поговорим чуть позже, и другие подобные вещи. Так что это бесплатная установка. Таким образом, вы просто входите в систему, входите в систему, создаете учетную запись и готовы к работе, когда придет время приступить к разработке. Теперь также, процесс создания Alexa Skills – это действительно очень сложная вещь. И если вы начнете читать учебные пособия в разных областях, даже на веб-сайте Amazon, все может запутаться довольно быстро. Итак, что я собираюсь сделать, моя цель этого курса. Это на самом деле сводить его к основам, гайкам и болтам, и действительно заставить вас работать как можно быстрее. И для этого мы будем использовать другую технологию Amazon, известную как лямбда-функции. И в принципе, это позволит нам создать бэкэнд для вашего приложения Alexa или вашего навыка Alexa для общения. Так что само по себе умение Alexa не может ничего сделать. Требование создания этого навыка – иметь какой-то бэкэнд, скажем, серверное приложение. Сейчас есть много разных способов сделать это, но мы мы собираемся сосредоточиться на пути наименьшего сопротивления. И для этого мы, как я уже сказал, будем использовать лямбда-функции Amazon. Для этого нам понадобится аккаунт AWS. Итак, еще раз, вы можете перейти на aws.amazon.com и продолжить и создать учетную запись. Теперь, вы можете сказать, ну у меня уже есть и аккаунт Amazon. Разве я не могу просто использовать это? Ну, это не обязательно так работает. Это разные разделы Amazon, для которых вам нужно либо создать учетную запись, либо включить ее в своей существующей учетной записи. Так что просто имейте это в виду. Так что, если вы можете следить за уже имеющейся у вас учетной записью Amazon, отлично, если нет, тогда вам нужно эти два места и убедиться, что у вас есть учетная запись и доступ к ним. Теперь AWS, Да, это может быть платный продукт или платные услуги, но если вы создадите учетную запись, она спросит вас, какой тип вы хотите, и вы можете создать бесплатную учетную запись. И я считаю, что что-то вроде первого миллиона запросов в месяц или что-то в этом роде бесплатное. Так что все, что мы будем делать в этом курсе, будет бесплатным. Это не будет стоить вам ничего. Вам нужно будет ввести кредитную карту или какой-либо способ оплаты. Просто запишите в файл, что они не будут выставлять счета, если вы не превысите ту сумму, которую для данного курса вы не сделаете, так что вам не придется об этом беспокоиться. Теперь, с этими двумя вещами, вы должны быть почти готовы к работе. Но для того, чтобы по-настоящему воспользоваться всеми преимуществами процесса разработки, вы можете рассмотреть возможность использования пары дополнительных инструментов. Теперь большинство вещей, которые мы Здесь вы можете сделать это через веб-браузер и все будет в порядке. Но когда я начинаю по-настоящему копаться в написании кода, мне нравится иметь локальную среду разработки. Мне нравится использовать мои собственные инструменты локально на моем компьютере или ноутбуке или что-то еще, и вам не нужно полагаться на инструменты, основанные на сети, где-то на веб-сайте. Поэтому для этого я собираюсь создать среду разработки на своем компьютере. И вы можете следовать по этому пути, если хотите. Я покажу вам, как сделать это обоими способами, на самом деле через Интернет и локально, а затем загрузить свой код в AWS. Но я собираюсь использовать Node.js, что означает, что я буду использовать или писать свой код на JavaScript. Теперь вы можете создавать другие серверные приложения, которые будут обрабатывать и поддерживать ваши навыки Alexa, используя Ruby и C #, а также все эти другие технологии. Вы можете сделать это абсолютно. Но я снова буду использовать что-то простое, и это будет JavaScript. Поэтому для этого я буду использовать Node.js, в основном для менеджера пакетов Node или NPM. Так что я собираюсь убедиться, что у меня это установлено. У меня уже установлен Node, но если по какой-то причине вы этого не сделаете, вы можете перейти на Node.js.org и скачать последнюю версию. Я собираюсь использовать версию 8, а не самую последнюю версию. Но вы должны быть в состоянии обойтись с любым из них, это было бы хорошо. Затем, наряду с этим, мне нравится использовать текстовый редактор локально, и я собираюсь использовать код Visual Studio, как я это делал довольно давно. Мне очень нравится это, у него есть много отличных плагинов и возможность расширения, если вы хотите расширить его самостоятельно, но вы можете использовать любой текстовый редактор, который вы хотите. Вы можете использовать Atom, вы можете использовать встроенный текстовый редактор на вашей платформе. TextEdit или Notepad, или что там у вас, все будет хорошо работать. И тогда вам понадобится также терминальное приложение, которое вам удобно использовать. Вы можете использовать встроенные оболочки в Unix, Linux и MacOS или использовать командную строку на вашем компьютере с Windows. Я склонен использовать iTerm2. Я бегу на Mac. Это мое любимое терминальное приложение. И это то, что я собираюсь использовать. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Вы можете использовать встроенный текстовый редактор на вашей платформе. TextEdit или Notepad, или что там у вас, все будет хорошо работать. И тогда вам понадобится также терминальное приложение, которое вам удобно использовать. Вы можете использовать встроенные оболочки в Unix, Linux и MacOS или использовать командную строку на вашем компьютере с Windows. Я склонен использовать iTerm2. Я бегу на Mac. Это мое любимое терминальное приложение. И это то, что я собираюсь использовать. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Вы можете использовать встроенный текстовый редактор на вашей платформе. TextEdit или Notepad, или что там у вас, все будет хорошо работать. И тогда вам понадобится также терминальное приложение, которое вам удобно использовать. Вы можете использовать встроенные оболочки в Unix, Linux и MacOS или использовать командную строку на вашем компьютере с Windows. Я склонен использовать iTerm2. Я бегу на Mac. Это мое любимое терминальное приложение. И это то, что я собираюсь использовать. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Вам также понадобится терминальное приложение, которым вы можете пользоваться. Вы можете использовать встроенные оболочки в Unix, Linux и MacOS или использовать командную строку на вашем компьютере с Windows. Я склонен использовать iTerm2. Я бегу на Mac. Это мое любимое терминальное приложение. И это то, что я собираюсь использовать. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Вам также понадобится терминальное приложение, которым вы можете пользоваться. Вы можете использовать встроенные оболочки в Unix, Linux и MacOS или использовать командную строку на вашем компьютере с Windows. Я склонен использовать iTerm2. Я бегу на Mac. Это мое любимое терминальное приложение. И это то, что я собираюсь использовать. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем. Поэтому, как только мы настроим все эти вещи и у вас появятся учетные записи в соответствующих областях Amazon, а именно developer.amazon и AWS, вы будете готовы к работе. Итак, давайте продолжим и начнем.

Прежде чем мы начнем копаться в написании реального кода, я хочу уделить пару минут краткому обзору каждого из мест, на которых мы будем проводить время в Amazon, как на портале для разработчиков Amazon, так и на AWS. Итак, первое, что вы хотите сделать, это создать учетную запись разработчика Amazon. Итак, как вы можете видеть здесь, я на developer.amazon.com, и я вошел в систему, и я на этой главной странице. Итак, куда мне идти, когда я хочу начать развивать навыки Alexa? Ну, совершенно очевидно, вы можете перейти сюда по ссылке Alexa. Итак, давайте продолжим и нажмем на это, и это даст нам практически все, что вам нужно знать о создании приложений для Alexa. Есть много действительно хорошей документации, несколько видео, примеры того, что вы можете построить. Вы можете подписаться на рассылку. Вы можете взглянуть на многие вещи. Теперь, куда вы идете отсюда, когда вы действительно хотите начать и следовать этому курсу? Ну, что мы собираемся сделать, так это то, что мы отправимся в верхний левый угол к комплекту Alexa Skills Kit. Теперь, как и во всем остальном, вы действительно можете создать практически все в мире с нуля, но это действительно помогает иметь отправную точку. Итак, что мы собираемся сделать здесь, мы собираемся спуститься сюда в раздел «Начало работы». И я хочу использовать набор навыков Alexa для создания навыка. Итак, мы пойдем дальше и нажмем на это. И затем это снова приведет вас к дополнительной информации о наборе навыков Alexa. Что это такое? Как Вы этим пользуетесь? Для чего вы можете его использовать? Почему мы должны развивать навыки, все такое хорошее. Как только вы действительно захотите его создать, вы перейдете сюда с правой стороны и нажмете, чтобы начать умение. Теперь это проведет вас через немного волшебника. Как вы можете видеть здесь, у меня есть и другие примеры, которые я недавно построил. Теперь я хочу создать новый навык с нуля. Теперь, если у вас ничего нет, это нормально. Вы можете пойти дальше и начать и создать навык с нуля. Итак, давайте нажмем кнопку создания навыка. И теперь, что это собирается сделать, это как бы провести вас через процесс создания навыка. Итак, первое, что нам нужно сделать, это дать нашему умению имя. Теперь это будет своего рода небольшая демонстрационная демонстрация того, как создавать базовые навыки и что с ними делать, в некотором смысле, как мир в контексте. Итак, мое имя навыка в этом случае, я назову это Hello TutsPlus. И мы можем создать это с языком по умолчанию, я буду использовать английский, затем мы продолжим и нажмем Далее. И теперь мы подошли к тому моменту, когда нам нужно принять наше первое решение. Теперь нам нужно выбрать модель, к которой мы хотим добавить наш навык. Таким образом, мы можем использовать несколько различных типов предварительно созданных моделей, чтобы иметь возможность создавать этот масштаб. Лучшее место, которое я думаю начать, это пойти на заказ. Теперь вы можете исследовать эти другие варианты самостоятельно. Но обычай будет тем, что мы выберем. Итак, я собираюсь выбрать это, а затем я собираюсь нажать Create Skill. Так что теперь он собирается создать для вас базовый скелет навыка, а затем перенести вас в среду разработки такого рода. Теперь, как вы можете видеть здесь, вверху, мы смотрим на навык Hello Tuts, и мы можем рассмотреть четыре различных раздела. Мы можем построить, мы можем проверить, мы можем запустить, и мы можем измерить. Так что сборка – это то, где вы будете выполнять большую часть своей дизайнерской работы и создавать настоящие навыки. Мы будем говорить о намерениях, высказываниях и вызовах, а также обо всех подобных вещах, о которых мы расскажем подробнее. После того, как вы действительно его построили, вы можете перейти к тестированию, и я покажу вам это на следующем уроке, где мы можем на самом деле проверить свои навыки через веб-браузер. Так что сейчас самое подходящее время для того, чтобы вы могли проверить свою функциональность и разговор, который вы собираетесь провести с Alexa, прежде чем вы действительно положите его на устройство, что на самом деле очень, очень полезно. Запусти, мы действительно не будем вдаваться в подробности этого курса. Но в конечном итоге именно здесь вы собираетесь поместить свой навык в Amazon Store, чтобы другие люди могли загрузить его, установить на свои устройства и использовать свой навык. Так что определенно то, что вы хотите иметь в виду, если вы хотите создать эти навыки для массовой публикации. А затем измерять, чтобы вы могли увидеть, какую статистику о вашем навыке, как часто он используется и как часто он устанавливается и загружается, и все такое хорошее. Теперь и здесь вы можете посмотреть это видео, и я настоятельно рекомендую вам сделать это. Это’ Он проведет вас через своего рода вводный урок о том, что значит развивать навыки и как это делать, а также о различных вещах, которые вам нужно будет сделать, чтобы достичь этого. Теперь, когда вы это сделаете, вы окажетесь в этом мире, который немного перемешан, я согласен, и я не большой поклонник, но основы всегда будут такими же, как только вы добраться до этой точки. То, что вы будете делать при создании пользовательского навыка, – это то, что вам нужно будет определить пару вещей, и это в основном будет сделано в этом разделе слева под обычаем, у нас есть наша модель взаимодействия. У нас есть наши интерфейсы, а затем у нас есть конечная точка. Теперь в разделе «Модель взаимодействия» здесь, наверху, вы Вы будете выполнять большую часть работы, когда дело доходит до определения навыка и взаимодействия, которое вы будете иметь с Alexa. И мы собираемся заполнить все это немного позже, но просто для краткого ознакомления, имя вызова навыка – это то, что вы собираетесь назначить, чтобы разбудить это приложение, когда вы говорите в Алекса. Так что в моем случае это может быть что-то вроде Tuts Plus, и тогда я могу сказать ему, Алекса, открыть Tuts Plus или попросить Tuts Plus дать мне эту информацию или что-то в этом роде. Поэтому, что бы вы ни указали в качестве имени вызова, вы будете говорить с Алексе, когда хотите общаться с этим конкретным навыком. Тогда у нас есть идея намерений. Теперь задумайтесь о них как о событиях или запросах, которые вы делаете для конкретного приложения. Теперь все навыки Алекса по умолчанию идут с этими тремя, готовыми пойти в StopIntent, HelpIntent и CancelIntent. Как вы можете видеть, они необходимы, и в основном эти вещи запускаются, когда вы говорите Алексе, Алексе, стопу или Алексе, помощи или тому подобное. Таким образом, они уже готовы, и вы можете сразу начать и начать с этого. Теперь, отсюда, мы собираемся добавить свои собственные намерения, думать о них как о, как я уже сказал, типе событий или команд, которые вы собираетесь давать своим навыкам. Так что вы можете добавить сюда все, что захотите. Алекса, попроси Tuts Plus дать мне десять лучших курсов Деррика Дженсена, что-то в этом роде. И вот тогда, может быть, это намеревается что-то вроде, получить десятку или что-то в этом роде. И мы собираемся немного поработать над этим на следующих уроках. Тогда у нас есть концепция типов слотов. Типы слотов интересны, и это позволяет вам встроить переменные в то, что вы говорите Алексе. Таким образом, я мог бы сказать что-то вроде, или я мог бы обобщить что-то, чтобы сказать, эй, Алекса, попросить TutsPlus дать мне десятку лучших курсов примерно так же. И это и так – это имя, которое я могу вставить туда, возможно, в это время это Деррик Дженсен. Может быть, это кто-то еще позже. И затем это своего рода заполнитель переменных, который я затем могу использовать для поиска информации на основе этого конкретного ввода или переменной, заданной конечным пользователем, что довольно круто. Редактор JSON позволит вам увидеть, как выглядит ваша фактическая модель взаимодействия в форме JSON, потому что так она и будет. Раздел «Интерфейсы» здесь позволяет вам использовать некоторые готовые интерфейсы, чтобы использовать преимущества встроенной функциональности, если вы хотите воспроизводить аудио, если вы хотите отображать видео и тому подобное. На самом деле мы не собираемся использовать это в этом курсе, но просто для того, чтобы знать, что он есть, и вы можете использовать эти вещи из коробки вместо того, чтобы создавать свои собственные. И затем конечная точка здесь, как я уже говорил, это то, где мы собираемся указать на наше серверное приложение, куда все будет отправлено в будущем. Поэтому, когда я прошу Алексу что-то сделать с моим приложением, этот запрос, это намерение будет объединено и отправлено на серверное приложение, где оно может быть обработано, и что-то может быть возвращено умению либо сказать что-то, либо отобразить что-либо проигрывать аудио или видео, или что там у тебя.

Следующее, что вам нужно, по крайней мере, иметь разумное понимание или немного опыта, прежде чем вы закончите свое мастерство, это иметь этот серверный сервис, серверное приложение, которое будет обрабатывать ваш запрос Alexa. или ваши намерения. И способ, которым мы собираемся сделать это в этом курсе, кстати, с помощью лямбда-функций Amazon, и как мы это делаем? Что ж, давайте перейдем к aws.amazon.com. И еще раз вам нужно иметь учетную запись. И в этом случае, если вы никогда не были здесь раньше, это довольно просто. Это немного ошеломляет, но вы можете добраться туда и получить понимание довольно быстро. Мы рассмотрим продукты, и, как вы можете видеть, продуктов много. Но если вы пойдете под вычисления и пройдете примерно три четверти пути вниз, вы Мы увидим то, что говорит AWS Lambda. Итак, давайте продолжим и нажмем на это. Теперь это хороший портал, который расскажет вам о различных функциях. Цены, различные вещи, которые вы можете сделать, чтобы начать, хорошие ресурсы, всякая полезная информация о том, что такое Lambda, и о некоторых вещах, которые вы можете сделать с ней. Поэтому я настоятельно рекомендую вам потратить некоторое время на этом сайте, чтобы прочитать о Lambda, прочитать документацию и понять, как вы можете использовать функции Lambda. Но чтобы немного ускорить процесс, давайте углубимся в процесс и посмотрим, как он на самом деле выглядит. Итак, я собираюсь перейти к этой кнопке, которая говорит «Начните с AWS Lambda». И это перенесет вас на консоль AWS. И здесь вы можете увидеть различные лямбда-функции, которые вы можете иметь или не иметь, и вы можете начать создавать их сейчас. Еще раз, лямбда-функция – это своего рода приложение без сервера, так что если вы хотите думать об этом таким образом. Вам не нужно иметь сервер. Вам не нужно где-то иметь веб-сервер, написать полноценное веб-приложение, развернуть его и все в таком духе. Все эти вещи обрабатываются, и на самом деле вы создаете своего рода обработчик событий, который где-то живет в облаке. У этого есть URL, у которого есть определенный механизм для общения. И он будет сидеть там, и он будет слушать запросы. И как только эти запросы приходят с информацией об этих запросах, некотором контексте и некоторых происходящих событиях, тогда, когда эта информация входит в вашу функцию, вы можете обрабатывать ее по своему желанию или по мере необходимости. Так что давайте’ иди и посмотрим, как это выглядит. Я подойду к кнопке «Создать функцию». И есть пара разных вещей, которые мы можем сделать здесь. Мы можем создать один с нуля, что мы и сделаем сейчас. Мы рассмотрим чертежи в следующем уроке, потому что они очень, очень интересны и дают вам много готовых функций, которыми я всегда являюсь большим поклонником. Но в начале давайте продолжим и создадим один с нуля. Итак, давайте спустимся сюда, и мы дадим имя этой функции. И мы назовем это myHelloTutsPlusFunction. Теперь я просто собираюсь использовать это, потому что хочу, чтобы соглашение об именах было немного похоже на мой навык Alexa. Здесь вы обнаружите, что если вы создадите кучу лямбда-функций и кучу навыков, и вы дадите им все разные имена, вы забудете, какие из них вы пытаетесь вместе. Поэтому я просто хотел бы назвать их так, чтобы они были примерно одинаковыми, чтобы я знал, что я хочу указать на какую функцию. Тогда вы снова выберете время выполнения. В этом случае, помните, мы говорили об использовании Node.JS в этом случае, но вы можете использовать все виды других вещей. Вы можете использовать C # как часть .Net Core. Вы можете использовать Go или Java. Вы можете использовать Python. Таким образом, в принципе, у вас есть такое свободное правление, чтобы использовать любой из них, который вы хотите использовать. Так что в этом случае я просто оставлю это как 6.10. Вы можете обновить его до 8-й версии, если хотите использовать некоторые дополнительные функции JavaScript, которые были добавлены или поддерживаются в качестве части Node.JS, но это должно быть хорошо. Теперь, когда дело доходит до ролей, это в основном те роли, под которыми будет происходить выполнение этой функции. Есть некоторые действительно разные вещи в разрешении и вещи, которые вы можете сделать вместе с этим. Я не буду углубляться в это в этом конкретном курсе, но определенно кое-что, о чем вы можете узнать больше через некоторые ссылки на этой странице. Итак, в основном то, что я бы порекомендовал вам сделать в этот момент, потому что выбрал этот выпадающий список и сказал, что хочу создать собственную роль. Это откроет консоль управления IAM. И это позволит вам создать совершенно новую роль, и я настоятельно рекомендую вам создать эту базовую роль выполнения при создании новой политики ролей, имени политики. А затем просто нажмите «Разрешить», и он создаст эту новую роль в контексте этой функции. А потом собирается назначить эту роль именно этой функции, которую мы создаем с нуля. Теперь давайте продолжим и нажмем кнопку «Создать функцию». И затем это снова приведет нас к консоли разработчика. Теперь пара вещей, на которые стоит обратить внимание. Вверху справа находится АРН. Это уникальный идентификатор, специфичный для этой функции, к которому вам нужно будет обратиться, когда мы начнем связывать эти вещи вместе. Когда мы связываем наш навык с нашей функцией, просто чтобы вы знали, где он. И мы немного поговорим о некоторых инструментах здесь, в основном о разделе тестирования, как только мы начнем связывать наш навык с нашей функцией. Но мы вернемся к этому позже. Так что большинство вещей, которые вы увидите или с которыми придется иметь дело, будут в разделе дизайнеров, а затем раздел кода функции. Итак, давайте сначала посмотрим на раздел дизайнера. Теперь то, что вы видите здесь, это моя конкретная функция, myHelloTutsPlusFunction. И здесь вы можете определить, что будет вызывать эту функцию или что она слушает или что в конечном итоге будет взаимодействовать с этой функцией. Это может быть несколько вещей, но мы будем использовать только один в этом конкретном курсе. И затем, в конечном счете, то, что мы собираемся делать, мы в основном будем записывать в некоторые журналы. Что еще не так важно для нас в этом курсе, еще раз. Поэтому я должен добавить триггер, который будет взаимодействовать с этой функцией. И если вы посмотрите слева, есть несколько готовых триггеров. Так уж сложилось, что одним из них является набор навыков Алекса. Ну, я уже знаю, что это то, что я собираюсь использовать в этом курсе, потому что мы уже начали делать это на предыдущем уроке. Так что я добавлю это, как вы можете видеть здесь. Он требует настройки, но мы к этому вернемся. Теперь, когда мы перейдем к следующему разделу, как вы можете видеть, потому что я выбрал комплект Alexa Skills Kit, следующий раздел будет изменен. Если я вернусь сюда, к myHelloTutsPlusFunction вы увидите код функции. Так что это все зависит от контекста. Вы можете увидеть различную информацию о том, что вы выбрали. Поэтому, выбрав это, я могу прийти сюда и посмотреть на настройку моих триггеров. Теперь, чтобы это сработало, мне нужно рассказать свою функцию. Кто с точки зрения Alexa Skills Kit, какой уникальный идентификатор моего навыка будет взаимодействовать с этой функцией. И затем, в конечном счете, им придется сделать это в обратном направлении, а также я должен рассказать своим навыкам, с какой функцией он разговаривает. Итак, что я собираюсь сделать, так это то, что мне нужно получить подтверждение своего Skill ID. Поэтому, чтобы сделать это, я вернусь к своему мастерству. Я собираюсь вернуться к своим навыкам. И как вы можете видеть здесь, у меня это очень длинное, очень похожее на число или строковое значение, которое вы видели на моей лямбде. Я могу вернуться сюда под myHelloTutsPlus. И я нажму на эту маленькую иконку прямо здесь, которая скопирует ее в мой буфер обмена. И тогда я могу приехать сюда и вставить сюда этот идентификатор навыка. А потом однажды я Сделав это, я могу нажать кнопку Добавить. И теперь мне нужно убедиться. Как вы можете видеть здесь, в нем говорится, что есть несохраненные изменения, мне нужно пойти дальше и сохранить это. Так что это будет продолжаться и сохранить это. Теперь я выполнил все требования к конфигурации моего комплекта навыков. Вы можете видеть, что происходит, кто будет говорить с этим, я могу включить и удалить это и изменить его, если я хочу. Но теперь я собираюсь вернуться к своей реальной функции. И теперь это приведет меня к моему коду функции. Здесь я уже упоминал, что вы можете в значительной степени выполнить всю разработку для этого навыка и серверного приложения в своем браузере. Это довольно приличная среда для разработки текстовых редакторов для вашей лямбда-функции. Как вы можете видеть, я могу создавать папки и структуру здесь, в моей среде. Прямо сейчас у меня есть только один файл index.js, где находится точка входа в мой код. Итак, я могу определить, хочу ли я выполнять редактирование кода строки, я могу загрузить ZIP-файл, который мы сделаем позже. И мы можем также загрузить файл из Amazon S3, который был просто механизмом хранения в Amazon, в облако, и я мог бы пойти дальше и указать, где я хочу, чтобы он также получал Мой код оттуда. Еще раз я вижу свое время выполнения, я могу посмотреть и изменить это. И тогда я вижу своего обработчика. Это не то, с чем я собираюсь возиться, но просто чтобы понять, что это будет обработчик вашей конкретной лямбда-функции, где index будет именем файла. И .handler будет именем функции, которая будет выполнять обработку. Итак, как вы можете видеть, я в индексе. Здесь указывается js, а затем обработчик – это функция export.handler, которая будет выполнять обработку. Так что просто надо что-то иметь в виду. И затем, как только мы закончим, мы можем прийти сюда и начать играть с самой функцией. Сейчас я не буду этого делать, мы начнем очень медленно создавать это в контексте типа «привет», когда мы начнем собирать все эти вещи из набора навыков до самого пульта управления лямбда. Но я просто хотел показать вам различные функции здесь. Еще одна вещь. Как только вы начнете редактировать это и менять код и все такое, убедитесь, что вы постоянно делаете сохранения здесь, используя кнопку Сохранить. Потому что нет ничего хуже, чем написать кучу кода или внести кучу изменений, а затем забыть сохранить его и в конечном итоге потерять эту работу. Так что просто помните, сохраняйте рано, сохраняйте часто. Итак, это все, что я хотел показать вам на этом конкретном уроке. Что касается лямбда-функций в следующих парах уроков, мы собираемся закончить построение сценария «Привет, мир!». Таким образом, вы можете увидеть полную связь между навыком и лямбда-функцией

В следующих нескольких уроках мы будем работать над завершением и составлением базовых основ этого навыка Hello World Alexa и лямбда-функции. Итак, первое, что мы собираемся сделать на этом уроке, – это то, что мы собираемся собрать воедино некоторые основы навыка, которые могут оказаться полезными в процессе разработки. Итак, мы собираемся убедиться, что сначала определим имя вызова. Итак, как мы хотим назвать этот навык, когда мы общаемся с Алекса? Так что это все, что касается Open Tuts, или спросите Tuts +, как сделать x, y, z., Такого рода вещи. Так что мы просто скажем, что имя вызова будет привет. Вот что мы собираемся использовать, чтобы проверить это на следующих уроках. Итак, теперь у нас есть это имя вызова, то, что мы хотим сделать, мы хотим работать над намерениями. Итак, сейчас, как уже упоминалось, с тремя по умолчанию, и это нормально, но давайте продолжим и добавим немного шума. Итак, мы собираемся создать наше собственное намерение, и именно здесь у нас будет возможность либо создать ваше собственное пользовательское намерение, либо мы можем использовать существующие намерения из встроенной библиотеки. Так что это довольно интересно посмотреть, чтобы увидеть, к какому типу готовых намерений мы имеем доступ. Вещи о книгах, календарях, музыке, видео, погоде, всевозможных интересных вещах, которыми вы можете воспользоваться. Но я часто нахожу, что очень интересно пройтись по нашим собственным намерениям. Итак, что мы хотим, чтобы это намерение было? Ну, это похоже на то, что мы просим Алексу сделать для нас. Итак, когда мы Вы указали имя вызова, привет, что мы хотим от него сделать? Итак, у нас будет очень простое намерение, и мы просто будем называть это SayHello. Давайте продолжим и создадим это собственное намерение. Итак, теперь у нас есть намерение SayHello, и теперь нам представлен диалог для создания образцов высказываний, и что это за высказывание? Ну, подумайте об этом, намерение – это команда, которую мы хотим обработать на стороне сервера. Высказывание – это различные варианты языка, который вы хотите связать с этим намерением. Так что давайте говорить каждый раз, когда пользователь говорит «привет», я хочу связать это с намерением SayHello. И вы можете создать огромное количество этих высказываний, чтобы позволить Алексею понимать больше языка. Так что, возможно, сказать «привет» – это высказывание, которое станет частью SayHello. Так что давайте’ сделай это. Скажем привет, но это может быть не единственный. Может быть, вы говорите, привет, это другой вариант, что-то вроде этого. Таким образом, мы можем продолжать создавать различные высказывания, которые, когда Alexa обнаруживает эти разные словосочетания, связывают это с этим намерением SayHello. И затем это фактическое событие или команда, которую он собирается отправить нашей лямбда-функции для обработки. Поэтому я думаю, что это два хороших для начала. Поэтому каждый раз, когда мы просим наше приложение, которое является приветом, сказать «привет», мы собираемся выполнить намерение SayHello. Итак, теперь, когда у меня создано намерение SayHello, я могу начать определять свои слоты. Теперь запомните, слот – это своего рода способ ввести значение переменной в мои намерения, чтобы я мог дополнительно настроить это. Итак, скажем, что я хотел добавить в новый слот намерений, и мы будем называть это имя. И этот тип слота – это несколько разных способов, которыми мы можем указать, что это такое. Это имя, это дата, это авиакомпания, это все эти разные типы вещей, которые заранее созданы? И вы также можете создать свой собственный, если вы того пожелаете. Для чего-то вроде этого, когда мы говорим об имени человека, мне нравится использовать AMAZON.Person, но это только мои предпочтения. Я могу создать это как угодно, потому что это просто образец. Поэтому я хочу использовать этот слот в одном из своих высказываний, если я того захочу. То, как я это сделаю, это то, что я хочу сказать, другое высказывание здесь, чтобы сказать привет, и здесь я могу сделать открытые и закрытые фигурные скобки, и я могу указать, что это за слот. Так что теперь я могу сказать “привет” {имя}. Так что это все будут высказывания, которые будут связаны с моим намерением SayHello, так что я могу делать очень общие вещи, такие как сказать привет, сказать привет. Или я могу быть очень конкретным и могу сказать “привет” {имя}, или я могу сказать “привет” {имя}, просто так. Итак, теперь у нас есть пара различных вариантов этого, и что я хочу сделать, это в конечном итоге отправить это в мою лямбда-функцию для последующей обработки. Так что теперь у меня все это настроено здесь. Другой хорошей практикой при построении этой модели взаимодействия является периодическое сохранение на раннем этапе, сохранение часто. Поэтому, как только вы начнете создавать эти вызовы и намерения, будет хорошей идеей время от времени приходить сюда, чтобы нажать «Сохранить модель», а затем продолжить и закрыть маленькое всплывающее окно, которое показывает вам, что оно прошло успешно. Хорошо, теперь у нас есть намерение, у нас есть слот внутри этого намерения, у нас есть наши встроенные модули, мы указываем, какие типы слотов мы используем здесь, так что вы можете добавить их по своему усмотрению. И затем, после этого, вы также можете взглянуть на JSON Editor и посмотреть, как выглядит наша модель вызова. Наше имя для вызова – привет привет, вот наши намерения, вот наш SayHello. У нас есть один слот, который мы можем использовать, а затем несколько сэмплов, которые будут обучать Alexa взаимодействовать с нашим умением. Теперь вы можете войти в интерфейсы, еще раз, если вы хотите добавить немного аудио, видео, и тому подобное, вы можете начать играть с ними. Я не очень беспокоюсь об этом на данный момент. И теперь мы подошли к конечной точке, так что самый конец процесса формирования этих самых базовых навыков. Нам нужно сообщить умение, куда отправить свой запрос. И в этом случае мы собираемся использовать лямбда-функцию, но мне нужно знать навык для этой функции. Так что это уникальный идентификатор моего навыка, но теперь мне нужно указать уникальный идентификатор моих функций. Так что я могу вернуться к своей функции и подняться наверх, и, как вы можете видеть прямо здесь, есть большая, длинная строка. Вам нужно все это, вплоть до имени функции, так что я скопирую это. Я вернусь сюда и вставлю его в регион по умолчанию. Итак, вставьте это, и затем, когда все будет успешно заполнено, я могу сохранить конечные точки. И вот теперь у меня есть полностью созданная и действующая модель взаимодействия для моего навыка. Итак, последнее, что вы захотите сделать, прежде чем сможете использовать этот навык, – это построить модель. Так, мы создавали различные части модели, мы сохраняли ее, но теперь мы должны построить ее так, чтобы она действительно использовалась в качестве навыка. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. Мы создавали различные части модели, мы сохраняли ее, но теперь мы должны построить ее так, чтобы она действительно использовалась в качестве навыка. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. Мы создавали различные части модели, мы сохраняли ее, но теперь мы должны построить ее так, чтобы она действительно использовалась в качестве навыка. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. Мы сохраняли его, но теперь мы должны построить его так, чтобы он мог использоваться в качестве навыка. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. Мы сохраняли его, но теперь мы должны построить его так, чтобы он мог использоваться в качестве навыка. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. на самом деле можно использовать как навык. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. на самом деле можно использовать как навык. Итак, я собираюсь пойти дальше и нажать эту кнопку модели сборки. Это собирается начаться, может потребоваться несколько минут, чтобы фактически построить полностью. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. это может занять несколько минут, чтобы полностью построить. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. это может занять несколько минут, чтобы полностью построить. Но когда это будет сделано, эта небольшая анимация исчезнет, ​​и теперь мы сможем успешно использовать наш навык. Итак, как вы можете видеть здесь и сейчас, наша сборка прошла успешно. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции. То, что мы сейчас создали модель, чтобы на самом деле иметь возможность выполнить навык. Но прежде чем мы начнем делать это, я хочу переключиться и перейти к следующему уроку, где мы еще немного поговорим о лямбда-функции, которая у нас есть. А затем начните тестировать это, а затем проведите некоторое сквозное тестирование от нашего навыка вплоть до нашей лямбда-функции.

Теперь, когда у нас есть основы нашего Hello World или приветов, Alexa Skill позаботится об этом, пришло время немного изменить направление и немного взглянуть на нашу лямбда-функцию. Итак, теперь вернемся к лямбда-функции, как вы можете видеть здесь, у меня есть функция, выделенная сверху, и вот код ниже. Теперь это основной готовый обработчик, который появится, когда вы создадите новую функцию. Здесь действительно не так много всего происходит, и на самом деле я скажу вам, потому что мы собираемся изменить это немного позже, и когда вы увидите, что мы создадим полное приложение позже, подпись здесь будет выглядеть немного по-другому. Итак, эта версия совместима с Node JS, некоторыми из предыдущих версий Node JS. Так что это скорее обратно-совместимая версия. В то время как много версий, которые вы мы увидим сгенерированный некоторыми инструментами, и некоторые SDK будут иметь три параметра здесь в функции обработчика. Но сейчас мы просто разберемся с тем, что у нас здесь. Мы поговорим о более новых версиях в ближайшее время. Итак, у нас есть событие и у нас есть контекст. Итак, как вы можете видеть, я получаю информацию о произошедшем событии, а затем контекст, из которого это происходит. Таким образом, событие – это то, что было передано в эту функцию, чтобы иметь возможность что-то сделать, а затем контекст – это контекст этой функции, что мы хотим вернуть, что мы хотим отправить обратно, как мы хотим реагировать на подобные вещи. Итак, как вы можете видеть, здесь действительно ничего не происходит. Итак, как мы можем на самом деле использовать это и посмотреть, если это работает? Что ж, способ, которым мы это делаем, это настройка тестов, поэтому давайте продолжим и настроим быстрый тест. Так что, если я подойду сюда как бы вверху справа, где вы увидите, выберите тестовое событие и тестируйте. На самом деле, иногда возникает проблема с прокруткой вниз и попыткой выбрать это, на самом деле это не сработает. Так что, возможно, вам придется немного прокрутить. Это немного раздражает, но в конечном итоге это сработает. Итак, мы хотим настроить тестовые события, и я просто хочу быстро их создать. Итак, давайте создадим новое тестовое событие, теперь на самом деле здесь есть несколько шаблонов. Таким образом, вы можете создать кучу различных событий на основе шаблонов. Обычно, когда я начинаю работать с ними, я спускаюсь в самый низ под комментарием и выбираю Hello World в качестве моего шаблона. И мне нужно дать ему имя. Так что в этом случае Я просто назову это MyTestEvent. И тогда у вас есть тело здесь. Теперь эти тела действительно должны быть там. Если у вас нет тела, оно не позволит вам сохранить его. Итак, в основном, это то, что мы передаем. Мы передаем данные, связанные с ним. Поэтому, как только я это сделаю, у меня будет тестовое событие. Тело в данный момент не имеет большого значения, мы просто немного поиграем с этим. Мы продолжим и нажмем «создать», и как только я это сделаю, вы увидите, что в этом выпадающем меню у меня есть MyTestEvent, и для всех их, которые вы создаете, они появятся в этом небольшом выпадающем списке. и вы можете выбрать их. Так что теперь, что произойдет, если я нажму эту тестовую кнопку, она вызовет это событие для этой функции, а затем что-то произойдет. Итак, давайте посмотрим, что должно случиться. Давайте нажмем Test. Вы видите здесь, что результат выполнения успешен. Так случилось что-то хорошее. И вот фактический результат. Мы вернулись Привет из Ламды. Почему мы это получили? Ну, потому что в нашей функции мы указываем context.done (Привет из Lambda). Итак, мы хотим прийти сюда. И поэтому мы можем увидеть больше информации об этом. Таким образом, мы можем увидеть больше информации о том, сколько времени прошло, 6 миллисекунд, сколько ресурсов было настроено, идентификатор запроса, расчетная продолжительность. Так что здесь будет указано немного больше о вашем биллинге, а затем еще немного информации, которая была зарегистрирована из-за этой функции. Итак, как вы можете видеть, вот как мы собираемся протестировать нашу функцию. И вы можете пойти сюда и начать что-то менять, но в конечном итоге, то, к чему мы хотим добраться, – это точка, где мы можем выполнить наш навык Alexa, передать событие в нашу функцию и затем получить ответ. И затем, в конечном счете, мы ищем ответ, где Алекса на самом деле поговорит с нами. Итак, давайте посмотрим, как это работает от начала до конца. Теперь у меня настроена функция, она работает. И у меня есть настроенный навык, он живой. И оба они были осведомлены друг о друге, используя эти строки ARN. Мы поместили навык 1 в функцию, а затем функция перешла в навык. Так они смогут общаться друг с другом. Итак, давайте посмотрим, как это будет работать. Итак, давайте перейдем к тесту. И как только мы придем сюда, вы увидите, что по умолчанию тестирование отключено. Теперь, если вы забыли поставить, создайте конечную точку с той лямбда-функцией, которую я показал в предыдущем разделе, если вы нажмете на этот ползунок, он на самом деле выйдет из строя и скажет вам, что у вас нет настроенной конечной точки, поэтому вы должны это сделать с этим точка. Итак, давайте продолжим и включим это, так что это довольно круто. Так что это то, что вы должны сделать сейчас. В этой левой части, если вы выбрали Alexa Simulator, теперь я могу начать вводить команды, которые я обычно говорю. Или вы можете фактически дать этому веб-сайту доступ к вашему микрофону или к вашей камере, а затем вы можете говорить с ним взад и вперед, но вам не нужно делать это, если вы не хотите. Вы можете просто ввести здесь команды, и вы будете в основном общаться с Alexa. Так что вам не нужно сидеть один на один с Алекса, если вы не хотите, вы можете просто начать набирать текст там, вы можете вводить такие команды, как привет, и, как вы можете видеть здесь, я получу высокий отклик от Alexa. И если у вас включена громкость, вы услышите звук. Так что это довольно круто, так что, по сути, вы взаимодействуете взад-вперед. Так вот как на самом деле будет работать тестирование. Теперь запомните, наше имя вызова было Hello Tuts. Поэтому, если бы я хотел взаимодействовать со своим навыком Hello Tuts, мне нужно было бы сделать что-то вроде этого, спросить hello tuts, так что теперь я уточняю, каков вызов моего навыка. Итак, я говорю, попросите привет Татс сделать что-нибудь. И какие высказывания были связаны с моим намерением сказать привет? Я сказал что-то вроде, скажи привет. Теоретически, если бы я выполнил это прямо сейчас, Что случилось бы, Алекса проанализирует этот запрос. Было бы определить, что ему нужно использовать навык hello tuts. И что намерение сказать «привет» или описывается словами «привет». Он выяснит это и отправит данные в мое лямбда-выражение, и мы получим мою лямбда-функцию и вернемся к ответу. Итак, если бы я нажал Enter, сейчас посмотрим, что произойдет. Поэтому я говорю: «Привет!», «Привет!», «Здравствуйте!». Итак, здесь мы покажем вам то, что фактически было отправлено в качестве запроса, поэтому здесь есть много вещей, но если вы пойдете до самого конца, вы увидите запрос. Вы увидите запрос типа намерения. И он смог правильно проанализировать наш запрос, потому что он говорит: «Хорошо, мне нужно установить запрос о намерениях, который имеет имя сказать« привет ». Так что это правильно, это найти правильное намерение на основе нашего высказывания. И это то, что он посылает, но я не получаю ответ. Так что это кажется проблемой. Почему это? Ну, потому что, когда мы создали эту лямбда-функцию, мы указали, что будем использовать Alexa Skills Kit для отправки вещей, но это очень общий обработчик прямо здесь. Это не делает ничего конкретного, по крайней мере, в отношении Алекса. Все, что это делает, это отправляет обратно ответ, который является строкой Hello от lambda. И поскольку здесь мы не делаем никакой логики, потому что здесь отмечается особенное, все, что он делает, это возвращает строку и когда она возвращается сюда, Алекса не знает, как вернуть или сделать что-нибудь со строкой и почему это так? Потому что, как показано здесь, он ожидает вывода в формате JSON, он ожидает, что объект JSON обратно имеет относительно специфическую структуру, чтобы фактически сообщать Alexa, что делать или что говорить в этом случае. Итак, я приведу очень простой пример, чтобы показать вам, как это будет работать. Итак, прямо сейчас context.done говорит, что я закончил с этим запросом и хочу, чтобы вы вернули строку Hello из Lambda. Ну, я больше не хочу этого делать, потому что проблема в том, что Алекса ничего не может сделать с этой строкой. Ему нужен объект JSON. Итак, я добавлю очень простой объект JSON, специфичный для ответа на Alexa. И как вы можете видеть здесь, я собираюсь указать версию. Так что я могу создавать версии этих вещей, как и любой другой объект JSON. А потом, У меня есть пара свойств, которые будут здесь вложены, чтобы рассмотреть это. Итак, у меня есть ключ ответа с объектом выходной речи, что означает, что я говорю Алексе как часть этого ответа. Я хочу, чтобы вы выступили с речью как вывод простого текста и типов. На самом деле вы можете указать, как Алекса будет говорить, это может быть простой текст, это может быть шепотом. Есть все эти различные типы речевых модификаций, которые вы могли бы сделать, но это будет просто, и текст, на который я хочу ответить, – Alexa отвечает этим текстом, и я мог бы добавить сюда все, что захочу, поэтому мы хотим сказать привет , Итак, давайте сделаем ответ, Привет. Теперь помни, что я собираюсь сохранить это. И если вы хотите немного проверить это, вы все равно можете проверить это здесь в функции. Я ударю тест. И, как вы можете видеть, Я получаю успешный ответ. Это удалось, и я получил этот объект JSON. Хорошо, теперь, когда я сделал это и теперь вместо этого возвращаю объект JSON, давайте вернемся сюда в наш симулятор Alexa и попробуем это снова. Итак, давайте спросим привет привет, это наше умение сказать привет. И давайте продолжим и выполним это. И теперь, когда я выполняю это, я на самом деле возвращаю этот вывод JSON, и я получаю привет как текст. Итак, как вы можете видеть, если бы я сказал это Алексе, я бы получил этот ответ обратно. И она будет говорить со мной. Теперь вы также заметите, что я не делаю здесь ничего особенного, я просто говорю “привет” и не использую свои слоты, поскольку это касается соглашений об именах. Итак, на следующем уроке я

Теперь я знаю, что вы можете сказать, в этот момент вы можете сказать, ну, Дерек, это круто, я могу общаться с Алексе. Я могу создать эти намерения. У меня есть действительно классная лямбда-функция. И я могу получить ответ от этого навыка, который я сейчас создал, и иметь возможность взаимодействовать с Alexa. Но на данный момент это только одна вещь. И каждый раз он отвечает только одним и тем же ответом, просто этим Привет. Что если бы я хотел добавить дополнительные намерения? И если бы я вернулся и посмотрел на моего строителя, что насчет этого имени здесь? Так что у меня есть концепция слота в моих намерениях. Как мне это использовать? Что ж, на этом уроке я покажу вам, как уметь расширять свои навыки и свою лямбда-функцию, и, что более важно, справляться с дополнительными намерениями, а также с этими слотами. В настоящее время, как мы говорили ранее, когда работали над этим тестом, мы смогли отправить запрос нашей функции, а затем мы смогли обработать эту функцию. И причина, по которой мы смогли это сделать, заключается в том, что навык отправляет объект JSON в нашу функцию, а затем наша функция обрабатывает ответ, возвращающийся. Ну, я также могу обрабатывать входящие данные как часть этого запроса. И способ, которым мы это делаем, – доступ к некоторым свойствам, которые являются частью этого события, которое мне попадается. Итак, давайте посмотрим, как это выглядит. Ну, первое, что вы, вероятно, можете сделать, – это начать немного дразнить вещи здесь и иметь возможность взглянуть на сам запрос. Итак, что мы собираемся сделать, мы собираемся прийти сюда, и мы будем говорить, const intentObj или намерение, или как ты хочешь это назвать. Мы хотим быть в состоянии понять реальное намерение, которое встречается, и как мы это делаем? Ну, это часть объекта события, а частью этого объекта события является запрос. И как только мы получим этот запрос, мы также сможем разобраться и получить намерение. Теперь есть пара свойств, но мы начнем с этого. Итак, первое, что мы хотим сделать, это то, что мы хотим взглянуть и понять, в чем заключается цель. И в этом случае мы на самом деле имеем дело только с одним намерением, и это наше намерение сказать привет. Таким образом, в этот момент мы могли бы сказать что-то вроде if (intentObj.name ===), и на самом деле в этот момент мы можем начать действительно фантазировать с прописными и строчными буквами и всем прочим, но мы будем продолжать все довольно просто прямо сейчас. Мы просто собираемся сказать, Скажи привет. Мы собираемся проверить, является ли это именем нашего intentObj, и если это так, тогда давайте просто продолжим и сделаем это прямо здесь. И мы пойдем дальше и урежем это, и мы будем придерживаться этого здесь. И потом, если по какой-то причине это не так, мы отправим что-то еще и просто выплюнем то, что говорится. Таким образом, мы можем сделать что-то вроде этого. Мы вставим это сюда, и мы можем пойти дальше и немного отформатировать здесь. И мы скажем: извините, я не знаю, как справиться с этим, и тогда мы можем пойти дальше и вставить это намеренное имя здесь. Мы можем сказать, intentObj.name, намерение, что-то подобное в любом случае. Хорошо, теперь у нас есть немного настроек здесь. И теперь мы проверяем, что тип намерения здесь, и затем мы можем пойти дальше и разобраться с этим. Так что давайте’ иди и сохрани это. И после того, как мы сохранили это, мы вернемся к нашей среде тестирования навыков Alexa. И давайте просто продолжим и скажем, попросите привет привет сказать привет. И, как вы можете видеть, мы получили этот ответ, Привет. И причина, по которой мы это получили, заключается в том, что когда он отправляет запрос, как вы можете видеть здесь, он отправляет запрос типа IntentRequest. И затем здесь, мы можем видеть, что теперь у нас есть этот объект намерения. И тогда у него есть свойство name, и это SayHello. Итак, мы знаем это, и именно это мы использовали в нашей функции Lambda, чтобы иметь возможность взглянуть на название намерения. И вот как мы смогли определить это был SayHello. Так что теперь у нас здесь есть немного логики. И теперь, как вы видите, у нас есть такая концепция слотов. И теперь я хочу использовать это. Так что давайте’ иди и выбери это, чтобы мы могли настроить это немного. Так что теперь мы можем прийти сюда, и если это SayHello, мы можем проверить наличие слота. Таким образом, мы можем сказать, что const slotName === intentObj.slots.name, является фактическим самим слотом. И затем мы теперь, когда у нас есть это, мы можем немного проверить это. Мы можем сказать, если (slotName.value), поэтому мы можем проверить, существует ли что-то там. И если это так, то мы можем немного изменить это. Итак, давайте продолжим и создадим переменную здесь. Мы скажем, приветствие, и мы изначально установим это равным «Привет!». И поэтому, если это имеет значение, мы можем немного изменить его. Мы скажем приветствие, и мы добавим туда имя, которое было передано. И мы продолжим и отформатируем это. И мы перейдем к этому, slotName. ценность. Итак, теперь мы настраиваем наши приветствия. Таким образом, мы можем сказать: «Привет, Джон, или Дерек, или кого-то еще, чье имя. А если нет, то мы просто оставим это как Привет. И тогда мы можем изменить этот текст, чтобы быть нашим приветствием. Итак, давайте продолжим и сохраним это. Итак, теперь, как вы можете видеть здесь, мы вытаскиваем этот слот, это слот, который мы ищем. И теперь у нас есть приветствие по умолчанию. Мы можем сказать, если (slotName.value), поэтому, если у него есть значение, давайте продолжим и будем использовать это значение, а затем мы продолжим и отправим наше приветствие. Итак, вернемся к нашему тесту. А теперь я могу сказать: «Привет, Татс, сказать привет Дереку», и я пошлю это и отправлю. И теперь мы получаем некоторые настройки, Привет, Дерек. И еще раз, мы видим это, потому что в нашем намерении у нас есть слоты, и это имя. Таким образом, если бы он назывался как-то еще, например, приветствие, тогда это значение, этот ключ был бы приветствием, и тогда у нас были бы дополнительные данные здесь. И, как вы можете видеть, все идет хорошо, и мы можем обработать это на стороне функции Lambda. Теперь это действительно хорошо. И мы можем продолжать делать это, и мы можем продолжать добавлять в обработку разные намерения и разные слоты и тому подобное. Но по мере того, как ваши навыки становятся более креативными, а ваши функции лямбды – более интенсивными, возможно, нам нужно изучить другой вариант, который позволит нам сделать это гораздо более структурированным образом. И в следующих нескольких уроках я покажу вам, как это сделать, используя нечто, известное как Alexa SDK. и тогда у нас будут дополнительные данные здесь. И, как вы можете видеть, все идет хорошо, и мы можем обработать это на стороне функции Lambda. Теперь это действительно хорошо. И мы можем продолжать делать это, и мы можем продолжать добавлять в обработку разные намерения и разные слоты и тому подобное. Но по мере того, как ваши навыки становятся более креативными, а ваши функции лямбды – более интенсивными, возможно, нам нужно изучить другой вариант, который позволит нам сделать это гораздо более структурированным образом. И в следующих нескольких уроках я покажу вам, как это сделать, используя нечто, известное как Alexa SDK. и тогда у нас будут дополнительные данные здесь. И, как вы можете видеть, все идет хорошо, и мы можем обработать это на стороне функции Lambda. Теперь это действительно хорошо. И мы можем продолжать делать это, и мы можем продолжать добавлять в обработку разные намерения и разные слоты и тому подобное. Но по мере того, как ваши навыки становятся более креативными, а ваши функции лямбды – более интенсивными, возможно, нам нужно изучить другой вариант, который позволит нам сделать это гораздо более структурированным образом. И в следующих нескольких уроках я покажу вам, как это сделать, используя нечто, известное как Alexa SDK. И мы можем продолжать делать это, и мы можем продолжать добавлять в обработку разные намерения и разные слоты и тому подобное. Но по мере того, как ваши навыки становятся более креативными, а ваши функции лямбды – более интенсивными, возможно, нам нужно изучить другой вариант, который позволит нам сделать это гораздо более структурированным образом. И в следующих нескольких уроках я покажу вам, как это сделать, используя нечто, известное как Alexa SDK. И мы можем продолжать делать это, и мы можем продолжать добавлять в обработку разные намерения и разные слоты и тому подобное. Но по мере того, как ваши навыки становятся более креативными, а ваши функции лямбды – более интенсивными, возможно, нам нужно изучить другой вариант, который позволит нам сделать это гораздо более структурированным образом. И в следующих нескольких уроках я покажу вам, как это сделать, используя нечто, известное как Alexa SDK.

Хорошо, надеюсь, за последние несколько уроков вы немного познакомились хотя бы с процессом создания навыка Alexa и с тем, как создавать лямбда-функцию. И тогда сможете связать эти вещи вместе. Потому что теперь то, что мы собираемся сделать на следующих нескольких уроках, – это построить довольно интересный и в меру более сложный навык Alexa и лямбда-функцию, которые будут связаны с концепцией курсов Tuts +. И в принципе, идея здесь в том, что я хочу иметь возможность взаимодействовать с Alexa, чтобы сделать пару вещей. Первое, что я хочу сделать, – это получить новые курсы, которые можно найти на TutsPlus. Теперь я собираюсь выдумать это немного, но вы, очевидно, можете сделать это настолько сложным, насколько захотите. Но мы’ Я собираюсь сделать некоторые базовые вещи здесь и просто подготовить некоторые из этих курсов. Но вы увидите, как это выглядит чуть позже. Так что я хочу получить список новых курсов. Я хочу получить описание тизера или первую небольшую информацию, которую вы найдете на странице курсов Tuts. Я хочу добавить курс в список наблюдения, чтобы можно было отслеживать некоторые курсы, которые я хочу просматривать. И я хочу быть в состоянии найти и проверить, какие все курсы в настоящее время находятся в моем списке наблюдения. Так что это основная концепция того, что этот навык будет воплощать. Теперь вы, очевидно, можете добавить к этому и адаптировать его столько, сколько хотите, но мы собираемся начать с этого. И я так чувствую Это очень хорошая отправная точка, чтобы вы могли познакомить вас с концепциями, которые мы хотим использовать в оставшейся части этого курса. И затем для вас, чтобы иметь возможность повторно использовать любой другой навык, который вы хотите создать. Итак, давайте идти вперед и начать с самого начала. Мы собираемся начать с консоли разработчика Alexa Skills Kit, и мы хотим перейти к нашему списку навыков. И мы снова собираемся создать новый навык, и этот я просто буду называть TutsPlus. Так что это будет очень простой навык, который я хочу сказать Алексе, я хочу сказать, попросить TutsPlus получить новые курсы или что-то в этом роде. Итак, давайте продолжим и нажмите Далее. И я снова собираюсь придерживаться Custom, и мы создадим наш навык. А потом мы Я войду к нашему строителю здесь и еще раз мы сможем создать вызов. И я просто собираюсь сказать, что это стрижки, или вы можете называть это как хотите, тутс плюс или как угодно. Все, что вы хотите сделать, поэтому я буду держать это очень просто в иллюстративных целях. И мы просто будем использовать имя вызова TUTS. Теперь следующая вещь, которую мы хотим сделать, это то, что мы хотим создать некоторые намерения. И, как я упоминал ранее, мы действительно хотим начать с четырех, но вы можете добавить к ним столько, сколько захотите. Итак, мы собираемся начать с добавления намерения, и это будет пользовательское намерение, и это будет GetNewCourses. И мы создадим это пользовательское намерение. Теперь высказывания. Теперь, очевидно, вы можете определенно тренировать Алексу и тренировать навыки для обработки всевозможных высказываний, но мы можем сделать все довольно просто прямо сейчас. Таким образом, мы могли бы сказать, получить новые курсы. Может быть, мы просто скажем, что новые курсы будут еще одним. Может быть, вы даже можете сказать что-то новое, но я думаю, что эти два должны быть хорошими, чтобы начать. Таким образом, мы можем сказать, спрашивать TUTS GetNewCourses или задавать TUTS новые курсы, что-то вроде этого, я думаю, это должно быть хорошо. В этом случае, слоты намерения, я не думаю, что нам нужно на данный момент. На самом деле мы не просим ничего конкретного, но немного разберемся с этим. Итак, давайте продолжим и сохраним эту модель, и я думаю, что у нас все хорошо. Итак, давайте перейдем к другому намерению. И мы скажем, как насчет GetCourseTeaser, этого небольшого краткого описания в начале страницы, и мы еще немного рассмотрим это. И в этом случае мы можем сказать что-то вроде get teaser, а затем мы будем использовать слот. Итак, мы сделаем открывающие закрывающие скобки и просто сделаем Course_name, что-то вроде этого. И мы просто нажмем кнопку Добавить. И вы можете сделать что-то простое здесь, может быть, просто сделать, тизер для. И тогда мы могли бы также упомянуть здесь имя_курса. И, возможно, мы сделаем, может быть, тизер А потом еще раз мы будем использовать Course_name, как это. Поэтому я думаю, что это должно быть хорошо для этого конкретного намерения. Как вы можете видеть, он добавил сюда это название курса, поэтому нам нужно указать тип. Теперь, как правило, когда вы имеете дело с некой общей строкой или чем-то очень упрощенным, например, таким, где вы хотите указать слот, обычно лучше всего использовать поисковый запрос, потому что это более свободная форма. Вам не нужно указывать возможные значения, в то время как что-то вроде литерала или чего-то в этом роде, вы должны будете дать список приемлемых входных данных И в этом случае это может быть что угодно. Поэтому мы хотим оставить это как можно свободнее. Поэтому мы будем использовать SearchQuery. Итак, давайте продолжим и сохраним эту модель. Теперь мы можем взглянуть на новые курсы, послушать тизер курса. Теперь давайте добавим немного, где мы можем взаимодействовать со списком наблюдения. Мы хотим добавить курс в список наблюдения и хотим получить наш список наблюдения. Поэтому мы добавим новый и скажем AddToWatchList, вот так. Давайте создадим это намерение, и мы скажем добавить, еще раз мы будем использовать имя_курса. Скажите, добавьте название_курса, чтобы посмотреть список. И вы можете невольно добавить к этому как можно больше, но я думаю, что это довольно просто, я думаю, что мы придерживаемся этого. И затем еще раз для типа слота, мы просто снова будем использовать SearchQuery. Так что это будет добавить в список наблюдения. И, наконец, мы хотим получить весь список наблюдения и просто перечислить все. Итак, давайте продолжим и добавим еще одно намерение. Мы просто назовем этот GetWatchList и этот, нам не понадобятся слоты. В этом случае все будет довольно просто, мы просто скажем получить список наблюдения. Или мы могли бы даже сказать что-то вроде, получить мой список наблюдения. Таким образом, как вы можете видеть, вы можете продолжать добавлять к этим высказываниям по мере необходимости. Но я думаю, что снова эти два должны быть в порядке, и нам не нужен слот для намерений в этом. Я думаю, что мы должны быть хорошими, мы не просим ничего конкретного, мы просто хотим целый список. Итак, давайте продолжим и сохраним эту модель. Теперь, как вы знаете, мы Здесь почти все готово. Мы могли бы попытаться построить модель, но на данный момент она не сработает, потому что у нас нет конечной точки. Нам нужно иметь возможность публиковать эти запросы в конечной точке, которой у нас еще нет, и о которой мы начнем говорить о том, как мы собираемся создать ее на следующем уроке.

Итак, теперь, когда мы создали наш навык, мы хотим создать нашу связанную лямбда-функцию. Итак, давайте переключимся на нашу Lambda Management Console. И мы собираемся пойти дальше и создать новую функцию. И вы могли бы написать Blueprints на этом, но я все еще фанат идти на пустом месте, и давайте придерживаться этого. И я покажу вам еще один хитрый трюк, который вы можете использовать, используя Alexa SDK, чтобы в действительности вы смогли достичь того же уровня, что и вы, если бы вы использовали один из чертежей. Итак, еще раз, нам нужно создать функцию. Нам нужно дать ему имя. Так что я буду называть это, myTutsPlusSkill. Я снова буду использовать Node.js, так что я просто оставлю здесь значение по умолчанию. И снова мы собираемся создать новую пользовательскую роль, как мы делали раньше. И разреши’ иди сюда и оставь это как lambda_basic_execution. Создайте новую Ролевую Политику. Нажмите кнопку «Разрешить», и теперь она предварительно заполнит все это для вас. И тогда мы снова нажмем «Создать функцию». Итак, мы снова в нашем конструкторе. И снова, наш триггер будет исходить из нашего комплекта Alexa Skills, и нам нужно выполнить эту настройку. Итак, давайте сейчас разберемся со всеми этими настройками, чтобы мы могли сосредоточиться на реальном коде в следующих уроках. Итак, нам нужен наш идентификатор навыка, поэтому мы вернемся к нашему навыку. И еще раз, мы можем прийти к нашему списку навыков. И в нашем списке навыков, как вы можете видеть здесь, здесь наш ID. Давайте просто нажмем эту маленькую ссылку здесь, чтобы скопировать ее. И тогда мы можем вернуться сюда, мы добавим сюда этот идентификатор навыка и нажмите «Добавить». Теперь добавьте, что у нас есть эта настройка, помните, вам нужно нажать кнопку Сохранить, чтобы убедиться, что все сохранено правильно. И как только там написано, что вы спасены, вам следует быть на этой стороне. Теперь мы также сделаем то же самое в другом направлении. Таким образом, нам нужно получить здесь значение ARN для нашей функции. Итак, давайте продолжим и скопируем это. Мы вернемся к нашему навыку. Убедитесь, что мы переходим к правильному. И в этом случае это для TutsPlus. И затем мы подойдем к нашей конечной точке и убедимся, что вставим это в нашу область по умолчанию, как мы делали раньше. Так что теперь мы продолжим и сохраним наши конечные точки. Итак, на данный момент, просто чтобы убедиться, что все настроено правильно, мы можем вернуться к нашему Invocation, и мы можем пойти дальше и щелкнуть Build Model. Теперь, если все прошло правильно, это займет всего несколько минут. И он даст вам уведомление, когда он будет завершен. Если вы что-то забыли или неправильно настроили какой-либо из ваших слотов или свои намерения. Или, может быть, вы не сохранили свою конечную точку, когда поместили ее туда, вы получите список ошибок здесь справа. И по большей части они несколько полезны, особенно если это связано с неправильной настройкой имени слота или чем-то в этом роде. Но если вы просто последуете этому руководству здесь, вы сможете развить свои навыки без особых проблем. И мы видим, что наша сборка успешна. Итак, теперь мы правильно настроили наш навык на стороне Alexa. Мы также создали нашу функцию на стороне лямбды, и мы в значительной степени готовы к работе. И если вы помните ранее в этом курсе, мы нажимали на саму функцию и писали здесь код вручную. Теперь вы можете сделать это. Мы могли бы продолжать следовать этой парадигме в этой части курса. Но, как я уже упоминал ранее, вам понадобится много времени, чтобы написать много операторов if else, а также проверить объекты намерений, поиск слотов и тому подобное, чтобы определить, что вы хотите делать. Но есть и лучший способ. На следующем уроке я покажу вам, как начать создавать лямбда-функцию с нуля, используя Alexa SDK. Что действительно покажет вам, как улучшить способ написания этих лямбда-функций, особенно когда вы взаимодействуете с Alexa Skills. и мы писали здесь код вручную. Теперь вы можете сделать это. Мы могли бы продолжать следовать этой парадигме в этой части курса. Но, как я уже упоминал ранее, вам понадобится много времени, чтобы написать много операторов if else, а также проверить объекты намерений, поиск слотов и тому подобное, чтобы определить, что вы хотите делать. Но есть и лучший способ. На следующем уроке я покажу вам, как начать создавать лямбда-функцию с нуля, используя Alexa SDK. Что действительно покажет вам, как улучшить способ написания этих лямбда-функций, особенно когда вы взаимодействуете с Alexa Skills. и мы писали здесь код вручную. Теперь вы можете сделать это. Мы могли бы продолжать следовать этой парадигме в этой части курса. Но, как я уже упоминал ранее, вам понадобится много времени, чтобы написать много операторов if else, а также проверить объекты намерений, поиск слотов и тому подобное, чтобы определить, что вы хотите делать. Но есть и лучший способ. На следующем уроке я покажу вам, как начать создавать лямбда-функцию с нуля, используя Alexa SDK. Что действительно покажет вам, как улучшить способ написания этих лямбда-функций, особенно когда вы взаимодействуете с Alexa Skills. и проверять объекты намерений, и искать слоты, и тому подобное, чтобы определить, что вы хотите делать. Но есть и лучший способ. На следующем уроке я покажу вам, как начать создавать лямбда-функцию с нуля, используя Alexa SDK. Что действительно покажет вам, как улучшить способ написания этих лямбда-функций, особенно когда вы взаимодействуете с Alexa Skills. и проверять объекты намерений, и искать слоты, и тому подобное, чтобы определить, что вы хотите делать. Но есть и лучший способ. На следующем уроке я покажу вам, как начать создавать лямбда-функцию с нуля, используя Alexa SDK. Что действительно покажет вам, как улучшить способ написания этих лямбда-функций, особенно когда вы взаимодействуете с Alexa Skills.

Как я упоминал в предыдущем уроке, вы можете выполнять всю свою работу по разработке прямо здесь, в этом редакторе, в своем браузере. И по большей части, это делает достойную работу. Но я чувствую, что мы можем сделать лучше. И лучший способ, который я хочу показать вам, это использовать Alexa-SDK. Теперь это документация для Alexa-SDK на веб-сайте NPM по адресу npmjs.com. Вы можете найти дополнительную документацию по GitHub, поэтому есть несколько мест, где вы можете найти информацию об этом SDK. И хотя здесь много документации, мы не будем проходить через все это. Мы коснемся в основном основ, как его настроить, как использовать его базовые части, которые будут полезны для вас на ранних этапах развития вашего навыка и в развитии лямбда-функции. И тогда, очевидно, Вы можете вернуться и обратиться к этой документации и улучшить текущую лямбда-функцию и свои навыки по своему усмотрению. Одним из наиболее важных моментов, на которые следует обратить внимание, является руководство по настройке. Здесь действительно много всего, это лишь говорит о том, что все, что вам нужно сделать, это запустить установку NPM. Но прежде чем вы сможете это сделать, у вас должен быть проект для его установки. Итак, первое, что я собираюсь сделать, – это направиться к своему доверенному терминалу. И, как вы можете видеть, я запускаю на своем рабочем столе внутри совершенно новую папку под названием tutsplus и вижу, что там сейчас ничего нет. Итак, я хочу создать новое приложение Node.js, в которое мы затем можем установить Alexa-SDK. Таким образом, мы просто запускаем команду npm init, и мы проведем небольшое интервью, чтобы задать нам несколько вопросов о нашем проекте и о том, как мы хотим его изначально настроить. Итак, как вы можете видеть здесь, по умолчанию используется имя каталога, в котором я использую имя моего пакета и tutsplus, все в порядке, версия 1.0, это нормально. Описание, вы можете добавить его, если хотите, я оставлю это пустым. Точка входа (index.js), мы будем использовать index.js, так что это хорошо. Тестовая команда, git-репозиторий, ключевые слова, автор и лицензия, очевидно, вы можете изменить любую из тех вещей, которые вам нужны, но я буду придерживаться всех настроек по умолчанию. Это нормально? По умолчанию да, это так. Итак, давайте посмотрим, что у нас так далеко. Так что я’ Я собираюсь использовать редактор кода Visual Studio. И я просто открою этот текущий каталог, чтобы мы могли увидеть, что у нас есть. Итак, все, что у нас есть, – это файл package.json, который был создан для нас с использованием всей той информации, которую мы ввели, или только значений по умолчанию, которые были в предыдущем интервью. Так что это хорошее место для начала. Так что теперь, когда у нас есть это, мы можем начать включать alexa-sdk в наши проекты. Мы пойдем дальше и выясним это. Теперь я могу сказать, что npm install –save, поэтому я могу сохранить его в этот файл package.json, и я хочу установить alexa-sdk. Так что теперь он отправится туда на npm и получит не только alexa-sdk, но и любые другие необходимые зависимости этой библиотеки, а также установит их все в мой каталог node_modules. Так что теперь давайте Давайте посмотрим, как выглядит наш проект. Так что теперь у нас также есть блокировка пакета, так что вам не нужно об этом беспокоиться. Но теперь у нас есть node_modules, так как вы можете видеть, что у нас их несколько, потому что для установки alexa-sdk было несколько требований, и это нормально, это не имеет большого значения. И вы также можете увидеть в вашем файле package.json под зависимостями, мы сейчас говорим, что будем использовать alexa-sdk. Хорошо, мы действительно хорошо ладим. Итак, давайте идти дальше и двигаться дальше, и, как вы можете видеть, мы хотим начать с основ. И в этом случае мы хотим установить точку входа нашего файла nodeindex.js в качестве того обработчика, который мы видели во всех предыдущих уроках, когда имели дело с нашей лямбда-функцией. Итак, давайте скопируем это, скопируем, и мы Я зайду в Visual Studio Code, и мы пойдем дальше и создадим новый файл. И это будет index.js, и мы просто добавим это сюда. Итак, теперь, когда у нас есть это, как вы можете видеть, мы собираемся пойти дальше и потребовать, и ввести alexa-sdk. И у нас здесь есть export.handler, как мы видели в нашей лямбда-функции по умолчанию. Но, как я уже говорил, у нас есть три параметра. Теперь, событие, контекст и обратный вызов, который является своего рода новой эволюцией типа Node.js 6.0, 8.0 и выше. Это структура, которую вы увидите, чтобы иметь возможность использовать эту функцию обратного вызова. И теперь единственное, что вам действительно нужно сделать, – это добавить идентификатор нашего приложения из наших навыков в Alexa. Итак, еще раз мы вернемся сюда, мы можем перейти к нашим навыкам, и мы также будем копировать этот идентификатор, так что иди и скопировать это. Вернитесь к Visual Studio Code и давайте продолжим и добавим это здесь в виде строки, поэтому нам нужно убедиться, что мы выводим кавычки вот так. А теперь alexa.execute, так что давайте продолжим и сохраним это. Итак, теперь у нас есть базовая структура нашей лямбда-функции, готовая к работе. У нас есть наш package.json. У нас есть наши node_modules. У нас есть наш index.js, мы в основном готовы к работе. Но как мы можем получить все это в нашей Lambda Management Console? Как мы можем заменить то, что у нас здесь, на этот код? Что ж, мы собираемся сделать это, загрузив ZIP-файл. Итак, давайте перейдем к Finder или куда-нибудь еще, куда вы хотите пойти, и мы хотим связать наш текущий код с нашими node_modules и продолжить и загрузить его. Так вот, что я собираюсь сделать, я Я собираюсь выделить index.js и node_modules, и я просто собираюсь сжать. Вы можете использовать командную строку, вы можете делать все, что хотите, вы можете называть это как хотите, это не имеет значения. Но archive.zip будет работать просто отлично. Итак, мы придем сюда и скажем, что хотим загрузить zip-файл, нажмем кнопку «Загрузить», и мы попадем в наши каталоги. Итак, я собираюсь перейти на свой рабочий стол и убедиться, что я иду в правильный каталог, я возьму archive.zip, открою это, и я собираюсь сохранить его. И это скажет вам, что для файлов размером более 10 мегабайт, к которым мы не доберемся, но если вы хотите, чтобы, если мы собирались начать расти еще больше, вы могли бы рассмотреть использование трех, но в этом случае, я думаю, мы должны быть просто в порядке. Так что, как только вы сделаете это, вы Вы начнете видеть, что наш файл в нашей структуре слишком велик, чтобы включить редактирование встроенного кода. Что хорошо, и нам не нужно делать это здесь. Но было бы неплохо в какой-то момент, если бы вы смогли увидеть это здесь. Но, к сожалению, вам придется переключаться между вашим редактором кода и вашим лямбда-дизайнером, но это нормально. Хорошо, теперь у нас почти все готово к работе. У нас есть наши навыки Алекса, готовые пойти сюда. У нас есть готовая лямбда-функция. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. действительно нужно быть в состоянии сделать это здесь. Но было бы неплохо в какой-то момент, если бы вы смогли увидеть это здесь. Но, к сожалению, вам придется переключаться между вашим редактором кода и вашим лямбда-дизайнером, но это нормально. Хорошо, теперь у нас почти все готово к работе. У нас есть наши навыки Алекса, готовые пойти сюда. У нас есть готовая лямбда-функция. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. действительно нужно быть в состоянии сделать это здесь. Но было бы неплохо в какой-то момент, если бы вы смогли увидеть это здесь. Но, к сожалению, вам придется переключаться между вашим редактором кода и вашим лямбда-дизайнером, но это нормально. Хорошо, теперь у нас почти все готово к работе. У нас есть наши навыки Алекса, готовые пойти сюда. У нас есть готовая лямбда-функция. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. Нам придется снова и снова переключаться между вашим редактором кода и вашим лямбда-дизайнером, но это нормально. Хорошо, теперь у нас почти все готово к работе. У нас есть наши навыки Алекса, готовые пойти сюда. У нас есть готовая лямбда-функция. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. Нам придется снова и снова переключаться между вашим редактором кода и вашим лямбда-дизайнером, но это нормально. Хорошо, теперь у нас почти все готово к работе. У нас есть наши навыки Алекса, готовые пойти сюда. У нас есть готовая лямбда-функция. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках. Но, к сожалению, мы пока ничего не делаем. Итак, на следующем уроке я хочу показать вам основной процесс добавления обработчиков намерений, обработчиков событий в нашу совершенно новую лямбда-функцию здесь. Без необходимости добавлять кучу вещей, которые вы видели на предыдущих уроках.

Теперь, когда у нас настроены основные функции, пришло время начать знакомство с концепцией обработчиков или функций обработчиков. И способ, которым это работает, если вы прокрутите немного вниз мимо того места, где мы были в документации для Alexa SDK. Вы увидите реализацию функций-обработчиков, и основной процесс заключается в следующем. Мы собираемся реализовать обработчик или коллекцию обработчиков. И затем, как только мы их создадим, мы собираемся инициализировать Alexa SDK с ними. Так что на самом деле, если вы прокрутите немного дальше, вы увидите очень хороший пример, где мы создаем константу обработчиков. И здесь мы собираемся создать отображение того, что намерение идет через функцию. И в рамках этой функции мы сможем делать все, что захотим. Мы можем вернуть запрос, чтобы Алекса что-то сказала, чтобы задать вопрос, попросить дополнительную информацию, и что у вас. И это то, что делают эти заявления Emit. И первое свойство здесь, или первый аргумент, скажем, в двоеточии, определяет разные вещи, которые мы можем сделать, чтобы Алекса сделала. Так что скажите – это просто говорит: я хочу, чтобы вы сказали, что я передаю в качестве второго параметра, и тогда это заканчивается этим взаимодействием. Но есть и другие типы взаимодействий, которые вы можете сделать. И они задокументированы немного дальше, и мы вернемся к этому чуть позже. Так что это основы, которые мы хотим установить. Поэтому, как только мы создали наши обработчики, мы можем зарегистрировать эти обработчики в том коде обработчика, с которого мы начали ранее. Итак, давайте просто скопировать это прямо здесь. А потом мы перенесем это в код Visual Studio. И затем, что мы хотим сделать выше этого, мы хотим пойти дальше и выбросить это сюда. Теперь, очевидно, у нас нет запроса на запуск, намерения приветствовать мир или чего-то подобного. Но у нас есть запрос или намерение под названием GetNewCourses. Теперь давайте просто начнем с этого. Поэтому мы скажем GetNewCourses, потому что мы можем это проверить. И нам нужен только один, нам пока не нужен этот дополнительный обработчик. И тогда, как наша функция, что мы хотим сделать? Ну, мы просто хотим хотя бы получить ответ. Итак, мы собираемся сказать, скажем, еще раз, что даст Алексе знать, что она должна сообщить или говорить, чтобы сказать что-то, что скажет здесь, чтобы сказать здесь. А потом после этого вроде как взаимодействие с пользователем завершается. Так что мы будем делать здесь, мы хочу сказать, что это отличные новые курсы. И мы действительно начнем возвращать курсы на другом уроке, но сейчас давайте просто начнем и начнем. Поэтому мы сохраним это. Теперь, как вы можете видеть, как только мы это сделаем, теперь нам нужно использовать метод registerhandlers для передачи этих обработчиков в Alexa теперь, когда он у нас готов. Итак, мы собираемся прийти сюда после нашей строки appId. Мы скажем alexa.registerHandlers, и мы просто передадим такие обработчики. Итак, мы добавим точку с запятой и нажмем «Сохранить». Это та часть, где вещи становятся немного утомительными, потому что теперь нам нужно повторно загрузить этот обработчик прямо здесь или этот код прямо здесь. Так что мы просто вернемся в наш каталог здесь, мы продолжим и удалим наш старый архив. И мы продолжим и создадим новый архив, поэтому мы сжимаем эти два элемента. Тогда мы можем вернуться к нашей лямбде прямо здесь. И мы просто снова отправим файл zip, просто так. И мы обязательно найдем правильный архив прямо здесь. Мы откроем это и нажмем кнопку «Сохранить». Так что пойдем дальше и загрузим нашу новую лямбда-функцию. И если бы вы изменили какой-либо из узловых модулей или зависимостей, они бы тоже пошли вверх. Поэтому, как только это будет сохранено и готово к работе, мы сможем отправить запрос нашей функции. Итак, давайте продолжим и попробуем это. Итак, из этого комплекта разработчика навыков давайте перейдем к тестированию, как мы делали раньше. И если ваш не включен, вы можете пойти дальше и включить его. И в этот момент мы просто скажем, просит Tuts получить новые курсы, как этот. Так что давайте’ Идем дальше и нажимаем на эту просьбу. И, как вы видите, мы получаем ответ, это отличные новые курсы. Так что это довольно хорошо. Мы смогли увидеть, что мы отправляем через наш GetNewCourses, и мы только что отправили базовый ответ из нашего кода. Так что это довольно хорошо, но это, опять же, немного ограничивает. Так что да, мы можем добавить дополнительные обработчики и тому подобное. Но теперь мы хотим привнести немного интереса и что-то более интересное в наш навык. Итак, на следующем уроке я покажу вам код установки, откуда поступают данные. И часть кода, который вы сможете просто вставить в свое приложение, чтобы помочь вам начать работу немного быстрее. Мы смогли увидеть, что мы отправляем через наш GetNewCourses, и мы только что отправили базовый ответ из нашего кода. Так что это довольно хорошо, но это, опять же, немного ограничивает. Так что да, мы можем добавить дополнительные обработчики и тому подобное. Но теперь мы хотим привнести немного интереса и что-то более интересное в наш навык. Итак, на следующем уроке я покажу вам код установки, откуда поступают данные. И часть кода, который вы сможете просто вставить в свое приложение, чтобы помочь вам начать работу немного быстрее. Мы смогли увидеть, что мы отправляем через наш GetNewCourses, и мы только что отправили базовый ответ из нашего кода. Так что это довольно хорошо, но это, опять же, немного ограничивает. Так что да, мы можем добавить дополнительные обработчики и тому подобное. Но теперь мы хотим привнести немного интереса и что-то более интересное в наш навык. Итак, на следующем уроке я покажу вам код установки, откуда поступают данные. И часть кода, который вы сможете просто вставить в свое приложение, чтобы помочь вам начать работу немного быстрее. Но теперь мы хотим привнести немного интереса и что-то более интересное в наш навык. Итак, на следующем уроке я покажу вам код установки, откуда поступают данные. И часть кода, который вы сможете просто вставить в свое приложение, чтобы помочь вам начать работу немного быстрее. Но теперь мы хотим привнести немного интереса и что-то более интересное в наш навык. Итак, на следующем уроке я покажу вам код установки, откуда поступают данные. И часть кода, который вы сможете просто вставить в свое приложение, чтобы помочь вам начать работу немного быстрее.

Итак, как я упоминал ранее, основная концепция этого навыка заключается в том, чтобы иметь возможность получить текущий список новых курсов по Tuts + или, по крайней мере, самые последние курсы по Tuts +, которые вы можете найти, перейдя на tutsplus.com. Зайдите под Курсы и выберите Код. И то, что вы получите, в основном то, что вы видите здесь. Теперь, очевидно, в зависимости от того, когда вы смотрите этот курс, этот список может сильно отличаться, и это нормально. Но что касается основ, то, что мы хотим сделать, это получить курсы, которые перечислены на этой главной странице, с их названиями, описаниями тизеров, с их автором. И вы можете добавить больше вещей, вы можете добавить в дату публикации, вы можете добавить в продолжительность, как долго они, такие вещи, как это. И вы можете даже пойти дальше, добавив полное описание, которое вы найдете, если вы нажмете на каждый из этих курсов. Теперь я создам пространство для этого, и я не собираюсь делать это для этого конкретного курса, но вы определенно можете довести его до этого уровня, если хотите улучшить его самостоятельно. Итак, теперь мы хотим смоделировать эту идею или тот факт, что у нас есть список этих новых курсов или последних курсов от Tuts +. И мы хотим принять эту концепцию и добавить ее в наше мастерство. Таким образом, мы собираемся сделать это, перейдя в Visual Studio Code. И нам нужно место, чтобы иметь возможность хранить эту информацию. Итак, список наблюдения будет очень важен для нашего курса, поэтому мы собираемся создать его сейчас. Который будет переменной, потому что мы Я собираюсь добавлять к нему периодически. Поэтому мы просто создадим переменную watchList и инициализируем ее пустым массивом. И тогда нам понадобятся несколько курсов. Как я уже говорил ранее, я собираюсь немного обдумать это, но вы могли бы делать вызовы API в разных местах. Вы можете делать скрининг экрана или что-то еще, что вы хотите сделать, чтобы иметь возможность получить эту информацию и сделать ее доступной своим умением. Итак, я собираюсь вставить довольно большой набор курсов, в основном информацию, которую я взял с этой страницы. Как видите, у меня есть массив курсов, который содержит несколько объектов, и у каждого объекта есть ряд свойств. Таким образом, у него есть имя, тизер, описание, которое является своего рода местом, если вы хотите добавить это, автор, а также продолжительность. Итак, в основном, то, что я дал вам сейчас, это список объектов JSON, который в основном представляет там главную страницу курса Tuts + code. Теперь мы можем что-то сделать с этим. Итак, следующее, что мы собираемся начать, – это то, что мы начнем использовать эти данные. Мы будем использовать переменную watchList. Мы собираемся использовать этот список курсов, чтобы иметь возможность заполнить некоторые обработчики. А именно GetNewCourses, GetCourseTeaser, а также AddToWatchList и GetWatchList. А потом любой другой вид обработчиков, о которых вы могли подумать. Вот что мы собираемся потратить на оставшуюся часть этого курса. Итак, следующее, что мы собираемся начать, – это то, что мы начнем использовать эти данные. Мы будем использовать переменную watchList. Мы собираемся использовать этот список курсов, чтобы иметь возможность заполнить некоторые обработчики. А именно GetNewCourses, GetCourseTeaser, а также AddToWatchList и GetWatchList. А потом любой другой вид обработчиков, о которых вы могли подумать. Вот что мы собираемся потратить на оставшуюся часть этого курса. Итак, следующее, что мы собираемся начать, – это то, что мы начнем использовать эти данные. Мы будем использовать переменную watchList. Мы собираемся использовать этот список курсов, чтобы иметь возможность заполнить некоторые обработчики. А именно GetNewCourses, GetCourseTeaser, а также AddToWatchList и GetWatchList. А потом любой другой вид обработчиков, о которых вы могли подумать. Вот что мы собираемся потратить на оставшуюся часть этого курса.

Теперь, когда у нас есть готовые к использованию макетные данные, давайте продолжим и заполним наш первый обработчик – обработчик GetNewCourses. Итак, мы хотим немного изменить это. Итак, первое, что мы хотим сделать, – это начать с создания своего рода ответного заполнителя, который мы в итоге вернем. А затем мы продолжим и получим все необходимые данные из нашего списка курсов и добавим их в этот ответ по мере необходимости. Итак, давайте продолжим и создадим новую переменную, и это будет coursesResponse. И мы собираемся установить это равным, Вот наши новые курсы, которые я вижу. Что-то такое. И теперь мы хотим разобраться во всех этих курсах и извлечь информацию, которую мы хотим сообщить конечному пользователю, а именно название курса, а также его автора. И вы можете добавить дополнительные данные, если хотите. Итак, мы собираемся сказать, что const newCourses будет равен курсам, и мы будем использовать нашу функцию карты. И здесь, мы будем говорить для каждого курса, что я хочу вернуть немного информации здесь, поэтому мы сделаем некоторое форматирование. Сначала я хочу вернуть название курса, поэтому я скажу «c.name» и затем также верну автора, c.author, просто так. А потом, как только я верну все это, или когда я получу все это, я хочу присоединиться к ним со всеми запятыми. Потому что когда Алекса на самом деле говорит, вы заметите, что вам действительно нужно обращать внимание на то, где вы ставите запятые и где вы ставите различные знаки препинания. Потому что она будет использовать их как паузы, как мы с тобой в обычной речи. Таким образом, чтобы сделать это, мы просто будем использовать функцию соединения, и мы пойдем дальше и присоединимся к этому через запятую, просто так. Итак, теперь у нас есть новые Курсы, которые я хочу использовать, и теперь я хочу добавить это в мои курсы. Поэтому я просто скажу: «Ответы на курсы», и я добавлю новые курсы в конце этого. Итак, теперь у меня есть мой ответ, я построил ответ, который я хочу вернуть, или что я хочу, чтобы Алекса сказала, и как я могу заставить ее сказать это? Ну, я использую функцию this.emit, которую мы видели раньше. Итак, я скажу this.emit, а затем мы просто собираемся рассказать, поэтому мы просто даем информацию, и я хочу использовать coursesResponse. Так что мы пойдем дальше и сохраним это. Так что это основная функция того, что мы хотим сделать. Мы получаем курсы, мы соединяем их в хороший ответ с приличной пунктуацией, и тогда мы попросим Алексу сказать это. Мы попросим ее рассказать конечному пользователю. Итак, давайте продолжим и убедимся, что все сохранено. Теперь нам нужно загрузить все. Итак, еще раз, мы сделаем, и я сэкономлю вам время и энергию, и я просто сделаю это. И я вернусь, когда мы будем готовы. Хорошо, теперь вы видите, что я вернулся сюда к своей лямбда-функции. Я загрузил и сохранил свой код. Теперь я вернусь к экзамену здесь и еще раз скажу: попросите, чтобы Татс прошел новые курсы. И если все было сделано правильно, мы должны получить довольно длинный список всех курсов, которые мы получили. И как вы можете видеть здесь, мы видим наш ответ, вот новые курсы, которые я вижу. Угловые основы Дэн Уэлман и все другие курсы, включая их авторов, перечисленных здесь. И еще раз, Alexa скажет это конечному пользователю, и это будет своего рода началом взаимодействия с конечным пользователем. Так что это довольно мило. Теперь я могу получить весь список, но он довольно длинный. И что мне делать, если я хочу узнать немного больше о конкретном курсе? Возможно я хочу знать немного больше об Основах Angular. Ну, вот тогда и придет следующий обработчик, где мы собираемся получить описание тизера, чтобы получить немного больше информации.

Теперь, когда мы можем получить полный список новых курсов, по крайней мере, с названием и автором, мы можем захотеть получить немного больше информации. И поэтому, как я уже говорил ранее, мы хотим создать намерение, которое даст нам тизер конкретного курса, который мы собираемся выбрать. Теперь, способ, которым мы собираемся определить это, мы собираемся сказать, что мы хотим получить тизер, а затем, независимо от названия курса. Но может быть несколько сложно запомнить полное название курса. Поэтому вместо того, чтобы сделать это, мы собираемся указать часть названия курса. И тогда мы просто выполним проверку, основываясь на том, начинается ли название курса с высказывания или имени слота, которое пользователь использует в качестве ввода. И вот как мы будем это диктовать. Очевидно, вы можете немного улучшить эту логику, если хотите, но с этого мы и начнем, и вы можете перейти на следующий уровень, если захотите. Если вы помните пару уроков назад, мы собираемся сейчас создать обработчик для намерения, известного как GetCourseTeaser. И затем еще раз мы собираемся указать функцию, а затем эта функция – то, где мы собираемся дать нашу логику. Теперь вы можете делать все возможные варианты этого. Я дам вам одну реализацию, и вы можете смело изменять и улучшать ее или адаптировать к вашим конкретным потребностям. Так что в этом случае я собираюсь начать с получения объекта намерения, чтобы я мог начать разбирать его на части и получать разные его части. Итак, я хочу сказать, что const intentObj будет равен, а затем еще раз вы скажете this.event.request. намерение. Итак, теперь у меня есть намерение, я могу получить имя, если захочу, хотя оно мне и не нужно, но я собираюсь использовать его, чтобы получить значения слотов, как я делал раньше. Итак, теперь я хочу выполнить поиск по списку курсов и отфильтровать их, основываясь на проверке, начинается ли имя или начинается ли значение, которое я передаю. в моем слоте имени курса. Таким образом, способ, которым мы собираемся сделать это, мы будем говорить const, и мы фактически сделаем это в виде списка. Мы скажем selectedCourses из-за того, как работает этот фильтр. Итак, мы собираемся сказать курс selectedCourses = курсы. И тогда мы собираемся сделать функцию фильтра. И затем здесь мы будем говорить функцию (с). А потом, мы можем вернуть те курсы, которые на самом деле следуют, или попасть на нашу проверку здесь. Так что я собираюсь сказать, вернуть курс или c.name. Теперь запомните, мы будем иметь дело только с началом этого, поэтому мы увидим, что название начинается с. Но прежде чем мы сможем это сделать, одна из вещей, в которой мы хотим быть уверенными, – это когда значения передаются от нашего навыка к нашей лямбда-функции. Большинство из них, и на самом деле большинство в моем опыте игры с этим и тестирования их, они встречаются в нижнем регистре. Так что не всегда есть прописные и строчные буквы, большинство вещей преобразуются в строчные. Так что для того, чтобы действительно сделать эту проверку правильно, мы скажем .toLowerCase. И тогда мы можем сказать, начинается с, а затем мы можем передать эти значения слота. Итак, мы можем сказать намерение, поэтому давайте возьмем наш объект намерения. Мы можем сказать, слоты, и затем вспомните, как мы назвали наш слот, и наш навык был на самом деле course_name И затем мы должны иметь возможность получить это значение, и еще раз просто для того, чтобы быть последовательными, мы собираемся .toLowerCase это тоже. Таким образом, мы знаем, что сравниваем со строчными буквами с обеих сторон. И то, что поступает из нашего слота, и то, что уже существует в наших курсах. Так что просто чтобы покрыть эти основы. Итак, это значение, которое мы хотим вернуть. Итак, еще раз, этот фильтр будет возвращать список, так что выбранные курсы могут иметь несколько значений, хотя в нашем конкретном случае я не верю, что какое-либо из имен на самом деле схожи в самом начале. Поэтому мы не должны получать несколько результатов здесь. Но то, что мы можем сделать, это как только мы получили наши выбранные курсы, мы можем немного проверить и затем отправить ответ конечным пользователям. Так что в этом случае мы можем сказать, если (selectedCourses.length == 0). Таким образом, это будет означать, что мы попросили курс или название курса, который на самом деле не существует. Так что эта функция фильтра не соответствовала ничему, поэтому ничего не вернулось, так что, возможно, мы просто отправим милое небольшое сообщение конечному пользователю. Мы еще раз расскажем, а также немного отформатируем. Мы скажем что-то вроде: извините, я не смог найти курс. И тогда мы пойдем дальше и передадим все, что указано в названии этого слота. Итак, мы скажем slots.course_name.value, так что тут же мы вернемся обратно, извините, я не смог найти курс, независимо от того, что просил пользователь. Но теперь, если мы получили что-то, значит, мы получили хотя бы один результат. Теперь, если бы мы получили несколько результатов, мы могли бы справиться с этим немного по-другому, но в этом случае я просто собираюсь использовать первый, который вернулся. А потом иди и получи этот конкретный тизер. Итак, мы скажем const course = selectedCourses, и мы просто возьмем первый. И теперь у нас есть определенный курс, и теперь мы можем пойти дальше и создать наш ответ. Итак, мы собираемся сделать в эмиссии. Опять же, мы просто будем использовать сообщение, а потом я скажу, с небольшим форматированием тизера для, и в этом случае мы добавим имя. Таким образом, мы назовем course.name by и добавим в текст автора еще раз: course.author выглядит следующим образом. А потом мы просто пойдем и выбросим тизер сюда. Скажи конечно. Тизер просто так. Хорошо, теперь мы можем немного рассмотреть это, чтобы убедиться, что мы все на одной странице. Мы собираемся использовать намерение GetCourseTeaser. И затем, как только мы это сделаем, мы получим объект намерения. И затем мы будем использовать фильтр, чтобы просмотреть начало всех имен в нашем списке курсов и посмотреть, какие из них начинаются с названия курса, которое мы передаем из нашего навыка. И затем, если выбранные курсы, потому что фильтр возвращает список, если эта длина результата равна 0, тогда мы просто ответим что-то вроде: извините, я не смог найти то, что вы просили. Но если мы найдем что-то, по крайней мере, одно, то мы просто возьмем первое, которое соответствует. А потом мы продолжим и ответим тизером для этого конкретного курса этого автора следующим образом, а затем вернем тизер. И что’ будет основным обработчиком для GetCourseTeaser. Теперь вместо того, чтобы смотреть, как я иду туда-сюда и загружать все подобные вещи, я просто собираюсь пройтись и завершить оставшиеся функции или обработчики, которые нам нужны для оставшихся целей. А затем мы вернемся и проведем полное окончательное тестирование, получая все новые курсы, получая тизер курса, а затем взаимодействуя со списком наблюдения. Итак, давайте продолжим и продолжим работу с нашими списками наблюдения. а затем взаимодействовать со списком наблюдения. Итак, давайте продолжим и продолжим работу с нашими списками наблюдения. а затем взаимодействовать со списком наблюдения. Итак, давайте продолжим и продолжим работу с нашими списками наблюдения.

Теперь, когда мы можем получить список наших новых курсов, а также получить немного дополнительной информации, получив тизер для конкретного курса, теперь мы хотим иметь возможность пройти курс и добавить его в список наблюдения. Чтобы мы могли напомнить, что нам было интересно посмотреть этот курс позже, добавив их в список наблюдения. Теперь запомните, ранее мы добавляли в эту переменную пустой массив watchList. Теперь следует обратить внимание на то, что, поскольку это очень упрощенно и это очень простой пример, мы просто храним это в этом конкретном экземпляре нашей лямбда-функции. Теперь, если вам нужно, и важно помнить, что это нигде не сохраняется, мы не записываем это на диск, оно не сохраняется нигде, кроме как в этом сеансе. Так что, если вы должны были изменить этот индекс. JS файл и перезагрузите, вы потеряете все, что хранится в этой конкретной функции. Так что просто помните, что в среде производственного уровня вы захотите сохранить это где-нибудь в базе данных. Возможно, вы захотите позвонить в веб-службу, чтобы сохранить эту информацию где-нибудь. Это всего лишь пример, но такой, чтобы вы могли видеть, как можно хранить информацию и впоследствии получать ее довольно простым способом. Итак, давайте продолжим и создадим здесь другой обработчик, и помните, что этот будет для операции, известной как AddToWatchList. Итак, мы собираемся создать еще одну функцию, и теперь мы можем выполнять все наши операции здесь. Итак, мы собираемся сделать что-то, по крайней мере, относительно того, что мы делали раньше. Мы собираемся пойти дальше и получить наш объект намерения. Тогда мы’ Я собираюсь установить это в this.event.request.intent. Итак, еще раз я могу получить к нему доступ относительно легко, а затем оттуда я хочу еще раз найти конкретный курс, который я хочу использовать. Итак, еще раз я собираюсь использовать некоторые аналогичные функции. Теперь вы, очевидно, можете взять кое-что из этого и преобразовать это в другую функцию, чтобы вы не копировали и не вставляли, как я делаю здесь. Но я оставлю это в качестве упражнения, чтобы вы могли немного улучшить его и сделать код немного чище. Так что теперь мы собираемся пройти эти выбранные курсы, и еще раз мы скажем, если мы на самом деле тоже скопируем это. У нас здесь будет похожая часть функциональности, и еще раз, мы скажем что-то относительно похожее здесь. Мы скажем, извините, Я не мог найти курс, если его там не было. Но в этом случае, если он был там, то мы собираемся получить первый, аналогично тому, что мы делали раньше для получения тизера, но мы хотим сделать пару операций здесь. Теперь я хочу пройти этот курс и сохранить его в нашем списке наблюдения. И затем я также хочу сообщить конечному пользователю, что мы смогли сохранить его. Чтобы мы смогли поместить его в список наблюдения, чтобы вы могли позже получить список курсов, которые включены в этот список наблюдения, чтобы вы могли вспомнить, на какие из них вы хотели обратить внимание. Итак, теперь, когда у нас есть этот курс, мы просто пойдем в наш список наблюдения, и мы будем использовать функцию push, и мы собираемся вставить этот курс в список наблюдения. Но вы можете сказать себе, что произойдет, если я постоянно буду просить добавить один и тот же курс в список наблюдения? Затем мы собираемся вставить его туда несколько раз и сделать кучу дубликатов, так что, возможно, мы не хотим этого делать. Так что давайте немного умнее об этом. Так что теперь, когда у нас есть этот конкретный курс, я могу теперь сказать, если, и я могу зайти в свой список наблюдения, и я говорю, watchList.indexOf, и я могу искать индекс этого курса, так что я могу попытаться найти его где-нибудь в там. Если он не существует, то мы получим индекс обычно -1, поэтому он будет меньше 0. Поэтому я могу сказать, если & lt; 0, тогда мы пойдем дальше и добавим его в наш список наблюдения. Так что это немного умнее, но, может быть, мы хотим что-то сделать, если это где-то найдется. Так что, если он найден там, тогда функция indexOf здесь вернется к indexOf, который основан на нуле, где он существует в watchList. Так что, если это так, то я просто скажу пользователю, используя функцию emit, я скажу (‘: tell’). И мы скажем, что курс $ {course.name} от $ {course.author) уже существует в вашем списке наблюдения. Таким образом, мы просто немного более четко скажем, почему мы не добавили его, чтобы пользователь знал, что он уже добавил его в список наблюдения, поэтому мы не собираемся его читать, это уже здесь. Итак, теперь мы сделали это немного здесь, и это хорошо, но что произойдет, если мы сделаем это там? Затем мы хотим сообщить конечному пользователю, что мы добавили его в список наблюдения. Итак, давайте продолжим и возьмем этот последний, который мы скопировали и вставили ранее, и мы просто добавим это после того, как мы добавили это в список наблюдения, и мы просто скажем, что курс $ {course.name} от $ {course.author) был добавлен в ваш список наблюдения , Просто так. Хорошо, это довольно упрощенно, поэтому еще раз для этого конкретного обработчика, мы собираемся получить объект намерения. Мы пройдем и попытаемся найти курс, который начинается с того, какое имя курса указано пользователем. Еще раз, помните, что это будет список или массив. Мы проверим, равна ли длина выбранных курсов нулю. В этом случае мы не нашли ни одного курса, соответствующего запросу, поэтому мы скажем, извините, я не смог найти этот курс. Но если мы найдем что-то, мы будем использовать первый, первый в списке результатов, и затем мы хотим убедиться, что этот курс еще не существует в списке наблюдения. Итак, мы собираемся проверить индекс этого конкретного курса в списке наблюдения. И если индекс & lt; 0, как я уже сказал, обычно отрицательный, то есть его там еще нет. Итак, мы собираемся поместить его в список наблюдения, а затем мы сообщим конечному пользователю, что курс $ {course.name} от $ {course.author) был добавлен в ваш список наблюдения. Но если по какой-то причине он там уже существует, мы хотим, чтобы конечный пользователь знал, поэтому мы собираемся сказать, что курс $ {course.name} $ $ course.author} уже существует в вашем списке наблюдения , Это довольно упрощенно, и снова вы можете сделать это так, как вам хочется. Но я думаю, что это должно просто доказать, что мы мы можем взять информацию о конкретном курсе, о котором мы хотели бы узнать больше. И мы смогли взять его и добавить в список наблюдения, чтобы потом напомнить себе, что это было то, что нас очень интересовало.

Теперь пришло время завершить наши обработчики, добавив последний обработчик для нашего намерения, которое позволит нам получить список наблюдения. Таким образом, мы можем просмотреть или прослушать все курсы, которые были добавлены в список наблюдения в этом конкретном сеансе. Таким образом, чтобы сделать это, мы будем следовать тому же процессу. Мы собираемся добавить новый обработчик для намерения GetWatchList. Мы создадим функцию для этого. И тогда этот будет относительно упрощенным. Итак, мы продолжим и скажем if (watchList.length == 0), поэтому в этом случае, если в списке наблюдения ничего нет, мы просто отправим здесь сообщение. И мы скажем конечному пользователю, что в данный момент в вашем списке наблюдения нет курсов. Просто так, все так просто. Так что там ничего нет, тогда мы хотим, чтобы конечный пользователь знал, что это s пусто, и вам нужно что-то добавить к нему. И наконец, если есть, ну, если есть хотя бы один курс, а затем несколько, мы хотим, чтобы они как-то соединили их вместе, аналогично тому, как мы делали обработчик намерений получить новые курсы. Мы хотим сделать что-то похожее в любом случае. И мы начнем с создания ответа, по крайней мере, очень простого ответа здесь. Поэтому мы будем называть это watchListResponse, который изначально будет. Вот курсы в вашем списке наблюдения. Так что это будет начало этого. Теперь нам нужно идти вперед и получить все курсы, которые там есть. Итак, мы скажем watchListCourses, это будет равно, мы пойдем в наш список наблюдения, и на этот раз мы будем использовать функцию карты. Так что мы не хотим всего, мы просто хотим получить только несколько кусочков информации. И обычно это будет название курса и автора, аналогично тому, что мы делали раньше. Итак, мы просто скажем, c.name, поэтому название этого курса, а затем мы снова добавим сюда автора, c.author. И затем, как только мы это сделаем, мы снова будем использовать соединение. Потому что мы хотим использовать знаки препинания, чтобы они звучали естественно, когда Алекса возвращает их нам. Итак, мы собираемся присоединиться к этому с запятой. Итак, теперь у нас есть этот список всех курсов, которые есть в нашем списке. И затем мы хотим добавить это к нашему ответу в списке наблюдения. Итак, мы скажем, watchListResponse + = watchListCourses. Так что мы будем объединять эти вещи вместе. И мы просто сделаем выброс, чтобы мы могли отправить ответ, сказать. И в этом случае мы просто отправлю обратно весь список наблюдения. Все довольно просто. Мы проверим, что длина списка наблюдения не равна нулю. И если это так, мы просто скажем, что в данный момент в вашем списке наблюдения нет курсов. Но если там что-то есть, то мы собираемся отформатировать или выстроить этот ответ. Вот курсы в вашем списке наблюдения. Мы будем использовать функцию карты, чтобы иметь возможность получать только те части информации, которые мы хотим использовать. Теперь еще раз, вы можете добавлять новые вещи здесь, добавлять разные вещи здесь, возможно, добавить продолжительность здесь. Так что я добавил здесь продолжительность для вас. Вы можете использовать это, если хотите. И затем, как только мы получим этот список курсов наблюдения, мы добавим его в конец нашего watchListResponse и просто отправим его обратно конечному пользователю. Итак, на данный момент у вас есть четыре довольно простых обработчика намерений: GetNewCourses, GetCourseTeaser, AddToWatchList и GetWatchList. И на следующем уроке мы пройдем через процесс небольшого сквозного тестирования. Таким образом, вы можете увидеть, как выглядит полное взаимодействие с вашим навыком, когда Alexa возвращается к своей лямбда-функции.

Итак, на данный момент я сжал или сжал мой index.js и каталог моих узловых модулей и загрузил их обратно в мою Lambda Management Console. Так что у него есть самый последний и лучший код, который теперь имеет все обработчики для моих намерений. Итак, теперь я вернулся в Amazon Alexa, в наш тестовый интерфейс здесь. И теперь я могу начать взаимодействовать с Alexa, используя наши навыки. Итак, еще раз, помните, я могу сказать, попросите Tuts получить новые курсы. И мы должны получить этот длинный список курсов, как вы видите здесь, и это хорошо. Таким образом, вы можете увидеть входные данные, которые отправляются нашей функции, а затем ответ или выходные данные, которые мы получаем. Итак, скажем по какой-то причине, я хотел взглянуть на один из них, и я хотел добавить их в свой список наблюдения. Но прежде чем я это сделал, Я хотел бы узнать немного больше о конкретном курсе здесь. Допустим, я хотел получить тизер. Я мог бы сказать, попросить Tuts, чтобы получить тизер, что называется Learn PHP. Это где-то в списке, так что давайте посмотрим. И я вижу, хорошо, тизер для Learn PHP для WordPress выглядит следующим образом. WordPress делает это легко, и вы можете увидеть информацию о тизере, найденную на веб-сайте Tuts +. Так что это круто. Так что да, я думаю, это звучит довольно интересно. Почему бы мне не добавить это в свой список наблюдения на потом? Поэтому, прежде чем я это сделаю, может быть, я хочу посмотреть, что у меня сейчас есть в моем списке наблюдения? Я давно не смотрел на это. Так что я могу, скажем, попросить Татса получить список наблюдения. Итак, теперь я вижу, что на данный момент в моем списке наблюдения нет курсов, что точно. Но теперь я хочу добавить что-то в этот список. Я хочу добавить тот, который начинается с Learn PHP для WordPress. Итак, давайте продолжим и скажем, попросите tuts добавить Learn PHP для просмотра списка. Итак, отправляя это прямо сейчас, я хочу сказать, что курс «Изучение PHP для WordPress» Рэйчел Макколлин был добавлен в ваш список наблюдения. Теперь, если все работает правильно, и я делаю то же самое, и прошу вас добавить учить php в список наблюдения, я должен получить ответ, чтобы сказать, что он уже существует в моем списке наблюдения. Что абсолютно верно. И здесь, вероятно, есть еще один, на который я действительно хочу обратить внимание. Итак, мы собираемся сказать, попросить Татса добавить Создать бесплатный веб-сайт для просмотра списка. Потому что это звучит как хороший тоже. Конечно, это от этого крутого парня по имени Дерек Дженсен. Так что теперь у нас есть пара вещей в нашем списке наблюдения. Но давай Идем дальше и вернем этот список, так что мы можем быть уверены. Спросите Tuts, чтобы получить список наблюдения. Так что теперь мы должны увидеть, что прямо сейчас, вот что находится в моем списке наблюдения, изучение PHP для WordPress, а также создание бесплатного веб-сайта с помощью страниц GitHub. Итак, теперь, как вы можете видеть, мы смогли создать навык, используя Alexa SDK и Alexa Skills Kit, для создания этого совершенно нового навыка. Используя веб-интерфейс на стороне Alexa, мы смогли зайти в консоль управления Lambda и создать совершенно новую функцию Lambda с кодом, который мы написали с нуля, с небольшой помощью нашего друга, Alexa SDK. И мы смогли связать эти две вещи вместе, чтобы создать довольно классное приложение, где мы теперь можем взаимодействовать с Alexa, чтобы иметь возможность запрашивать некоторую информацию из Tuts +, чтобы иметь возможность получать список новых курсов, Посмотрите их немного, получите дополнительную информацию, а затем добавьте их в список наблюдения. Так что теперь я знаю, какие из них я хочу увидеть и, возможно, какие у меня есть. И теперь вы можете увидеть основной процесс создания навыка, а затем добавить обработчики намерений в свои функции Lambda.

Я хотел бы воспользоваться этой возможностью, чтобы поблагодарить вас за то, что присоединились ко мне в этом путешествии в мир создания навыков Alexa. Теперь я знаю, что иногда бывает довольно пугающе видеть множество таких устройств на устройствах с поддержкой Alexa, от ваших ноутбуков до компьютеров, от часов до Echoes и других устройств. Но единственное, что вам действительно нужно понять, – это основная концепция того, что там происходит, и то, что вы можете сделать для улучшения этой функциональности, действительно довольно просто. Поэтому, прежде чем я отпущу тебя, я хочу оставить тебе немного информации. В некоторых других местах вы можете провести дополнительные исследования, чтобы продолжить совершенствование не только приложения, созданного вами в этом курсе, но и других приложений, которые вам еще предстоит придумать. Одна из вещей, на которую я действительно хочу указать вам, и мы немного поработали над этим в этом курсе, это документация Alexa-SDK. По крайней мере, то, что можно найти здесь на npmjs, содержит много действительно полезной информации о различных вещах, которые вы можете делать с этим Alexa-SDK. Мы многое сделали с помощью функции emit, и в основном мы просто использовали параметр tell в начале, но есть так много разных вещей, которые вы можете сделать. Вы можете задавать вопросы, которые вы можете задать для получения дополнительной информации, и есть еще много вещей. Это очень богатая экосистема способов общения с Alexa, что вы действительно только царапаете поверхность. Так что есть еще много вещей, с которыми вы можете поиграть и узнать больше. Я также настоятельно рекомендую вам проводить намного больше времени на сайте Amazon Alexa, под developer.amazon.com. Вы можете перейти на этот сайт. Мы говорили об этом немного кратко в начале курса, но если вы уже пойдете в раздел обучения здесь, наверху, есть много действительно полезной информации, чтобы узнать больше о том, как использовать набор навыков Alexa. От вебинаров до учебных курсов и руководств, а также мероприятий и учебных пособий, здесь действительно много информации. Я настоятельно рекомендую вам потратить некоторое время здесь и узнать больше о тонкостях взаимодействия, которое вы и ваши пользователи можете использовать с Alexa. Потому что есть так много возможностей и так много вариантов для вас, чтобы действительно сделать привлекательное приложение с вашим навыком Alexa. И, конечно же, наконец, вы можете в любое время перейти к Tuts + и взглянуть на все учебники Amazon Alexa, которые у нас есть в настоящее время. И если у вас появятся другие идеи и вы захотите узнать больше, пожалуйста, дайте нам знать, и мы будем рады помочь вам любым возможным способом. Итак, еще раз, меня зовут Дерек Дженсен, и я не могу дождаться, чтобы увидеть вас в следующий раз.

To report this post you need to login first.