Alexa не может получить результаты с сайта

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

Я пытаюсь создать навык Alexa, который выбирает некоторые данные с этого сайта и выполняет некоторые операции в соответствии с запросом пользователя.

  1. Теперь моя лямбда-функция работает правильно на моем компьютере (если я закомментирую несколько строк) и правильно отображаю данные. Тем не менее, лямбда-функция, кажется, не ждет request чтобы получить завершение на сервере AWS(потому что я не вижу журнал внутри моей функции, напечатанной в журналах на сервере).

Это код, который я использовал для получения данных с сайта:

console.log("Initiating request");
request({
    url: url,
    json: true
}, function(error, response, body){
    console.log("Request send, waiting to load the data..."); // Not executed
    if(!error && response.statusCode == 200){
        console.log("Data obtained :: ");
        data = body;
        console.log(data.toString());
        });
    }
    else{
        console.log("Error: " + error.message); 
    }
});

Вот полный код для дальнейшего использования.

Это вывод журнала выполнения:

Запрос START: 621ee488-f187-11e7-b063-99e0641d97b4 Версия: $LATEST 2018-01-04T19:42:23.742Z 621ee488-f187-11e7-b063-99e0641d97b4 GetNewContestIntent 2018-01-04T19:42- 237488Z 11e7-b063-99e0641d97b4 Данные, предоставленные пользователем: undefined undefined undefined undefined 2018-01-04T19:42:23.798Z 621ee488-f187-11e7-b063-99e0641d97b4 Привет 2018-01-04T19:42:26.419Z 621ee488-f187 11e7-b063-99e0641d97b4 Инициирующий запрос 2018-01-04T19:42:26.481Z 621ee488-f187-11e7-b063-99e0641d97b4 Вот несколько конкурсов: END RequestId: 621ee488-f187-11e7-b063-99e018-fd6641d6641d8641 11e7-b063-99e0641d97b4 Продолжительность: 2808,73 мс Объявленная длительность: 2900 мс Размер памяти: 128 МБ Макс. Используемая память: 47 МБ

(Неопределенные значения приемлемы, я хочу, чтобы они были "undefined").

Второй странный, я не знаю, почему это случилось со мной.

  1. Я должен был сделать npm install request чтобы получить мой request функция запущена, и пришлось загрузить zip-файл моей лямбда-функции и sdk. Но из-за этого я не могу редактировать свой код, используя опцию Edit code Inline. Он ничего не показывает, если я выберу опцию. Хотя я вижу редактор для других моих функций. Это не настоящая проблема, но мне приходилось загружать полный код каждый раз, когда я делаю какие-либо изменения в своем коде, что вызывает проблемы.

Кто-нибудь может мне помочь с этими вопросами? Спасибо.

1 ответ

Решение
  1. В общем проблема в том что ты заставляешь Алексу отвечать this.emit(':responseReady'); до завершения запроса, это потому, что в этом разделе вашего кода вы вызываете request которые выполняют запрос, но function Вы определяете, что для обработки ответ будет выполняться асинхронно, поэтому до этого программа продолжит выполнение следующей команды после запроса. if(invalidRequest) и так до тех пор, пока несколько секунд не дойдем до ответа Алексы.

    console.log("Initiating request");
    request({
        url: url,
        json: true
    }, function(error, response, body){
        console.log("Request send, waiting to load the data...");
        ...
    });
    
    if(invalidRequest){
        speechOutput = errorMessage;
    }else{
        speechOutput = GET_CONTEST_MESSAGE + ans;
    }
    
    console.log(speechOutput);
    this.response.cardRenderer(SKILL_NAME, speechOutput);
    this.response.speak(speechOutput);
    this.emit(':responseReady');
    

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

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

  1. У меня была та же проблема, но я не смог найти официального объяснения, хотя основной причиной, по-видимому, является размер почтового индекса; на некоторых форумах люди говорят о максимальном лимите для редактирования 51 200 байт, но я не смог найти официального аргумента для этого, вместо этого я загрузил zip-файлы размером до 1 МБ и все еще могу редактировать файлы внутри, но у меня также есть некоторые другие архивы до 6 МБ, и там я не мог ничего редактировать.

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

Другие вопросы по тегам