Статьи

Как создать викторину для Amazon Echo за час

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

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

Amazon Echo и Alexa, голосовая служба, которая его поддерживает, являются одними из первых примеров этой новой технологии.

В этом руководстве мы будем использовать Alexa Skills Kit , AWS Lambda и некоторый исходный код шаблона от Amazon, чтобы создать игру-викторину, в которую можно играть, используя устройство Amazon Echo или любое устройство с поддержкой Alexa, такое как Amazon Fire TV, Echo Точка или Амазонка.

После завершения урока вы получите хорошее базовое представление о создании новых навыков для Alexa и будете готовы принять участие в изучении нового рубежа голосового взаимодействия с пользователями.

Умение Alexa — голосовое приложение Alexa — состоит из двух частей:

  • Навык , определенный на портале разработчиков Amazon.   Это то, что связывает все это, связывая фразы, которые пользователь говорит для взаимодействия с игрой (например, «запускать игры для оленей»), с логикой приложения.
  • Веб-сервис, который вызывается всякий раз, когда пользователь дает команду навыку. Служба может работать на любом защищенном веб-сервере, который отвечает API на основе JSON.

В этом руководстве мы запустим веб-сервис на AWS Lambda, сервисе, выполняющем код в ответ на события, что избавит разработчика от необходимости поддерживать сервер. Lambda также легко связывается с комплектом Alexa Skills, что делает его отличным инструментом для запуска кода для Alexa Skills.

Мы реализуем функциональность сервера в виде модуля Node.js, поэтому для завершения урока вам понадобится базовое понимание JavaScript. Опыт работы с Node.js является плюсом, но не обязательным условием для прохождения урока.

Давайте начнем строить игру, настроив функцию AWS Lambda для запуска ее бизнес-логики.

Чтобы использовать Lambda, вам сначала потребуется учетная запись Amazon Web Services (AWS).

Если у вас уже есть учетная запись, нажмите « Войти в консоль» в правом верхнем углу страницы, чтобы начать.

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

Зарегистрируйте аккаунт AWS

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

После завершения регистрации и входа в консоль AWS вы можете активировать Lambda для своей учетной записи.

Сначала проверьте правый верхний угол страницы, чтобы убедиться, что вы используете регион Восток США (Северная Вирджиния) .

Затем в списке сервисов выберите Lambda :

Выберите лямбда

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

Нажмите Начать сейчас .

Начните с AWS Lambda

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

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

Пропустить экран выбора проекта

Следующим шагом мастера является « Настройка функции »:

Настроить функцию

Введите некоторую информацию о вашей новой лямбда-функции:

Введите некоторую информацию о лямбда-функции
  • Имя : выберите описательное имя для функции. Это имя не является тем, которое вы покажете пользователям Alexa, поэтому вам не нужно беспокоиться о том, чтобы сделать его уникальным вне вашей учетной записи Lambda. Просто придумайте что-нибудь описательное, что поможет вам распознать функцию в вашей консоли AWS Lambda. В этом примере мы пойдем с MyTriviaGame , но вы можете выбрать что угодно.
  • Описание : это поле не является обязательным и используется для документирования вашей работы. Вы можете ввести что-то вроде «Моя первая игра пустяков», если хотите.
  • Runtime : язык сервера, используемый для запуска вашего кода. AWS Lambda поддерживает Node.js, Java и Python. В этом уроке мы будем использовать Node.js.

Далее на странице вы увидите редактор для ввода кода функции.

Прежде чем мы перейдем к нему, прокрутите вниз и настройте остальные параметры:

Настройте функцию обработчика и роль IAM
  • Обработчик : укажите функцию JavaScript, которую Lambda должна вызывать при запуске вашего кода, в формате <JavaScript file name>.<function name> . При использовании встроенного редактора код сохраняется как index.js . И, как мы скоро увидим, функция обработчика в викторине называется handler . Итак, чтобы использовать эту функцию, введите index.handler .
  • Роль : роль безопасности IAM, используемая при запуске функции Lambda. Выберите « Основная роль выполнения » в раскрывающемся списке, чтобы создать новую роль. Если вы ранее использовали Lambda, у вас может быть роль lambda_basic_execution . В этом случае вы можете использовать существующий.

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

Настройка роли IAM

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

Затем, с готовой конфигурацией, давайте вставим код.

