Atlı karıncayı gösteren amaçtan atlı karıncayı işleme amacına kadar seçenek dışında bir parametre daha nasıl geçirilir?
İlk olarak atlı karıncayı kullanıcıya sunmak için bir niyet kullanıyorum. Kullanıcı, atlı karıncadaki seçeneklerden birini tıkladığında, işleyici amacında, kullanıcının seçtiği atlı karınca öğesinin anahtarını alırım.
Atlıkarınca amacı örneği,
app.intent('search', async (conv,params) => {
conv.ask(`Choose one item`,new Carousel({
title :`Search results`,
items : carouselItems,
}));
});
İşleyicinin niyetine örnek,
app.intent('handle_carousel', async (conv,params,option) => {
const key = parseInt(option);
});
Bununla birlikte, seçilen seçeneğin anahtarı ile birlikte, atlıkarınca amacından işleyici amacına başka bir tamsayı geçirmek istiyorum. Bu diğer tam sayı, her seçenek için farklıdır. Diğer tamsayıyı bir kimlik olarak düşünebilirsiniz, her seçenek için benzersizdir. Bunu nasıl başarabilirim?
Yanıtlar
Her anahtarla ilişkilendirilmesi gereken ek verileri iletmek için birkaç yaklaşımınız vardır.
Birincisi, cevabınızda da not ettiğiniz gibi, bu eşlemeyi oturum verilerinin bir parçası olarak depolanan bir tabloda (ya conv.data
bir Dialogflow bağlamı kullanarak ) depolamaktır.
Bir diğeri, bu verileri her seçeneğe eklediğiniz anahtarın bir parçası olarak kodlamak ve ardından geri aldığınızda anahtarı çözmektir.
Dolayısıyla, örneğin, anahtarı aşağıdaki gibi bir kodlama işlevinin sonucu yapabilirsiniz:
function encodeOptionKey( key, otherValue ){
return `${key}:${otherValue}`
}
ve sonra bunun kodunu aşağıdaki gibi bir işlevle çözün:
function decodeOptionKey( option ){
const [key,otherValue] = option.split(':');
return {
key,
otherValue
}
}
ve bunu işleyicinizden şu şekilde arayın:
app.intent('handle_carousel', async (conv,params,option) => {
const {key, otherValue} = decodeOptionKey( option );
// ...
});
Çeşitli atlıkarınca seçeneklerinin anahtarlarının ve geçmek istediğim ilgili parametrenin bir haritasını oluşturdum, bu haritayı actions-on-google tarafından sağlanan konuşma deposu olan conv.data.store içine kaydettim. Daha sonra, işleyici amacına iletilmekte olan atlıkarınca anahtarından parametreyi almak için bu haritayı kullandım.
Örneğin atlıkarınca amacında:
let map = {
keyofcarousel : option,
other_parameter : otherparam,
};
conv.data.store = map;
Ardından işleyici amacında conv.data.store'u çağırın.