Не получить предметы в Карусели в Действиях в Google - PullRequest
0 голосов
/ 14 июня 2019
    app.intent('Our Events', (conv) =>{
  if (!conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')) {
  conv.ask('Sorry, try this on a screen device or select the ' +
    'phone surface in the simulator.');
  return;
}
  conv.ask(getdata());
  conv.ask('Events are here!');
});


function getdata()
{
  let carouselItems ={};
  var events = db.collection('events').get().then(snapshot =>{
                                                    snapshot.forEach(doc=>{
                                                      let itemdetails ={
                                                        title:doc.data().title,
                                                        description:doc.data().info,
image: new Image({
                                                                url:doc.data().image_url,
                                                                alt:'Image',
                                                            }),
                                                          };
                                                          carouselItems[doc.id]=itemdetails;
                                                          console.log(carouselItems[doc.id]);
                });
      });
      return new Carousel({
            title:'Our Events',
            items: carouselItems,
        });
    }

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Ваша функция должна быть переписана так, чтобы ваш обработчик намерений знал, что операция асинхронная. Обратите внимание на добавление ключевых слов async и await, которые будут информировать переводчика, когда данная команда будет выполнена.

app.intent('Our Events', async (conv) =>{
  if (!conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT')) {
  conv.ask('Sorry, try this on a screen device or select the ' +
    'phone surface in the simulator.');
  return;
}
  conv.ask(await getdata());
  conv.ask('Events are here!');
});


async function getdata() {
  let carouselItems ={};
  const snapshot = db.collection('events').get()
  snapshot.forEach(doc=>{
    let itemdetails ={
      title:doc.data().title,
      description:doc.data().info,
      image: new Image({
        url:doc.data().image_url,
        alt:'Image',
      }),
    };
   carouselItems[doc.id]=itemdetails;
   console.log(carouselItems[doc.id]);
  });

  return new Carousel({
    title:'Our Events',
    items: carouselItems,
  });
}
0 голосов
/ 14 июня 2019

Карусели - это визуальные ответы на выбор, и для их распознавания требуется уникальный ключ. Таким образом, вы должны дать ключ выбора всем объектам карусельных элементов. В вашем случае кажется, что вы добавляете объекты без ключа в массив.

Пожалуйста, проверьте образец ниже и попробуйте создать объекты в соответствии со структурой.

  items: {
    // Add the first item to the carousel
    'SELECTION_KEY_ONE': {
      synonyms: [
        'synonym 1',
        'synonym 2',
        'synonym 3',
      ],
      title: 'Title of First Carousel Item',
      description: 'This is a description of a carousel item.',
      image: new Image({
        url: 'IMG_URL_AOG.com',
        alt: 'Image alternate text',
      }),
    },
    // Add the second item to the carousel
    'SELECTION_KEY_GOOGLE_HOME': {
      synonyms: [
        'Google Home Assistant',
        'Assistant on the Google Home',
    ],
      title: 'Google Home',
      description: 'Google Home is a voice-activated speaker powered by ' +
        'the Google Assistant.',
      image: new Image({
        url: 'IMG_URL_GOOGLE_HOME.com',
        alt: 'Google Home',
      }),
    },
    // Add third item to the carousel
    'SELECTION_KEY_GOOGLE_PIXEL': {
      synonyms: [
        'Google Pixel XL',
        'Pixel',
        'Pixel XL',
      ],
      title: 'Google Pixel',
      description: 'Pixel. Phone by Google.',
      image: new Image({
        url: 'IMG_URL_GOOGLE_PIXEL.com',
        alt: 'Google Pixel',
      }),
    },
  },
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...