首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Dialogflow的Google Actions中使用字段和变量永久保存数据?

如何在使用Dialogflow的Google Actions中使用字段和变量永久保存数据?
EN

Stack Overflow用户
提问于 2019-04-30 00:48:38
回答 1查看 604关注 0票数 0

我正在尝试建立一个时间表-谷歌-行动。动作应该是在呼叫时告诉特定日期的所有主体。问题是,如何将数据永久保存在我的设备上,以便随时访问数据?

我试图在fulfillment NODE.JS-File中声明字段,但根本不起作用。(我意识到这是一个非常愚蠢的想法,因为代码不能作为“程序员”工作,所以没有编译好的东西在后台运行)。我尝试的下一件事是谷歌开发人员网站(https://developers.google.com/actions/assistant/save-data#df_nodejs)上的->代码片段1

我对对话流中的Java-Script或Node.JS或Google Actions没有任何进一步的了解,但我的老师告诉我们开发一个应用程序时,不要给出任何关于那个主题的信息。

您可以在代码片段2中查看我的实现代码

代码段1

代码语言:javascript
复制
function simpleResponse(conv) {
  conv.user.storage.count = 1;
  conv.ask('When is your birthday?');
}

代码段2

代码语言:javascript
复制
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
const {Card, Suggestion} = require('dialogflow-fulfillment');

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));

 /*  FUNCTIONS  */ 
  function getSubjects(agent) {
    const date = agent.parameters.date;
    const dateIso = new Date(date);
    const weekDayInt = dateIso.getDay();
    var dayString = '';
    switch (weekDayInt){
      case 0: dayString='Sonntag'; 
        var output = agent.user.storage.sun.join(' ');
      break;
      case 1: dayString='Montag'; 
        var output = agent.user.storage.mon.join(' ');
      break;
      case 2: dayString='Dienstag'; 
        var output = agent.user.storage.tue.join(' ');
      break;
      case 3: dayString='Mittwoch'; 
        var output = agent.user.storage.wed.join(' ');
      break;
      case 4: dayString='Donnerstag'; 
        var output = agent.user.storage.thu.join(' ');
      break;
      case 5: dayString='Freitag'; 
        var output = agent.user.storage.fri.join(' ');
      break;
      case 6: dayString='Samstag'; 
       var output = agent.user.storage.sat.join(' ');
      break;
    }
    agent.add(`This message is from Dialogflow's Cloud Functions for Firebase editor!`);
      agent.add(new Card({
        title:`Dein Stundenplan für `+dayString+`:`,
          //imageUrl: 'https://developers.google.com/actions/images/badges/XPM_BADGING_GoogleAssistant_VER.png',
          text: 'Du hast heute'+output+' .',
          buttonText: 'This is a button',
          buttonUrl: 'https://assistant.google.com/'
      })
    );
      agent.add(new Suggestion(`Stundenplan für heute`));
      agent.add(new Suggestion(`Stundenplan für morgen`));
  }

  function setSubject(agent){
    const subject = agent.parameters.subject;
    const date = agent.context.get('date');
    const dateIso = new Date(date);
    const weekDayInt = dateIso.getDay();
    var dayString = '';
    switch (weekDayInt){
      case 0: dayString='Sonntag';
        agent.user.storage.sun.push(subject);
        break;
      case 1: dayString='Montag';
        agent.user.storage.mon.push(subject);
        break;
      case 2: dayString='Dienstag';
        agent.user.storage.tue.push(subject);
        break;
      case 3: dayString='Mittwoch';
        agent.user.storage.wed.push(subject);
        break;
      case 4: dayString='Donnerstag';
        agent.user.storage.thu.push(subject);
        break;
      case 5: dayString='Freitag';
        agent.user.storage.fri.push(subject);
        break;
      case 6: dayString='Samstag';
        agent.user.storage.sat.push(subject);
        break;
    }
  }
  let intentMap = new Map();
  intentMap.set('Stundenplan', getSubjects);
  intentMap.set('WhichSubject', setSubject);
  // intentMap.set('your intent name here', yourFunctionHandler);
  // intentMap.set('your intent name here', googleAssistantHandler);
  agent.handleRequest(intentMap);
});

/更新/