При определении лямбда-функции вы можете либо написать свой код во встроенном редакторе прямо в интерфейсе Amazon Lambda, либо загрузить его в виде zip-файла. Встроенный редактор в настоящее время ограничен размером 20 КБ, поэтому для больших функций или если вам нужно разделить код на несколько файлов (например, если вы используете библиотеки), подход с использованием zip-файла — это то, что нужно.

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

Скопируйте исходный код из примера умения Amazon «Reindeer Games» и вставьте его в редактор кода. Reindeer Games — это полная игра-викторина, которую вы можете свободно использовать в качестве шаблона для своей игры.

Вставьте код для лямбда-функции

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

Код JavaScript начинается со структуры данных ( строки 18-265 в исходном коде шаблона), которая содержит вопросы для игры викторины. Каждый вопрос о пустяках состоит из вопроса и массива, по крайней мере, с четырьмя опциями: правильный ответ сопровождается, по крайней мере, тремя неправильными:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * When editing your questions pay attention to your punctuation.
 * Make sure the first answer is the correct one.
 */
var questions = [
    {
        «Reindeer have very thick coats, how many hairs per square inch do they have?»: [
            «13,000»,
            «1,200»,
            «5,000»,
            «700»,
            «1,000»,
            «120,000»
        ]
    },
    {
        «The 1964 classic Rudolph The Red Nosed Reindeer was filmed in:»: [
            «Japan»,
            «United States»,
            «Finland»,
            «Germany»
        ]
    },
    
    // …
];

При настройке викторины замените вопросы своими: добавьте не менее 20, но желательно больше. Довольно хорошим числом будет 100 вопросов. Также помните, что правильный ответ всегда на первом месте.

Затем, после вопросов, в строках 267-305 вы найдете функцию-обработчик, которую мы указали на предыдущем шаге. Всякий раз, когда Alexa Skills Kit отправляет запрос в функцию Lambda, вызывается эта функция- handler .

Функция принимает два параметра:

  • event будет содержать объект с информацией о запросе.
  • context будет представлять состояние лямбда-функции (например, сколько времени осталось до истечения времени ожидания функции). Параметр context также используется для отправки ответа вызывающей стороне.

Для получения дополнительной информации см. Документацию AWS Lambda .

