Используя Google Действия, сделанные в Dialogflow с Javascript (React Library)? - PullRequest
0 голосов
/ 10 января 2019

Я сейчас создаю чат-бота для моей дипломной работы в университете. Я использую React (Javascript) + Dialogflow для него. Я связал диалоговое окно с моим проектом, и ответы на все вопросы работают отлично. Но он не показывает никаких действий Google, которые я определил в диалоге Google - я сделал карусель и несколько примеров фишек, на которые пользователь мог бы кликнуть. Я сейчас использую API V1, поскольку V2 не работать до сих пор, это может быть важно знать.

Это первый раз, когда я использую диалоговое окно, так что я довольно новый, пожалуйста, будьте осторожны!

Я провел много исследований, но до сих пор, но я не нашел никакого решения о том, как просто "интегрировать" функции из Google Actions в мой проект javascript. Нужно ли устанавливать некоторые зависимости через композитор? Я обнаружил, что стандартные сообщения выглядят по-разному в сгенерированном JSON-файле, который строит Dialogflow, но пока это мне совсем не помогло.

При попытке использовать:

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

Я всегда получаю это сообщение об ошибке:

TypeError: undefined is not an object (evaluating 'Object.getPrototypeOf(obj)') 
exports
node_modules/gtoken/node_modules/pify/index.js:8

Это часть кода, где я интегрировал Google Dialogflow так, как я видел его в другом примере кода (используя токен доступа клиента).

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './App.css';

process.env.DEBUG = 'actions-on-google:*';

var data = {
    headerText: "Hello! Welcome to Moodie's!",
    p2Text: "Made with React + Dialogflow",
    userMessages: [],
    botMessages: [],
    botGreeting: "Hallo! Ich bin Moodie, wie kann ich dir helfen?",
    botLoading: false
};

class App extends Component {
    constructor(props) {
        super(props);
        this.state = data;
}

updateUserMessages = newMessage => {
    if (!newMessage) {
        return;
    }

    var updatedMessages = this.state.userMessages;

    var updatedBotMessages = this.state.botMessages;

    this.setState({
        userMessages: updatedMessages.concat(newMessage),
        botLoading: true
    });

    // Replace with your Dialogflow client token
    var request = new Request(
        "https://api.dialogflow.com/v1/query?v=20150910&contexts=shop&lang=de&query=" +
        newMessage +
        "&sessionId=12345",
        {
            headers: new Headers({
                Authorization: "Bearer c5551d4e695247bfb0c3e5899b26a322"
            })
        }
    );

    fetch(request)
        .then(response => response.json())
        .then(json => {
            var botResponse = json.result.fulfillment.speech;

            this.setState({
                botMessages: updatedBotMessages.concat(botResponse),
                botLoading: false
            });
        })
        .catch(error => {
            console.log("ERROR:", error);
            this.setState({
                botMessages: updatedBotMessages.concat("??"),
                botLoading: false
            });
        });
};

Это мой package.json со всеми установленными зависимостями, если это необходимо:

{
  "name": "untitled",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@progress/kendo-react-conversational-ui": "^2.5.0",
    "@progress/kendo-react-dateinputs": "^2.5.0",
    "api-ai-javascript": "^2.0.0-beta.21",
    "dialogflow": "^0.7.0",
    "google-assistant": "^0.5.2",
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-scripts": "2.1.3",
    "actions-on-google": "^2.2.0",
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "dialogflow-fulfillment": "^0.5.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ] 
}

Буду признателен за любую помощь. Я просто хочу, чтобы мои определенные Действия Google отображались также в моем прототипе, который я сделал через Javascript, а не только в письменных ответах, которые бот сообщает :-( Спасибо за любые советы или помощь!

...