Come passare un altro parametro diverso dall'opzione dall'intento che mostra il carosello all'intento che gestisce il carosello?

Aug 17 2020

Sto usando l'intento di presentare prima il carosello all'utente. Quando l'utente fa clic su una delle opzioni nel carosello, nell'intento del gestore ottengo la chiave dell'elemento del carosello selezionato dall'utente.

Esempio di intento carosello,

app.intent('search', async (conv,params) => {
 conv.ask(`Choose one item`,new Carousel({
   title :`Search results`,
   items : carouselItems,
        }));
});

Esempio dell'intento del gestore,

app.intent('handle_carousel', async (conv,params,option) => {
const key = parseInt(option);
});

Tuttavia, insieme alla chiave dell'opzione selezionata, desidero anche passare un altro numero intero dall'intento del carosello all'intento del gestore. Questo altro numero intero è diverso per ogni opzione. Puoi pensare all'altro numero intero come a un ID, è unico per ogni opzione. Come posso ottenerlo?

Risposte

1 Prisoner Aug 17 2020 at 19:26

Hai alcuni approcci per passare dati aggiuntivi che dovrebbero essere associati a ciascuna chiave.

Il primo è, come si nota nella risposta, l'archiviazione di quella mappatura in una tabella che viene archiviata come parte dei dati della sessione (utilizzando conv.datao un contesto Dialogflow).

Un altro è codificare quei dati come parte della chiave che includi con ciascuna opzione, quindi decodificare la chiave quando la ricevi indietro.

Quindi, ad esempio, potresti rendere la chiave il risultato di una funzione di codifica come

function encodeOptionKey( key, otherValue ){
  return `${key}:${otherValue}`
}

e poi decodificarlo con una funzione come

function decodeOptionKey( option ){
  const [key,otherValue] = option.split(':');
  return {
    key,
    otherValue
  }
}

e chiama questo dal tuo gestore con qualcosa di simile

app.intent('handle_carousel', async (conv,params,option) => {
  const {key, otherValue} = decodeOptionKey( option );
  // ...
});
1 VaroOP Aug 17 2020 at 18:37

Ho creato una mappa delle chiavi di varie opzioni del carosello e il parametro corrispondente che volevo passare, ho salvato quella mappa in conv.data.store, che è l'archivio delle conversazioni fornito da action-on-google. Quindi ho usato quella mappa per ottenere il parametro dalla chiave del carosello che veniva passato all'intento del gestore.

Ad esempio nell'intento del carosello:

let map = {
keyofcarousel : option,
other_parameter : otherparam,
};

conv.data.store = map;

Quindi chiama conv.data.store nell'intento del gestore.