Вот как выглядит функция:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Route the incoming request based on type (LaunchRequest, IntentRequest,
// etc.) The JSON body of the request is provided in the event parameter.
exports.handler = function (event, context) {
    try {
        console.log(«event.session.application.applicationId=» + event.session.application.applicationId);
 
        /**
         * Uncomment this if statement and populate with your skill’s application ID to
         * prevent someone else from configuring a skill that sends requests to this function.
         */
 
// if (event.session.application.applicationId !== «amzn1.echo-sdk-ams.app.05aecccb3-1461-48fb-a008-822ddrt6b516») {
// context.fail(«Invalid Application ID»);
// }
 
        if (event.session.new) {
            onSessionStarted({requestId: event.request.requestId}, event.session);
        }
 
        if (event.request.type === «LaunchRequest») {
            onLaunch(event.request,
                event.session,
                function callback(sessionAttributes, speechletResponse) {
                    context.succeed(buildResponse(sessionAttributes, speechletResponse));
                });
        } else if (event.request.type === «IntentRequest») {
            onIntent(event.request,
                event.session,
                function callback(sessionAttributes, speechletResponse) {
                    context.succeed(buildResponse(sessionAttributes, speechletResponse));
                });
        } else if (event.request.type === «SessionEndedRequest») {
            onSessionEnded(event.request, event.session);
            context.succeed();
        }
    } catch (e) {
        context.fail(«Exception: » + e);
    }
};

В строках 278-280 (12-14 в этом фрагменте) вы найдете закомментированную структуру if . Эта проверка необходима для предотвращения вызова лямбда-функции другими навыками, кроме тех, которые вы скоро настроите.

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

Каждый запрос из Alexa Skills Kit имеет тип, передаваемый в event.request.type .

В целом, существует три типа запросов, на которые служба должна отвечать отдельно:

  • LaunchRequest : отправляется, когда пользователь запускает навык. Пример кода вызывает вспомогательную функцию onLaunch для инициализации игры, выбора вопросов и отправки первого вопроса вместе с приветственным сообщением.
  • SessionEndedRequest : отправляется, когда пользователь прекращает использовать навык, говоря «выход», не отвечая некоторое время или если происходит ошибка. Пример кода вызывает вспомогательную функцию onSessionEnded , которая в настоящее время является просто заполнителем и ничего не делает.
  • IntentRequest : отправляется, когда пользователь произносит команду, которая сопоставляется с намерением . Пример кода вызывает вспомогательную функцию onIntent .

Документация Amazon объясняет, что:

«[A] n намерение представляет собой высокоуровневое действие, которое выполняет устный запрос пользователя. У элементов содержимого могут быть аргументы, называемые слотами, которые собирают дополнительную информацию, необходимую для выполнения запроса пользователя».

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

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

Вы можете найти функцию в строках 327-371 в исходном коде:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * Called when the user specifies an intent for this skill.
 */
function onIntent(intentRequest, session, callback) {
    console.log(«onIntent requestId=» + intentRequest.requestId
        + «, sessionId=» + session.sessionId);
 
    var intent = intentRequest.intent,
        intentName = intentRequest.intent.name;
 
    // handle yes/no intent after the user has been prompted
    if (session.attributes && session.attributes.userPromptedToContinue) {
        delete session.attributes.userPromptedToContinue;
        if («AMAZON.NoIntent» === intentName) {
            handleFinishSessionRequest(intent, session, callback);
        } else if («AMAZON.YesIntent» === intentName) {
            handleRepeatRequest(intent, session, callback);
        }
    }
 
    // dispatch custom intents to handlers here
    if («AnswerIntent» === intentName) {
        handleAnswerRequest(intent, session, callback);
    } else if («AnswerOnlyIntent» === intentName) {
        handleAnswerRequest(intent, session, callback);
    } else if («DontKnowIntent» === intentName) {
        handleAnswerRequest(intent, session, callback);
    } else if («AMAZON.YesIntent» === intentName) {
        handleAnswerRequest(intent, session, callback);
    } else if («AMAZON.NoIntent» === intentName) {
        handleAnswerRequest(intent, session, callback);
    } else if («AMAZON.StartOverIntent» === intentName) {
        getWelcomeResponse(callback);
    } else if («AMAZON.RepeatIntent» === intentName) {
        handleRepeatRequest(intent, session, callback);
    } else if («AMAZON.HelpIntent» === intentName) {
        handleGetHelpRequest(intent, session, callback);
    } else if («AMAZON.StopIntent» === intentName) {
        handleFinishSessionRequest(intent, session, callback);
    } else if («AMAZON.CancelIntent» === intentName) {
        handleFinishSessionRequest(intent, session, callback);
    } else {
        throw «Invalid intent»;
    }
}

Как видите, большая часть функции представляет собой структуру if..else которая сравнивает имя намерения из запроса с набором намерений, которые принимает игра. В зависимости от имени намерения он вызывает соответствующую функцию геймплея.

Например, когда игра получает запрос с именем намерения AnswerIntent , она знает, что запрос является ответом на текущий вопрос, и вызывает функцию handleAnswerRequest для его обработки.

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

Прокрутите вниз до конца страницы и нажмите Далее, чтобы сохранить конфигурацию.

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

Просмотр и создание функции

Лямбда-функция была создана.

Если вам нужно изменить какие-либо параметры из мастера, вы можете сделать это на вкладке Конфигурация .

Лямбда-функция была успешно создана

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

Сначала нажмите на вкладку Источники событий .

Источники событий

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

Откроется всплывающее окно для выбора типа источника события:

Добавить источник события

Выберите набор навыков Алекса . Затем нажмите Отправить .

Это все, что вам нужно сделать, чтобы функция Lambda прослушивала события из набора Alexa Skills.

Новый источник событий теперь отображается на вкладке Источники событий :

Источник события был успешно добавлен

Обратите внимание на идентификатор с меткой ARN в правом верхнем углу. Вскоре вы будете использовать его, чтобы настроить умение Alexa для вызова правильной лямбда-функции.

Теперь давайте определимся с навыком.

Теперь вы установили логику для викторины и настроили функцию для выполнения по запросам из набора навыков Alexa.

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

Для этого мы будем использовать портал разработчика Amazon.

Начните с регистрации учетной записи на портале для разработчиков.

Нажмите « Войти» или «Создать бесплатную учетную запись» в правом верхнем углу страницы разработчика Amazon . Сначала вы увидите логин Amazon по умолчанию. Используйте его, чтобы создать новую учетную запись или использовать существующую учетную запись Amazon (например, ту, которую вы использовали при регистрации в AWS) для входа.

Войти в систему

Если вы ранее не пользовались порталом для разработчиков, вас попросят ввести некоторую информацию о вашей компании и принять соглашение о распространении приложений. Эта информация используется всеми приложениями, которые вы можете создать для Amazon Marketplace с помощью этой учетной записи.

Наконец, на последнем этапе поток регистрации запрашивает платежи . В настоящее время Alexa Skills нельзя продать или купить, поэтому, если вы планируете развивать Alexa Skills, выберите « Нет» для обоих вопросов, чтобы пропустить все этапы настройки, связанные с монетизацией. Если вы решите монетизировать свои приложения позже, вы всегда можете вернуться к настройке, когда она станет актуальной.

Введите информацию об оплате

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

Теперь вы зарегистрированы и готовы добавить свой первый навык.

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

Перейдите к Alexa Skills Kit

На этой странице вы увидите следующие параметры:

Выберите набор навыков Алекса

Выберите Alexa Skills Kit , нажав на кнопку « Начать» .

На экране, который появляется, вы найдете все навыки Alexa, которые вы создали:

Список ваших навыков Алекса

Список по-прежнему пуст, поэтому нажмите « Добавить новый навык», чтобы начать определять свой первый навык с помощью пятиэтапного мастера, который поможет вам полностью опубликовать навык, чтобы другие пользователи Alexa могли его найти и использовать.

Сначала на вкладке «Информация о навыке» введите основную информацию, чтобы определить свой новый навык.

Создайте новый экран настройки навыков Alexa
  • Тип навыка : выберите «Пользовательскую модель взаимодействия», поскольку вы создадите пользовательский навык, в котором вы определите модель взаимодействия. Вы можете узнать больше о различных типах навыков Alexa здесь .
  • Имя : описательное имя для навыка. Как только вы опубликуете свой навык, это имя увидят ваши потенциальные пользователи. В этом примере Amazon использует Reindeer Games , но вы должны выбрать что-то свое, так как это имя уже используется.
  • Invocation Name : имя, которое пользователи будут использовать, когда хотят сообщить Алексею выполнить это умение, например, «Alexa, open Reindeer Games ». Обратите внимание, что оно не должно совпадать с именем навыка. При выборе имени вызова протестируйте свои идеи с помощью устройства Echo, чтобы убедиться, что выбранное имя легко для распознавания Alexa. Таким образом, вы можете быть уверены, что ваши пользователи смогут активировать ваши навыки без каких-либо дополнительных проблем.

Как только информация на месте, нажмите Далее .

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

Модель взаимодействия — это связь между пользователем, разговаривающим с устройством с поддержкой Alexa, например Amazon Echo, и функцией Lambda, которую мы установили ранее. В некотором смысле, это определение пользовательского интерфейса для нашего программного обеспечения, управляемого голосом.

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

Намеренная схема

Скопируйте и вставьте следующий фрагмент кода в текстовое поле, помеченное как Intent Schema :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
  «intents»: [
    {
      «intent»: «AnswerIntent»,
      «slots»: [
        {
          «name»: «Answer»,
          «type»: «LIST_OF_ANSWERS»
        }
      ]
    },
    {
      «intent»: «AnswerOnlyIntent»,
      «slots»: [
        {
          «name»: «Answer»,
          «type»: «LIST_OF_ANSWERS»
        }
      ]
    },
    {
      «intent»: «DontKnowIntent»
    },
    {
      «intent»: «AMAZON.StartOverIntent»
    },
    {
      «intent»: «AMAZON.RepeatIntent»
    },
    {
      «intent»: «AMAZON.HelpIntent»
    },
    {
      «intent»: «AMAZON.YesIntent»
    },
    {
      «intent»: «AMAZON.NoIntent»
    },
    {
      «intent»: «AMAZON.StopIntent»
    },
    {
      «intent»: «AMAZON.CancelIntent»
    }
  ]
}

