Comment passer un paramètre de plus autre que l'option de l'intent montrant le carrousel à l'intent gérant le carrousel?

Aug 17 2020

J'utilise une intention pour présenter d'abord le carrousel à l'utilisateur. Lorsque l'utilisateur clique sur l'une des options du carrousel, dans l'intention du gestionnaire, j'obtiens la clé de l'élément du carrousel que l'utilisateur a sélectionné.

Exemple d'intention de carrousel,

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

Exemple de l'intention du gestionnaire,

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

Cependant, avec la clé de l'option sélectionnée, je souhaite également transmettre un autre entier de l'intention du carrousel à l'intention du gestionnaire. Cet autre entier est différent pour chaque option. Vous pouvez considérer l'autre entier comme un ID, il est unique pour chaque option. Comment puis-je y parvenir ?

Réponses

1 Prisoner Aug 17 2020 at 19:26

Vous disposez de plusieurs approches pour transmettre des données supplémentaires qui doivent être associées à chaque clé.

La première consiste, comme vous le notez dans votre réponse, à stocker ce mappage dans une table qui est stockée dans le cadre des données de session (soit en utilisant conv.datasoit un contexte Dialogflow).

Une autre consiste à encoder ces données dans le cadre de la clé que vous incluez avec chaque option, puis à décoder la clé lorsque vous la récupérez.

Ainsi, par exemple, vous pouvez faire de la clé le résultat d'une fonction d'encodage telle que

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

puis décodez-le avec une fonction telle que

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

et appelez cela depuis votre gestionnaire avec quelque chose comme

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

J'ai créé une carte des clés de diverses options de carrousel et le paramètre correspondant que je voulais transmettre, enregistré cette carte dans conv.data.store, qui est le stockage de conversation fourni par actions-on-google. Ensuite, j'ai utilisé cette carte pour obtenir le paramètre de la clé du carrousel qui était transmise à l'intention du gestionnaire.

Par exemple dans l'intent carrousel :

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

conv.data.store = map;

Appelez ensuite conv.data.store dans l'intention du gestionnaire.