Разработчик Amazon постоянно сообщает мне об ошибке в функциональном тесте из-за отсутствия проверки запросов - PullRequest
1 голос
/ 18 октября 2019

В настоящее время я пытаюсь развернуть навык alexa, но когда я пытаюсь отправить его на проверку, он все время говорит мне, что я не проверяю подписи, я не знаю, как именно реализовать это в коде.

'use strict';

require('dotenv').config();
var Alexa = require('alexa-sdk');
var languageStrings = require('./languageStrings.js');

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    // To enable string internationalization (i18n) features, set a resources object.
    alexa.resources = languageStrings;
    alexa.registerHandlers(handlers);
    alexa.execute();
};
const verifier = require('alexa-verifier')


verifier(cert_url, signature, requestRawBody, function callbackFn(er) {
  // if er, something went wrong
})

var handlers = {
    'LaunchRequest': function () {
        this.emit('GetFact');
    },
    'GetNewFactIntent': function () {
        this.emit('GetFact');
    },
    'GetFact': function () {
        // Get a random fact from the fact list
        // Use this.t() to get corresponding language data
        var factArr = this.t('FACTS');
        var factIndex = Math.floor(Math.random() * factArr.length);
        var randomFact = factArr[factIndex];

        // Create speech output
        var speechOutput = this.t("GET_FACT_MESSAGE") + randomFact;
        this.emit(':tellWithCard', speechOutput, this.t("SKILL_NAME"), randomFact)
    },
    'AMAZON.HelpIntent': function () {
        var speechOutput = this.t("HELP_MESSAGE");
        var reprompt = this.t("HELP_MESSAGE");
        this.emit(':ask', speechOutput, reprompt);
    },
    'AMAZON.CancelIntent': function () {
        this.emit(':tell', this.t("STOP_MESSAGE"));
    },
    'AMAZON.StopIntent': function () {
        this.emit(':tell', this.t("STOP_MESSAGE"));
    }
};`

если кто-то может помочь мне с каким-то учебником или чем-то еще, я так потерян, заранее спасибо

1 Ответ

0 голосов
/ 22 октября 2019

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

Если вы используете SDK, предоставленные командой Alexa, вот хорошая документация о том, как это проверить.

Если вы хотите полностью пропустить это, было бы лучше использовать AWS Lambda в качестве бэкенда или выбрать Alexa Hosted в качестве опции при наращивании навыка.

...