Посмотрев на структуру данных, вы заметите, как имена намерений, определенные в списке, совпадают с именами в коде JavaScript, который мы рассматривали ранее в учебнике. Например, первое намерение, AnswerIntent , соответствует назначению функции, которая проверяет, является ли ответ пользователя правильным или нет.

Для получения дополнительной информации о разработке голосового интерфейса см. Документацию Alexa Skills Kit .

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

Продолжая смотреть на AnswerIntent , обратите внимание, что намерение определяет один параметр, Answer , с типом слота LIST_OF_ANSWERS .

LIST_OF_ANSWERS — это пользовательский тип слота, поэтому мы должны указать его в конфигурации.

Нажмите « Добавить тип слота» и введите следующую информацию:

Добавить пользовательский тип слота
  • Введите тип : имя типа слота, на которое ссылается схема намерения . Введите LIST_OF_ANSWERS .
  • Введите значения : допустимые значения для слота, по одному значению на строку. Введите числа от 1 до 4 , каждое в своей строке, чтобы пользователь мог ответить на вопросы, произнося правильный номер ответа.

Затем нажмите ОК .

Теперь вернемся к JavaScript и ищем функцию с именем isAnswerSlotValid ( строки 599-603 ), чтобы увидеть, как функция использует слот для получения ответа пользователя:

