Поэтому я недавно начал работать над созданием некоторых облачных функций Firebase для выполнения агента Dialogflow на моей работе. Я создал метод адаптации для пользователей и могу взаимодействовать с БД Firestore без каких-либо проблем.
Во время моей работы у меня возникла идея использовать Firebase для личного проекта. Я реализовал почти идентичную встроенную функцию в моем личном проекте Firebase, но, к сожалению, я получаю ошибку при попытке взаимодействия с Firestore. Я дважды проверил, чтобы убедиться, что мои package.json и локальные среды разработки идентичны, и все же я продолжаю видеть эту ошибку. Любая помощь приветствуется. Кажется, не имеет значения, использую ли я тестовую консоль Dialogflow или Twilio, я получаю то же исключение. Почему-то происходит неправильное обращение с обещаниями.
'use strict';
const firefunc = require('firebase-functions');
const admin = require('firebase-admin');
const {WebhookClient} = require('dialogflow-fulfillment');
const serviceAccount = require('./service_account.json');
process.env.DEBUG = 'dialogflow:debug';
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
const db = admin.firestore();
const settings = {timestampsInSnapshots: true};
db.settings(settings);
exports.dfWebhook = firefunc.https.onRequest(async (request, response) => {
const agent = new WebhookClient({ request, response });
var uid;
if(agent.requestSource === 'twilio') {
uid = request.body.originalDetectIntentRequest.payload.data.From;
} else {
uid = 'TESTER';
}
console.log("USER ID : ", uid);
async function onboarding(agent) {
const { name, email, license } = agent.parameters;
console.log("-----STARTING ONBOARDING FUNCTION-----");
try {
const liceRef = db.collection('license').doc(license);
const getLice = await liceRef.get();
if(!getLice.exists) {
agent.add("I'm sorry, this license does not exist. blah blah");
} else {
if (getLice.data().uid !== uid && getLice.data().uid) {
agent.add("This license has already been activated for another user etc...");
} else {
await liceRef.set({
name: name,
email: email,
uid: uid
});
agent.add("blah blah success message");
}
}
} catch (err) {
console.error(err);
agent.add("I'm sorry, an error occured and I wasn't able to activate your license. Please try again later or contact support.");
}
}
... INTENT HANDLING CODE ETC ...
}
В обязательном порядке я получаю эту ошибку после моих записей в журнале:
8:11:13.748 AM - dfWebhook - Unhandled rejection
8:11:13.748 AM - dfWebhook - Error: No responses defined for platform: twilio
at V2Agent.sendResponses_ (/srv/node_modules/dialogflow-fulfillment/src/v2-agent.js:243:13)
at WebhookClient.send_ (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:505:17)
at promise.then (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:38)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
Единственное, о чем я могу думать, - это то, что между конфигурациями Firebase должно быть некоторое расхождение, возможно, Enterprise Google Cloud / Firebase отличается от Personal? Честно говоря, я в растерянности. Я либо пропускаю что-то безумно очевидное, либо происходит что-то еще, но кажется, что этот код должен работать. Мой опыт работы в качестве инженера Java, поэтому моё отсутствие проблем с Javascript и nodejs может вызвать у меня проблемы, но кажется странным, что почти идентичная функция будет работать в одном проекте, а не в другом.
Заранее спасибо за помощь.
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.