ApiAiApp не является конструктором

Ниже я тестирую клиентскую библиотеку node.js с помощью api.ai, я скопировал точный код из примера, приведенного на этой странице.

https://developers.google.com/actions/reference/nodejs/ApiAiApp

Но каждый раз, когда я получаю

TypeError: ApiAiApp is not a constructor
 at /app/index.js:9:15
 at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)

Вот мой файл index.js:

var express = require('express');
var request = require('request');
var exps = express();

const ApiAiApp = require('actions-on-google').ApiAiApp;

exps.post('/hook', function(request, response) {

  const app = new ApiAiApp({request, response});

  response.status(200)
  response.json({
      speech: "Hello from hook",
      displayText: "Hello from hook",
      source: 'HOOK'
  })
  console.log("RESPONSE :::: \n");
  console.log(response);
});

exps.listen((process.env.PORT || 8000), function() {
    console.log("App up and running, listening.")
})

Пакет.json

{
  "name": "googleActionNode",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "Sukhvinder Singh",
  "dependencies": {
    "actions-on-google": "1.2.0",
    "body-parser": "^1.15.0",
    "express": "^4.13.4"
  },
  "devDependencies": {},
  "repository": {
    "type": "git",
    "url": "git+https://github.com/sukhvinder1/googleActionNode.git"
  },
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/sukhvinder1/googleActionNode/issues"
  },
  "homepage": "https://github.com/sukhvinder1/googleActionNode#readme"
}

если я закомментирую ниже строки, все работает нормально.

  const app = new ApiAiApp({request: request, response: response});

Может ли кто-нибудь помочь мне здесь?


person Sukh    schedule 03.08.2017    source источник
comment
непосредственно перед тем, как вы попытаетесь вызвать на нем new, посмотрите, можете ли вы сделать console.log(ApiAiApp); и console.log(тип ApiAiApp);   -  person Prisoner    schedule 04.08.2017
comment
Также опубликуйте свой package.json и версию действий в Google, которую вы используете.   -  person Prisoner    schedule 04.08.2017
comment
Я удалил свой ответ благодаря @Prisoner, который указал мне на нужные документы. Я бы согласился с его идеями о том, как отладить его, чтобы заставить его работать.   -  person Ido Green    schedule 04.08.2017
comment
@Prisoner, раньше я использовал действия в Google версии 1.0.0. Теперь я обновил его до 1.2.0, что решило проблему. Спасибо за помощь :)   -  person Sukh    schedule 04.08.2017
comment
Рад, что это помогло! У @IdoGreen теперь есть лучший ответ, который был обновлен, чтобы отразить детали вашей проблемы. Если вы можете проголосовать и принять ответ, это будет оценено.   -  person Prisoner    schedule 04.08.2017
comment
@Prisoner, я новичок в Dialogflow и сталкиваюсь с похожей ошибкой. Я не уверен, как мне обновить действия в версии Google. Не могли бы вы мне помочь?   -  person Khush    schedule 09.04.2018
comment
@Khush - это, вероятно, лучше всего задавать как новый вопрос в SO, когда вы предоставляете ту же информацию, что и здесь, - код, вызывающий проблему, возникающую ошибку и ваш файл package.json.   -  person Prisoner    schedule 09.04.2018


Ответы (2)


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

В версии 1.0 вы бы назвали это так:

 const Assistant = require('actions-on-google').ApiAiAssistant;

Более поздние версии изменили это на

 const Assistant = require('actions-on-google').ApiAiApp;

Более поздние версии по-прежнему позволяют использовать более раннее имя, но оно устарело, и вам следует переключиться как на новое имя, так и на самую последнюю версию библиотеки.

Кстати, вы можете взглянуть на этот пример, который я написал: https://github.com/greenido/bitcoin-info-action/blob/master/index.js Он показывает, как мы хотим работать с действиями в Google (например, используя карту для подключения действия к намерениям).

Я надеюсь, что это помогает.

person Ido Green    schedule 03.08.2017

В этом файле есть куча вещей, которые меня смущают, и мне интересно, не сбивает ли это с толку и node.js.

  • Вам не нужно создавать определение как для ActionsSdkApp, так и для ApiAiApp. Я бы попробовал удалить ActionsSdkApp и посмотреть, сработает ли это.

  • Вам не нужно вызывать status() или json() (для объекта res, который, как мне кажется, не существует в этой версии файла).

  • Номера строк не совпадают, но я предполагаю, что есть и другие вещи, которые могут запутать проблему.

person Prisoner    schedule 03.08.2017
comment
Спасибо за ваш ответ, я только что отредактировал свой вопрос. Надеюсь, теперь это не очень запутанно. Тем не менее, я все еще получаю ту же ошибку. - person Sukh; 03.08.2017