Выполнение узла диалога с помощью firebase - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь построить свои веб-хуки, используя nodejs и не используя firebase.Я нашел ресурс и собрал свой файл index.js следующим образом:

const express = require('express');
const bodyParser = require('body-parser');
const {
    dialogflow
} = require('actions-on-google');

const PORT = process.env.PORT || 5000;
const app = dialogflow({
    debug: true
});
const server = express()
    .use(bodyParser.urlencoded({
        extended: true
    }))
    .use(bodyParser.json(), app)
    .listen(PORT, () => console.log(`Listening on ${ PORT }`));

// Handle the Dialogflow intent named 'Default Welcome Intent'.
app.intent('Default Welcome Intent', (conv) => {
    const name = conv.user.storage.userName;
    if (!name) {
      // Asks the user's permission to know their name, for personalization.
      conv.ask(new Permission({
        context: 'Hi there, to get to know you better',
        permissions: 'NAME',
      }));
    } else {
      conv.ask(`Hi again, ${name}. What are you looking for?`);
    }
  });

  // Handle the Dialogflow intent named 'actions_intent_PERMISSION'. If user
  // agreed to PERMISSION prompt, then boolean value 'permissionGranted' is true.
  app.intent('actions_intent_PERMISSION', (conv, params, permissionGranted) => {
    if (!permissionGranted) {
      // If the user denied our request, go ahead with the conversation.
      conv.ask(`OK, no worries. What are you looking for?`);
      conv.ask(new Suggestions('Blue', 'Red', 'Green'));
    } else {
      // If the user accepted our request, store their name in
      // the 'conv.user.storage' object for future conversations.
      conv.user.storage.userName = conv.user.name.display;
      conv.ask(`Thanks, ${conv.user.storage.userName}. ` +
        `What are you looking for?`);
      conv.ask(new Suggestions('Blue', 'Red', 'Green'));
    }
  });

  // Handle the Dialogflow NO_INPUT intent.
  // Triggered when the user doesn't provide input to the Action
  app.intent('actions_intent_NO_INPUT', (conv) => {
    // Use the number of reprompts to vary response
    const repromptCount = parseInt(conv.arguments.get('REPROMPT_COUNT'));
    if (repromptCount === 0) {
      conv.ask('Which color would you like to hear about?');
    } else if (repromptCount === 1) {
      conv.ask(`Please say the name of a color.`);
    } else if (conv.arguments.get('IS_FINAL_REPROMPT')) {
      conv.close(`Sorry we're having trouble. Let's ` +
        `try this again later. Goodbye.`);
    }
  });    

module.exports = server;

Мое NodeJs приложение просто состоит из index.js и пакета.* 1009 JSON *.Я сделал npm install, а затем загрузил два файла и node_modules в мое лазурное веб-приложение.Когда я тестировал свое приложение google Actions, оно получало ошибку webhook, потому что не может связаться.

Может кто-нибудь сказать мне, что мне нужно сделать, чтобы заставить его работать?

PS: Этомой package.json :

{
  "name": "pyb-actions",
  "description": "Actions on Google for PYB",
  "author": "r3plica",
  "private": true,
  "scripts": {
    "lint": "eslint .",
    "start": "npm run shell"
  },
  "dependencies": {
    "actions-on-google": "^2.0.0",
    "express": "^4.16.4",
    "i18n": "^0.8.3"
  },
  "devDependencies": {
    "eslint": "^4.19.0",
    "eslint-config-google": "^0.9.1"
  }
}

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте создать sim-get-route, чтобы проверить, связана ли проблема с настройкой вашего сервера или с тем, как вы инициализируете приложение.

app.get('/', function(request,response) {
  response.json({
    "response": "The server is runnning"
  });
});

Или попробуйте переадресовать свой локальный хост через ngrok и использовать это как временное выполнение webhook.

Вот мой index.js для вдохновения:

const express = require('express');
const bodyParser = require('body-parser')
const { dialogflow } = require('actions-on-google')
const intents = require('./intents')

const expressApp = express().use(bodyParser.json())
const app = dialogflow()

app.intent('Welcome', intents.welcome)

expressApp.post('/fulfill', (req, resp) => app)

expressApp.listen(process.env.PORT || 3000, '0.0.0.0', () => {
  console.log("server starting " + (process.env.PORT || 3000));
})

Надеюсь, это поможет

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