Как настроить sam-cli для запуска лямбда-навыков Alexa для тестирования? - PullRequest
1 голос
/ 08 июля 2019

Кажется, я не могу понять, как заставить функционировать лямбда-функцию навыков Alexa, работающую локально.При использовании ngrok Amazon правильно подключается к моему работающему контейнеру sam, но все, что я получаю, это POST /, что приводит к 404.

Я скопировал образец из репозитория AWSLABS sam для Alexa:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: Demonstrates a basic skill built with the Amazon Alexa Skills Kit.
Parameters: 
  TopicNameParameter: 
    Type: String
Resources:
  alexaskillskitcolorexpert:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: .
      Description: Demonstrates a basic skill built with the Amazon Alexa Skills Kit.
      MemorySize: 128
      Timeout: 3
      Policies:
        - SNSPublishMessagePolicy:
            TopicName: !Ref TopicNameParameter
      Events:
        AlexaSkillEvent:
          Type: AlexaSkill

1 Ответ

2 голосов
/ 09 июля 2019

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

Когда навык размещается как конечная точка HTTPS, он должен предоставить дополнительный код , который не требуется при использовании интеграции AWS Lambda с навыками Alexa. Например, сервис Alexa отправит подписанные запросы через HTTP POST, на которые должен ответить ваш навык. С другой стороны, при размещении в качестве лямбда-функции AWS подпись не требуется, поскольку триггерный механизм AWS Lambda гарантирует, что только сервис Alexa может вызывать код вашего навыка.

В загруженном примере код представлен как лямбда-функция AWS и создается лямбда-триггер, позволяющий сервису Alexa вызывать вашу функцию. Это линия здесь:

Events:
        AlexaSkillEvent:
          Type: AlexaSkill

Но когда вы выставляете свой код, работающий локально через ngrok, вы переключаетесь на другую модель: пользовательские конечные точки HTTPS. Таким образом, сервис Alexa ожидает, что ваш код отвечает на POST запросы, которые он отправляет, на что пример не обращается.

Я бы предложил не использовать ngrok для проверки вашего навыка Alexa, выставленного как лямбда-функция AWS. Используйте ngrok, только если вы планируете тестировать код, который будет развернут как настраиваемая конечная точка HTTPS Alexa Skill.

Для локального тестирования кода вы можете использовать каркасные модули тестирования, такие как mocha для NodeJS. Идея состоит в том, чтобы записывать запросы, отправленные Alexa, в консоли разработчика Alexa или в ваших журналах Lambda и воспроизводить их локально на вашем ноутбуке.

Вот пример, который я написал, чтобы проверить свои навыки, используя эту технику: https://github.com/sebsto/maxi80-alexa/tree/master/lambda/test

Вы также можете использовать сторонние платформы тестирования, такие как bespoken . Вот еще один пример, который я написал, чтобы показать, как использовать bespoken для локального модульного теста: https://github.com/alexa/skill-sample-nodejs-audio-player/tree/mainline/single-stream/test/unit

...