сохранение данных в разговорах с Actions в Google - PullRequest
0 голосов
/ 11 декабря 2018

Я разрабатываю приложение для Actions в Google и заметил, что при использовании библиотеки Dialogflow Fulfillment я не могу сохранить данные между разговорами.Вот код с использованием WebhookClient:

const { WebhookClient, Card, Suggestion } = require('dialogflow-fulfillment');
exports.aog_app = functions.https.onRequest((request, response)=>{
  let agent = new WebhookClient({request, response});
  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', (agent)=>{
    agent.add("hello there!") ;
  });
  intentMap.set('presentation', (agent)=>{
    let conv = agent.conv();
    let counter = conv.data.counter;
    console.log("counter", counter)
    if(counter){
      conv.data.counter = counter+1;
    }else{
      conv.data.counter = 1;
    }
    agent.add("counter is "+counter) ;
  });
  agent.handleRequest(intentMap)
});

counter остается неопределенным на каждом ходу.

Но при использовании действия в библиотеке Google Nodejs я могу сохранитьданные без проблем:

const {
  dialogflow,
  SimpleResponse,
  BasicCard,
  Permission,
  Suggestions,
  BrowseCarousel,
  BrowseCarouselItem,
  Button,
  Carousel,
  DateTime,
  Image,
  DialogflowConversation
} = require('actions-on-google');
const app = dialogflow({debug: true});
app.intent('Default Welcome Intent', (conv)=>{
  conv.ask("hello there!");
});
app.intent('presentation', (conv)=>{
  let counter = conv.data.counter;
  console.log("counter", counter)
  if(counter){
    conv.data.counter = counter+1;
  }else{
    conv.data.counter = 1;
  }
  conv.ask("counter is "+counter)

})
exports.aog_app = functions.https.onRequest(app);

counter увеличивается на каждый ход.

Существует ли способ сохранения данных между разговорами с использованием библиотеки выполнения Dialogflow?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

вам нужно добавить conv обратно к агенту после обновления conv.data

agent.add(conv);
0 голосов
/ 11 декабря 2018

Команда Google Dialogflow опубликовала пример кода, показывающий, как реализовать постоянство данных путем интеграции Google Firebase Cloud Firestore.

Вы можете найти образец здесь: https://github.com/dialogflow/fulfillment-firestore-nodejs

Это (вероятно) код, который вы ищете:

  function writeToDb (agent) {
    // Get parameter from Dialogflow with the string to add to the database
    const databaseEntry = agent.parameters.databaseEntry;

    // Get the database collection 'dialogflow' and document 'agent' and store
    // the document  {entry: "<value of database entry>"} in the 'agent' document
    const dialogflowAgentRef = db.collection('dialogflow').doc('agent');
    return db.runTransaction(t => {
      t.set(dialogflowAgentRef, {entry: databaseEntry});
      return Promise.resolve('Write complete');
    }).then(doc => {
      agent.add(`Wrote "${databaseEntry}" to the Firestore database.`);
    }).catch(err => {
      console.log(`Error writing to Firestore: ${err}`);
      agent.add(`Failed to write "${databaseEntry}" to the Firestore database.`);
    });
  }
...