0

I want to show items dynamically by using a for loop in CollectionBrowse. I'm using the code below, but actions on google returns an error when I use it.

const {
  conversation,
  Simple,
  Card,
  Image,
  Button,
  List,
  Link,
  Table,
  CollectionBrowse,
  Suggestion,
  Schema
}  = require('@assistant/conversation');
const functions = require('firebase-functions');
const app = conversation({debug:true});

app.handle('callApi', (conv) => {
  conv.add(new CollectionBrowse({
   items:[
        {
          title: 'Item #1',
          description: 'Description of Item #1',
          footer: 'Footer of Item #1',
          image: {
            url: 'https://developers.google.com/assistant/assistant_96.png',
          },
          openUriAction: {
            url: 'https://www.example.com',
          },
        },
        {
          title: 'Item #2',
          description: 'Description of Item #2',
          footer: 'Footer of Item #2',
          image: {
            url: 'https://developers.google.com/assistant/assistant_96.png',
          },
          openUriAction: {
            url: 'https://www.example.com',
          },
        },
     {
          title: 'Item #3',
          description: 'Description of Item #3',
          footer: 'Footer of Item #3',
          image: {
            url: 'https://developers.google.com/assistant/assistant_96.png',
          },
          openUriAction: {
            url: 'https://www.example.com',
          },
        }
      ]
  }));
});

exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);

I would like to change my code to something along the lines of the example below.

conv.add(new CollectionBrowse({
   items:[
        for(var i = 1; i < 4; i++){   <------------------------- i want it!!!!!!
         {
           title: 'Item #'+i,
           description: 'Description of Item #'+i,
           footer: 'Footer of Item #'+i,
           image: {
             url: 'https://www.example.com',
           },
           openUriAction: {
             url: 'https://www.example.com',
           },
         }
       }
      ]
  }));

What should I do with the for loop statement, if not this way, is there another way?

Thank you.

Prisoner
  • 49,922
  • 7
  • 53
  • 105
박동석
  • 99
  • 6

1 Answers1

2

I found the answer myself!

You can create the array using a loop, and then create a new CollectionBrowse object using this array.

const {
  conversation,
  Simple,
  Card,
  Image,
  Button,
  List,
  Link,
  Table,
  CollectionBrowse,
  Suggestion,
  Schema
}  = require('@assistant/conversation');
const functions = require('firebase-functions');
const app = conversation({debug:true});

app.handle('callApi', (conv) => {
  
  var titleArr = ['Item #1','Item #2','Item #3'];
  var descriptionArr = ['Description #1','Description #2','Description #3'];
  var footerArr = ['footer #1','footer #2','footer #3'];
  var imageArr = [{url: 'https://developers.google.com/assistant/assistant_96.png'},{url: 'https://developers.google.com/assistant/assistant_96.png'},{url: 'https://developers.google.com/assistant/assistant_96.png'}];
  var openUriActionArr = [{url: 'https://www.example.com'},{url: 'https://www.example.com'},{url: 'https://www.example.com'}];
  var itemsArr = [];
  
  for(var i = 0; i<3; i++){
    itemsArr.push({
      title : titleArr[i],
      description : descriptionArr[i],
      footer : footerArr[i],
      image : imageArr[i],
      openUriAction : openUriActionArr[i]
    });
  }
    
  conv.add(new CollectionBrowse({
   items: itemsArr
  }));
});

exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
Prisoner
  • 49,922
  • 7
  • 53
  • 105
박동석
  • 99
  • 6