Я пытаюсь понять, как Dialogflow оценивает контексты. В середине сеанса, когда существует несколько активных контекстов, и пользователь вводит высказывание, которое имеет прямое совпадение с двумя или более намерениями, использующими эти активные контексты, что определяет, какое намерение будет инициировано? (при условии, что уровни достоверности одинаковы)
Кроме того, меняет ли включение выполнения то, как контексты имеют приоритет? Если нет, то почему включение выполнения меняет ответ, когда веб-хук ничего не делает?
Вот пример проблемы, с которой я сталкиваюсь.
У меня два почти идентичных потока:
Каждое подчиненное намерение запускается либо «да», либо «нет», и все выходные контексты имеют время жизни 5 витков. Обе идентичны во всех аспектах, за исключением того, что Flow2 имеет выполнение, включенное для всех намерений, и Flow1 отключает их все.
Поток 1
Если я наберу «нет» -> «нет» -> «нет» -> «да»
Порядок сработавших намерений будет:
- ContextTest.no1
- ContextTest.no1.no2
- ContextTest.no1.no2.no3
- ContextTest.no1.no2.yes3
Поток 2
Если я наберу те же самые точные высказывания в том же порядке,
Порядок сработавших намерений будет:
- ContextTestFF.no1
- ContextTestFF.no1.no2.no3
- ContextTestFF.yes1
Почему Поток 1 переходит от №3 к Да3, а Поток 2 возвращается к Да1?
Вот код веб-хука. Как видите, запрос просто повторяется, и ничего не меняется.
'use strict'
const Functions = require('firebase-functions')
exports.dialogflowFirebaseFulfillment = Functions.https.onRequest((request, response) => {
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
let text = request.body.queryResult.fulfillmentText
let responseToUser = {
"source": "NeuraFlash",
"fulfillmentMessages": [{
"text": {
"text": [text]
}
}],
"fulfillmentText": [text]
}
responseToUser.outputContexts = request.body.queryResult.outputContexts
console.log('Response: ' + JSON.stringify(responseToUser))
response.json(responseToUser)
return response
});