Dialogflow - включение выполнения возвращает другое намерение, даже когда webhook ничего не делает - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь понять, как Dialogflow оценивает контексты. В середине сеанса, когда существует несколько активных контекстов, и пользователь вводит высказывание, которое имеет прямое совпадение с двумя или более намерениями, использующими эти активные контексты, что определяет, какое намерение будет инициировано? (при условии, что уровни достоверности одинаковы)

Кроме того, меняет ли включение выполнения то, как контексты имеют приоритет? Если нет, то почему включение выполнения меняет ответ, когда веб-хук ничего не делает?

Вот пример проблемы, с которой я сталкиваюсь.

У меня два почти идентичных потока:

Каждое подчиненное намерение запускается либо «да», либо «нет», и все выходные контексты имеют время жизни 5 витков. Обе идентичны во всех аспектах, за исключением того, что Flow2 имеет выполнение, включенное для всех намерений, и Flow1 отключает их все.

Поток 1

Если я наберу «нет» -> «нет» -> «нет» -> «да»

Порядок сработавших намерений будет:

  1. ContextTest.no1
  2. ContextTest.no1.no2
  3. ContextTest.no1.no2.no3
  4. ContextTest.no1.no2.yes3

Поток 2

Если я наберу те же самые точные высказывания в том же порядке,

Порядок сработавших намерений будет:

  1. ContextTestFF.no1
  2. ContextTestFF.no1.no2.no3
  3. 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
});
...