Я работаю с Dialog Flow и мне нужно получить идентификатор пользователя (точнее, уникальный идентификатор пользователя).Приложение Google Assistant отлично подходит для входа в систему, но когда я пытаюсь получить уникальный идентификатор, в результате я получаю "undefined".
Я много раз искал в Google, но не смог найти ответ.
Моё приложение Google Assistant изначально позволяет пользователю войти в систему, затем использует его Уникальный идентификатор в качестве идентификатора базы данных Firebase, сохраняет его данные в полях (например, детали заказа, детали оплаты и т. Д.,) И показывает их, когда пользовательвызывает намерение, связанное с этим.
Я уже объявил сущности и Интенты, которые были указаны в выполнении.
index.js Выполнения -------------------------------
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const {
dialogflow,
SignIn
} = require("actions-on-google");
process.env.DEBUG = 'dialogflow:debug';
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((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));
const app = dialogflow({
clientId:'<CLIENT ID>'
});
app.intent("Sign in user", conv => {
conv.ask(new SignIn("To personalize"));
});
var payload;
app.intent('Get Signin', (conv, params, signin) => {
if (signin.status === 'OK') {
payload = conv.user.profile.payload;
}
}
);
function welcome(agent) {
let conv = agent.conv();
var name = conv.user.access.token;
agent.add(`Welcome to the Bot ${name}! How can I help?`);
}
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
function getOrderDetails(agent) {
const dbRef = db.collection('users').doc("test");
return dbRef.get()
.then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
} else {
agent.add("Your order status is "+doc.data().orderStatus);
}
return Promise.resolve('Read complete');
});
}
function getPaymentDetails(agent) {
const dbRef = db.collection('users').doc("test");
return dbRef.get()
.then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
} else {
agent.add("Your payment is "+doc.data().paymentStatus);
}
return Promise.resolve('Read complete');
});
}
function getDeliveryDetails(agent) {
const dbRef = db.collection('users').doc("test");
return dbRef.get()
.then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
} else {
agent.add("Your delivery Status is "+doc.data().deliveryDetails);
}
return Promise.resolve('Read complete');
});
}
function getAllDetails(agent) {
const dbRef = db.collection('users').doc("test");
return dbRef.get()
.then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
} else {
agent.add("Delivery details" + doc.data().deliveryDetails + "\nOrder Status " + doc.data().orderStatus + "\nPayment Details " + doc.data().paymentStatus);
}
return Promise.resolve('Read complete');
});
}
let intentMap = new Map();
intentMap.set('Default Welcome Intent', welcome);
intentMap.set('Default Fallback Intent', fallback);
intentMap.set('GetDeliveryStatus', getDeliveryDetails);
intentMap.set('GetPaymentDetails', getPaymentDetails);
intentMap.set('GetOrderDetails', getOrderDetails);
agent.handleRequest(intentMap);
});