Como passar mais um parâmetro que não seja opção do intent que mostra o carrossel para o intent que manipula o carrossel?

Aug 17 2020

Estou usando uma intenção de primeiro apresentar o carrossel ao usuário. Quando o usuário clica em uma das opções do carrossel, na intenção do manipulador eu recebo a chave do item do carrossel que o usuário selecionou.

Exemplo de intenção de carrossel,

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

Exemplo da intenção do manipulador,

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

No entanto, junto com a chave da opção selecionada, também quero passar outro inteiro da intenção do carrossel para a intenção do manipulador. Este outro inteiro é diferente para cada opção. Você pode pensar no outro inteiro como um ID, é único para cada opção. Como posso conseguir isso?

Respostas

1 Prisoner Aug 17 2020 at 19:26

Você tem algumas abordagens para passar dados adicionais que devem ser associados a cada chave.

A primeira é, como você observou em sua resposta, armazenar esse mapeamento em uma tabela que é armazenada como parte dos dados da sessão (usando conv.dataou um contexto do Dialogflow).

Outra é codificar esses dados como parte da chave incluída em cada opção e, em seguida, decodificar a chave quando recuperá-la.

Assim, por exemplo, você pode tornar a chave o resultado de uma função de codificação como

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

e, em seguida, decodifique-o com uma função como

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

e chame isso do seu manipulador com algo como

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

Criei um mapa das chaves de várias opções do carrossel e o parâmetro correspondente que queria passar, salvei esse mapa em conv.data.store, que é o armazenamento de conversas fornecido pelo actions-on-google. Em seguida, usei esse mapa para obter o parâmetro da chave do carrossel que estava sendo passada para a intenção do manipulador.

Por exemplo, na intenção do carrossel:

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

conv.data.store = map;

Em seguida, chame conv.data.store na intenção do manipulador.