Я недавно писал о подключении MongoDB с Dialogflow здесь .
Как я уже говорил ранее, вы не сможете подключиться к локальному экземпляру вашего Postgres, работающему на localhost: 5432(ни MySQL на localhost: 8080).Вы должны использовать размещенный Postgres сервис, такой как ElephantSQL (для других баз данных, кроме Firebase / Firestore.)
Теперь для перехода к вашему ответу, прежде всего, важно серьезно отнестись к этому сообщению:
Платежная учетная запись не настроена.Внешняя сеть недоступна, и квоты строго ограничены.Настройте платежную учетную запись, чтобы снять эти ограничения
. Для решения этой проблемы чрезвычайно важно вы используете платежную учетную запись, например Blaze Plan of firebase для доступа к внешним сетям (которыебазы данных, размещенные в качестве службы в вашем случае) См. этот .
код
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');
const pg = require('pg');
const connectionString = process.env.DATABASE_URL || 'postgres://fsdgubow:K4R2HEcfFeYHPY1iLYvwums3oWezZFJy@stampy.db.elephantsql.com:5432/fsdgubow';
const client = new pg.Client(connectionString);
client.connect();
//const query = client.query('CREATE TABLE items(id SERIAL PRIMARY KEY, text VARCHAR(40) not null, complete BOOLEAN)');
});
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
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));
function welcome(agent) {
const text = 'INSERT INTO items(text, complete) VALUES($1, $2) RETURNING *'
const values = ['some item text', '1' ]
// insert demo in your items database
client.query(text, values)
.then(res => {
console.log(res.rows[0])
//see log for output
})
.catch(e => console.error(e.stack))
// sample query returning current time...
return client.query('SELECT NOW() as now')
.then((res) => {
console.log(res.rows[0]);
agent.add(`Welcome to my agent! Time is ${res.rows[0].now}!`);
})
.catch(e => console.error(e.stack))
}
function fallback(agent) {
agent.add(`I didn't understand`);
agent.add(`I'm sorry, can you try again?`);
}
// Run the proper function handler based on the matched Dialogflow intent name
let intentMap = new Map();
intentMap.set('welcome', welcome);
intentMap.set('Default Fallback Intent', fallback);
// intentMap.set('your intent name here', yourFunctionHandler);
// intentMap.set('your intent name here', googleAssistantHandler);
agent.handleRequest(intentMap);
});
консоль ElephantSQL
Журналы Firebase
Google Assistant
Я использовал ElephantSQL для демонстрации здесь.Ищите больше запросов .Убедитесь, что вы поставили return перед их успешным выполнением и избегайте "MalformedResponse: Webhook error (206)"
!
Надеюсь, что ответит на все ваши запросы.Удачи!