Amazon Lex - поиск слотов не работает внутри обратного вызова - PullRequest
0 голосов
/ 27 июня 2018

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

GetCustomerDetails().then(response => {


                var serializedcustomerDetails = convert.xml2json(response.data, {
                    compact: true,
                    spaces: 2
                });

                var customerDetails = JSON.parse(serializedcustomerDetails);


                let filteredCustomerDetails = _.filter(customerDetails.CustomerInfo.CustomerDetails, function (o) {
                    return o.CustomerName._text.includes(customerName);
                })

                

                if (filteredCustomerDetails.length == 1) {

                   
                    callback(elicitSlot(outputSessionAttributes, intentRequest.currentIntent.name,
                        intentRequest.currentIntent.slots, '​CustomerCode', {
                            contentType: 'PlainText',
                            content: `Do you mean ${filteredCustomerDetails[0].CustomerName._text} of ${filteredCustomerDetails[0].SpecialityName._text} department?`
                        }));

                    return;

                }

            }).catch(error => {
                console.log(`${error}`)
            })

1 Ответ

0 голосов
/ 29 июня 2018

Это мой первый Awnser в стеке, поэтому, пожалуйста, потерпите меня.

Я столкнулся с той же проблемой в недавнем проекте, и есть несколько вещей, которые вы можете проверить.

Сколько времени занимает вызов API?

Если ваш вызов API занимает много времени, стоит проверить настройки тайм-аута в вашей функции Lambda. Консоль AWS -> Лямбда -> Ваша функция -> Основные настройки -> Время ожидания .

Завершается ли ваша функция Lambda до вызова API?

Я исправил эту проблему, создав модуль узла для обработки моей бизнес-логики. В модуле есть функция getNextSlot, которую он возвращает как Promise. Внутри этой функции я проверяю входящее событие и выясняю, какой слот мне нужно вызывать дальше, часть моего потока - вызов конечной точки API, для завершения которой требуется около 10 секунд.

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

exports.getData = function (url, data) {
    var pr = require("request-promise");

    var options = {
        method: 'POST',
        url: 'api.example',
        qs: {},
        headers:
            {
                'Content-Type': 'application/json'
            },
        body: {
            "example": data
        },
        json: true,
        timeout: 60000
    };

    return pr(options);
}

В моем основном коде я называю эту функцию как:

apiModule.getData("test", "data")
    .then(function (data) {
        //Execute callback
   })
    .catch(function (error) {
        console.log(error);
        reject(error);
   });

Это все равно решило проблему для меня.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...