как мне подключить Google Actions и Watson? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь подключить Watson к Google Actions, моя функция работает в firebase, и когда я проверяю только соединение с Watson, это работает. Но когда я пытаюсь протестировать его в консоли Google, он закрывает проект.

Это мой код в Firebase Cloud Функции:

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');

const app = actionssdk({debug: true});
var AssistantV1 = require('watson-developer-cloud/assistant/v1');

app.intent('actions.intent.MAIN', (conv) => {
    conv.ask('Olá, como posso lhe ajudar?');
});


app.intent('actions.intent.TEXT', (conv, input) => {
    var AssistantV1 = require('watson-developer-cloud/assistant/v1');
    var assistant = new AssistantV1({
        username: '###############',
        password: '###############',
        url:'###############',
        version: '2018-07-10'
    });

    assistant.message(
    {
        workspace_id: '###############',
        input: { text: result },
        headers: {'Custom-Header': 'custom',
        'Accept-Language': 'custom'
        }
    },
    function(response) {
        conv.ask(response.output.text[0]);
    }
    );
});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);`

1 Ответ

0 голосов
/ 30 октября 2018

Проблема в том, что assistant.message() принимает функцию обратного вызова в качестве параметра для обработки ответа, но библиотека actions-on-google ожидает, что вы вернете Promise, когда вы имеете дело с асинхронными вызовами. Вам нужно будет обернуть этот асинхронный вызов в Promise, а затем вернуть это Promise в библиотеку a-o-g, чтобы он знал, что нужно дождаться завершения обратного вызова.

Я не тестировал код, но подозреваю, что что-то вроде этого должно работать:

return new Promise( (resolve, reject) => {
  assistant.message({
    workspace_id: '###############',
    input: { text: result },
    headers: {
      'Custom-Header': 'custom',
      'Accept-Language': 'custom'
    }
  },
  function(response) {
    conv.ask(response.output.text[0]);
    resolve();
  });

});
...