Я сейчас создаю чат-бота для моей дипломной работы в университете. Я использую 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, а не только в письменных ответах, которые бот сообщает :-(
Спасибо за любые советы или помощь!