1
2
3
4
5
function isAnswerSlotValid(intent) {
    var answerSlotFilled = intent.slots && intent.slots.Answer && intent.slots.Answer.value;
    var answerSlotIsInt = answerSlotFilled && !isNaN(parseInt(intent.slots.Answer.value));
    return answerSlotIsInt && parseInt(intent.slots.Answer.value) < (ANSWER_COUNT + 1) && parseInt(intent.slots.Answer.value) > 0;
}

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

В этом случае есть только один Answer . Таким образом, просматривая intent.slots.Answer.value , функция может увидеть, какой ответ выбрал пользователь, и проверить, является ли он правильным для текущего вопроса.

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

Добавить образец высказываний

В текстовом поле введите одну фразу в строку, используя формат <Intent Name> <Phrase> . Чтобы включить слот параметра, используйте {Answer} . Затем, когда пользователь произносит эту фразу, Alexa проанализирует ее и вызовет службу, передавая соответствующее намерение и проанализированное значение для слота Answer .

Начните со вставки следующих примеров высказываний. Затем вы можете продолжить, добавив столько высказываний, сколько захотите. На самом деле, чем больше (релевантных) фраз вы сможете придумать, тем лучше.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
AnswerIntent the answer is {Answer}
AnswerIntent my answer is {Answer}
AnswerIntent is it {Answer}
AnswerIntent {Answer} is my answer
AnswerOnlyIntent {Answer}
 
AMAZON.StartOverIntent start game
AMAZON.StartOverIntent new game
AMAZON.StartOverIntent start
AMAZON.StartOverIntent start new game
 
DontKnowIntent i don’t know
DontKnowIntent don’t know
DontKnowIntent skip
DontKnowIntent i don’t know that
DontKnowIntent who knows
DontKnowIntent i don’t know this question
DontKnowIntent i don’t know that one
DontKnowIntent dunno

С этими высказываниями, например, когда пользователь говорит « два — мой ответ», Alexa отправит IntentRequest в функцию Lambda, передавая AnswerIntent в качестве намерения и 2 в качестве значения для слота Answer .

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

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

  • Конечная точка : метод для выполнения функциональности навыка. Наш код находится в AWS Lambda, поэтому выберите Lambda ARN. Затем в текстовом поле введите идентификатор, который я указал в конце первой части урока.
  • Связывание аккаунта : выберите Нет.

Как только информация на месте, нажмите Далее . Вы готовы начать тестировать свой новый навык Alexa!

Настройте свой навык Alexa

Хотя лучший способ проверить свой новый навык Alexa — это сыграть в игру викторины на реальном устройстве Echo, вы также можете проверить навык прямо в браузере, используя инструменты на следующем шаге процесса добавления нового навыка .

На странице тестирования вы найдете два инструмента тестирования:

Тестирование навыка
  1. Voice Simulator можно использовать для проверки того, как Алекса произносит любое предложение. Это полезно, например, при разработке вопросов для вашей викторины: если вопрос не звучит правильно в голосовом симуляторе, попробуйте еще раз и замените его верной версией.
  2. Service Simulator проверяет функциональность навыка, как если бы вы использовали реальное устройство с поддержкой Alexa. Используя этот инструмент, вы можете ввести высказывание и посмотреть, как ваше приложение через Alexa Skills Kit реагирует на него.

Итак, давайте проверим игру, используя Service Simulator .

