Я сохранял свои переменные сеанса как контексты , и в предыдущих выпусках он работал нормально.
На этот раз, когда я проверил, этот код перестал работать.
У моего package.json есть зависимости
"dependencies": {
"actions-on-google": "^2.4.0",
.
.
.
"dialogflow-fulfillment": "^0.6.0"
}
Тогда мой код выглядит как
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
// Handle the Dialogflow intent named 'welcome'.
function welcome(agent) {
const sessionVars = {'userLang': 'en', // possibilites handled - 'en', 'hi'
'words': [],
'questions': [],
'currentIndexPosition': 0,
'score': 0,
};
const sessionContext = {'name': KEY_SESSION, 'lifespanCount': 10000, 'parameters': sessionVars};
agent.setContext(sessionContext);
.
.
.
//Rest of the code
}
// Start a new round of learning by selecting words
function startLearning(agent) {
let sessionContext = agent.getContext(KEY_SESSION);
let sessionParams = sessionContext.parameters;
let conv = agent.conv();
conv.ask('Awesome! Let\'s learn a new word. ');
database_path = DATABASE_PATH_LEARNING_EN;
return firebaseAdmin.database().ref(database_path)
.once('value')
.then( (data) => {
// --- Code that reads data from database and stores in variable words ---
// Update session data
sessionParams.words = utils.getRandomItemList(words, QUESTIONS_PER_PRACTICE);
let currentIndexPosition = 0;
sessionParams.currentIndexPosition = currentIndexPosition;
// --- printing sessionContext value shows correctly updated data here ---
// Update session data
agent.setContext(sessionContext);
} else {
conv.close('No words to learn.');
}
agent.add(conv);
return agent;
});
}
// Repeat the word for learning
function repeatWord(agent) {
let sessionContext = agent.context.get(KEY_SESSION);
let sessionParams = sessionContext.parameters;
agent.add(JSON.stringify(sessionContext));
}
Контекст устанавливается в welcome (). Я могу получить его в startLearning (), и печать сеансаContext в диалог после обновления также показывает, что данные были там.
Затем я обновляю контекст агента как sessionContext.
В следующем намерении потока - repeatWord (в настоящее время имеется только код, необходимый для отладки), я не получаю обновленное значение контекста.
Я пробовал как agent.setContext (sessionContext), так и agent.context.set (sessionContext). Кажется, что оба работают одинаково и у меня не работают.