我现在尝试了你的代码,但它根本不起作用。谷歌解释错误的一天没有任何改变的代码(我有点困惑)和字符串(主题)也不能保存。

如果你能再看一遍我的新实现代码,告诉我哪里出了问题,那就太好了。

代码片段3

代码语言:javascript
复制
'use strict';
const functions = require('firebase-functions');
const {dialogflow, BasicCard, Suggestions} = require('actions-on-google');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

const app = dialogflow();

app.intent('GetTimeTable', (conv, {date}) => {
  const dateIso = new Date(date);
  const weekDayInt = dateIso.getDay();
  let dayString = '';
  let output = '';
  switch (weekDayInt) {
    case 0:
      dayString = 'Sonntag';
      output = conv.user.storage.sun;
      break;
    case 1:
        dayString='Montag'; 
        output = conv.user.storage.mon;
      break;
    case 2:
      dayString='Dienstag'; 
      output = conv.user.storage.tue;
      break;
    case 3:
      dayString='Mittwoch'; 
      output = conv.user.storage.wed;
      break;
    case 4:
      dayString='Donnerstag'; 
      output = conv.user.storage.thu;
      break;
    case 5:
      dayString='Freitag'; 
      output = conv.user.storage.fri;
      break;
    case 6:
      dayString='Samstag'; 
      output = conv.user.storage.sat;
      break;
  }
  conv.ask(`Du hast am ${dayString} ${output}`);
  conv.ask(new BasicCard({
    title: `Dein Studenplan für ${dayString}:`,
    text: `Du hast ${dayString}  ${output}.`,
  }));
});


app.intent('WhichSubject', (conv, {date, subject}) => {    
  const dateIso = new Date(date);
  const weekDayInt = dateIso.getDay();
  let dayString = '';
  //conv.user.storage.sun = 'Deutsch';

  switch (weekDayInt){
    case 0:
      dayString='Sonntag';
      conv.user.storage.sun = ''+subject;
      break;
    case 1:
      dayString='Montag';
      conv.user.storage.mon = ''+subject;
      break;
    case 2:
      dayString='Dienstag';
      conv.user.storage.tue = subject;
      break;
    case 3:
      dayString='Mittwoch';
      conv.user.storage.wed = subject;
      break;
    case 4:
      dayString='Donnerstag';
      conv.user.storage.thu = subject;
      break;
    case 5:
      dayString='Freitag';
      conv.user.storage.fri = subject;
      break;
    case 6:
      dayString='Samstag';
      conv.user.storage.sat = subject;
      break;
  }
  conv.ask(`Am ${dayString} das Fach ${subject}.`);
  conv.ask(new BasicCard({
    title: `Neu gespeichert:`,
    text: `Am ${dayString} das Fach ${subject}.`,
  }));

});

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
EN

回答 1

Stack Overflow用户

发布于 2019-04-30 03:19:10

您的主要问题是,在第一个代码片段中,它假定使用actions-on-google库而不是dialogflow-fulfillment库。

userStorage功能仅适用于谷歌上的操作,因此您需要将所有代码转换为使用actions-on-google而不是dialogflow-fulfillment

下面是一个快速示例,说明如何调整代码以使用库。这不是一组完整的更改,但应该可以帮助您入门。

代码语言:javascript
复制
const functions = require('firebase-functions');
const {dialogflow, BasicCard, Suggestions} = require('actions-on-google');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

const app = dialogflow();

app.intent('Stundenplan', (conv, {date}) => {
  const dateIso = new Date(date);
  const weekDayInt = dateIso.getDay();
  let dayString = '';
  let output = '';
  switch (weekDayInt) {
    case 0:
      dayStrin = 'Sonntag';
      output = conv.user.storage.sun.join(' ');
      break;
    // ...
  }
  conv.ask('This message is from the Dialogflow Cloud Function for Firebase editor');
  conv.ask(new BasicCard({
    title: `Dein Studenplan für ${dayString}:`,
    text: `Du hast heute ${output}.`,
    buttonText: 'This is a button',
    buttonUrl: 'https://assistant.google.com/'
  }));
  conv.ask(new Suggestions('Stundenplan für heute', 'Stundenplan für morgen'))
})

exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55907685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档