Dialogflow actions-on-google: не удается совершить вызовы api Rest перед настройкой ответа - PullRequest
0 голосов
/ 25 мая 2018

Используя nodejs, я пытаюсь сделать внешний вызов API Rest.Я должен сначала сделать вызов, а затем установить ответ для намерения.

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

вот пример

var sText=" ";
console.log("Token in Welcome: "+conv.user.access.token);
var auth = "Bearer "+ conv.user.access.token;
var snQuery = "api/now/table/sys_user?sysparm_query=sys_id=javascript:gs.getUserID()";
var endpointUrl = baseURL +snQuery;    
console.log("Endpoint user info: "+endpointUrl);

request.get({
    url : endpointUrl,
    headers : {
      "Authorization" : auth,
      "Accept": "application/json",
      "Content-Type": "application/json" 
    }
},  
function(error, response, body){
    if(error)
    {
        sText=" Sorry! I found some Issue in performing this action, Please try again after some time. ";
        console.log("Entering Error: "+error);
        conv.close(sText);
    }
    else
    {
        console.log("Acccess token: "+conv.user.access.token);
        conv.user.storage.UserDetails = JSON.parse(body);
        console.log(conv.user.storage.UserDetails);
        console.log("SYS ID_Welcome: "+conv.user.storage.UserDetails.result[0].sys_id);
        return asyncTask()
        .then(() =>conv.ask(new SimpleResponse({
              speech: 'Howdy! tell you fun facts about almost any number, like 42. What do you have in mind?',
              text: 'Howdy! tell you fun facts about almost any number, like 42. What do you have in mind?',
            })));

    }
})
//It is expecting my sample response here. Which would execute before my API call starts.
/* 
return asyncTask()
.then(() =>conv.ask(new SimpleResponse({
      speech: 'Howdy! tell you fun facts about almost any number, like 42. What do you have in mind?',
      text: 'Howdy! tell you fun facts about almost any number, like 42. What do you have in mind?',
    })));
*/

Я вызываю приведенный выше фрагмент кода в Приветственном намерении по умолчанию.

const functions = require('firebase-functions');
process.env.DEBUG = 'actions-on-google:*';
const {dialogflow,SimpleResponse} = require('actions-on-google');
const request = require('request');
const app = dialogflow();


app.intent('Default Welcome Intent',getWelcomeMsg);


function getWelcomeMsg(conv)
{
   // the above snippet goes here
}

exports.MyFunctionName = functions.https.onRequest(app);

Я пробовалс версией узла 8.11.2 и 6.10

1 Ответ

0 голосов
/ 28 мая 2018

Если вы используете облачные функции Firebase, вам необходимо убедиться, что вы пользуетесь одним из платных планов .FCF разрешает сетевые подключения только к другим службам Google, если вы участвуете в плане «Spark».Вы можете перейти на тарифный план «Blaze», который имеет биллинг для каждого использования, но включает в себя бесплатный уровень, достаточный для большинства задач разработки и легкого использования.

Однако вы упоминаете об использовании Node версии 8.11.2 и 6.10.В настоящее время FCF поддерживает только Node версии 6.14.

Возможно, стоит также изучить использование пакета request-promise-native вместо request.См. Вопрос переполнения стека на https://stackoverflow.com/a/50441222/1405634

...