Как использовать поля и переменные для постоянного сохранения данных в Google Actions с Dialogflow? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь составить расписание-Google-Action. Акция должна сообщать всем субъектам определенного дня при звонке. Проблема в том, как мне постоянно сохранить данные на моем устройстве для доступа к данным в любое время?

Я пытался объявить поля в файле NODE.JS выполнения, но это не сработало вообще. (Я понял, что это была действительно глупая идея, так как код не работает как «программа», поэтому в фоновом режиме не работает скомпилированный материал). Следующим, что я попробовал, был фрагмент кода на сайте Google-Developer (https://developers.google.com/actions/assistant/save-data#df_nodejs) -> Snippet 1

У меня нет никаких дополнительных знаний о Java-Script или Node.JS или Google Actions в Dialogflow, но мой учитель сказал нам разработать приложение, не предоставляя никакой информации по этой теме.

Вы можете увидеть мой код выполнения в фрагменте 2

Фрагмент 1

function simpleResponse(conv) {
  conv.user.storage.count = 1;
  conv.ask('When is your birthday?');
}

Фрагмент 2

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

///// ОБНОВИТЬ /////

Я сейчас попробовал ваш код, но он вообще не работал. Google неверно истолковывает этот день без каких-либо изменений кода (я немного запутался), и строку (без тем) также нельзя сохранить.

Было бы здорово, если бы вы снова посмотрели на мой новый код выполнения и сказали, что не так.

Фрагмент 3

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

1 Ответ

0 голосов
/ 29 апреля 2019

Ваша основная проблема заключается в том, что в первом фрагменте используется библиотека actions-on-google вместо библиотеки dialogflow-fulfillment.

Функция userStorage доступна только для действий в Google, поэтому вам потребуетсяперевести весь ваш код для использования actions-on-google вместо dialogflow-fulfillment.

Вот краткий пример того, как вы можете настроить свой код для использования библиотеки.Это не полный набор изменений, но он должен помочь вам начать работу.

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