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?
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
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.data
ou 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 );
// ...
});
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.