В текстовом поле Enter Utterance введите:

1
open reindeer games

Затем нажмите кнопку « Спросить оленей» под ней.

Инструмент тестирования использует вашу модель взаимодействия для анализа команды, а затем отправляет запрос в функцию Lambda навыка.

Если все пойдет хорошо, вы увидите JSON-запрос и ответ, показанные под командным окном:

Тестирование игры с использованием Service Simulator

С левой стороны вы увидите запрос, который Alexa Skills Kit отправил вашей функции Lambda, а справа — как ваш код ответил на нее.

Теперь вы можете проанализировать ответ JSON или, чтобы получить более достоверную информацию об эхо, нажмите кнопку « Слушать» , чтобы услышать, как Алекса говорит за вас ответ.

Как только вы услышите вопрос, попробуйте ответить на него. Выберите один из форматов высказываний, который вы указали на предыдущем шаге, и введите его в текстовое поле « Введите высказывание» .

Например:

1
the answer is four

Обратите внимание, что вы должны написать число в виде слова, а не фактическое число 4.

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

Если что-то идет не так и вы получаете неверный ответ от сервера, вот некоторые распространенные ошибки, которые вы можете захотеть проверить, как указано разработчиками примера кода:

  • Скопировали ли вы правильный ARN для вашей функции Lambda в свой навык на портале разработчика?
  • Вы используете правильное имя вызова? Может быть, вы изменили его на что-то отличное от оленьих игр и сейчас все еще тестируете его с именем примера?
  • Вы говорите, запустить, запустить или открыть?
  • Вы уверены, что у вас нет других навыков в вашей учетной записи с тем же именем вызова?
  • В частности, для этого шаблона необходимо иметь как минимум семь вопросов и ответов для работы бизнес-логики.

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

Однако этот метод тестирования не покажет вам, насколько хорошо Alexa сможет понять и проанализировать высказывания. Таким образом, если вы создаете навык, который планируете опубликовать, вы также можете выполнить некоторое окончательное тестирование, используя устройство, а не только эти онлайн-инструменты, прежде чем отправлять свой навык.

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

Чтобы протестировать игру на своем устройстве Echo, сначала зарегистрируйте устройство по адресу электронной почты, который вы использовали для регистрации своей учетной записи разработчика на портале разработчиков Amazon. Как только это будет сделано, вы можете использовать этот навык так же, как и настоящий конечный пользователь.

Обратитесь к документации Alexa для получения дополнительных инструкций по тестированию .

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

Не публиковать пример приложения как есть.

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

Затем на вкладке « Тест », когда вы будете уверены в своем приложении, нажмите « Далее», чтобы перейти к последним двум шагам, ведущим к публикации навыка .

Публикация информации

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

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

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

Пройдите поля осторожно, обращая пристальное внимание на инструкции. На снимке экрана выше вы можете увидеть пример значений из шаблона Amazon Reindeer Games.

Если вы используете вариации этих значений, не забудьте заменить «Игры северных оленей» в Примерах фраз на имя вызова вашего навыка.

Инструкции по тестированию видны только команде сертификации Amazon Alexa. Вы можете просто упомянуть: «Я использую шаблон навыков викторины, основанный на образце кода игры« Олени »».

Затем, когда вы будете готовы, нажмите кнопку Далее .

Конфиденциальность и соответствие

На этом заключительном этапе вы ответите на несколько вопросов о параметрах конфиденциальности вашей игры.

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

URL-адрес Политики конфиденциальности и URL-адреса Условий использования являются необязательными.

Когда вы думаете, что игра готова, нажмите « Отправить для проверки» . Затем дождитесь информации от команды Alexa Skills: вы будете получать электронные письма о прогрессе и, возможно, некоторые предложения о том, как вы можете улучшить свои навыки.

И если все пойдет хорошо, через некоторое время ваша викторина станет доступна пользователям, чтобы они могли попробовать Amazon Echo или любое устройство с поддержкой Alexa!

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

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

Получайте удовольствие, создавая будущее!

Хотели бы вы получить бесплатный доступ к нашей обширной библиотеке из более чем 750 видео курсов? Если это так, вам повезло. Amazon предлагает три бесплатных месяца подписки на Envato Tuts + первым 500 читателям, которые публикуют навык Alexa в период с 31 марта 2016 года по 31 мая 2016 года.

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