Ошибка типа: невозможно прочитать свойство 'forEach' из неопределенного в V2Agent.addActionsOnGoogle_ - PullRequest
0 голосов
/ 24 января 2019

Я создаю чат-бота с использованием диалогового потока, Actions-on-Google и размещаю его в AWS Lambda.Я пытаюсь запросить разрешения пользователя, но у меня возникает проблема, когда я пытаюсь добавить некоторые действия в Google, например, разрешения.

Я попробовал то, что делает пример диалогового потока:

https://github.com/dialogflow/fulfillment-actions-library-nodejs/blob/master/functions/index.js

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

 router.post('/', (request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  function welcome(agent) {
    agent.add(`Welcome to the webhook`);
  }

  function fallback(agent) {
    agent.add(`I didn't understand`);
    agent.add(`I'm sorry, can you try again?`);
  } 

function locationIntent(agent) {
    let conv = agent.conv();
    conv.ask(new Permission({
      context: 'To give results in your area',
      permissions: 'DEVICE_PRECISE_LOCATION',
    }))
    agent.add(conv);
  }

// Run the proper function handler based on the matched Dialogflow intent name
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('Default Fallback Intent', fallback);

  if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
    intentMap.set('location', locationIntent);
  } else {
    intentMap.set(null, other);
  }
  agent.handleRequest(intentMap);
});

app.use('/', router);

module.exports = app;

Я уже использовал это

const { WebhookClient} = require('dialogflow-fulfillment');

const { dialogflow,
  SimpleResponse,
  BasicCard,
  Suggestions,
  Permission,
  UpdatePermission,
  RegisterUpdate,
  Carousel,
} = require('actions-on-google');

, и мои зависимости:

  "dependencies": {
    "actions-on-google": "^2.5.0",
    "aws-serverless-express": "^3.3.5",
    "body-parser": "^1.18.3",
    "compression": "^1.7.3",
    "cors": "^2.8.5",
    "dialogflow": "^4.0.3",
    "dialogflow-fulfillment": "^0.6.1",
    "express": "^4.16.4",
    "googleapis": "^27.0.0"
  }

Я получаю разрешение от этогосообщение в блоге dialogflow: https://blog.dialogflow.com/post/fulfillment-library-beta/

Я проверил журналы в своей aws-lambda и обнаружил следующее:

TypeError: Невозможно прочитать свойство 'forEach' из undefined в V2Agent.addActionsOnGoogle_

Это происходит, когда я делаю agent.add(conv).Если я agent.add("This is location permission intent"); работает.Я ожидаю получить разрешение и использовать его позже для получения некоторых координат

Я использую узел v10.15.0

Stracktrace от aws-lambda:

2019-01-24T12:42:52.013Z    2531e964-1f94-4f41-997a-a4ef14cb55da    TypeError: Cannot read property 'forEach' of undefined
at V2Agent.addActionsOnGoogle_ (/var/task/node_modules/dialogflow-fulfillment/src/v2-agent.js:313:29)
at WebhookClient.addResponse_ (/var/task/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:269:19)
at WebhookClient.add (/var/task/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:245:12)
at locationIntent (/var/task/app.js:75:11)
at WebhookClient.handleRequest (/var/task/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:44)
at router.post (/var/task/app.js:156:9)
at Layer.handle [as handle_request] (/var/task/node_modules/express/lib/router/layer.js:95:5)
at next (/var/task/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/var/task/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/var/task/node_modules/express/lib/router/layer.js:95:5)

Примечание: я уже пытался использовать другие элементы из таких действий в Google, как карусель, и потерпел неудачу.Это заставляет меня думать, что что-то не так с agent.add или conv

1 Ответ

0 голосов
/ 24 января 2019

Это настоятельно говорит о том, что, несмотря на перечисленные зависимости, вы используете более старую версию библиотеки dialogflow-fulfillment.Убедитесь, что у вас установлены последние версии

npm update
...