Dialogflow - вывести параметр из контекста - PullRequest
0 голосов
/ 06 февраля 2019

Что я хочу?

  • Прямая вставка данных из выполнения диалоговых потоков в базу данных firebase (требуется идентификатор пользователя)

  • Я только хочу знать: используйте параметры в пределах запускаемых намерений (например, имя пользователя).Пример: пользователь пишет «Hello» (в приложении), а чатбот отвечает «Hello John», как в Описание Googles

То, что я до сих пор:

У меня есть своеобразное приложение для чата, где пользователь может общаться с другими пользователями и / или чат-ботом (используя диалоговый поток).

В облачных функциях Firebase приложение отправляет запрос в диалоговый поток вкл.контекст с параметром:

function sendToDialogflow(uid) {
    const sessionId = '<SESSION_ID>';
    const sessionClient = new dialogflow.SessionsClient();
    const projectId = '<PROJECT_ID>';
    const sessionPath = sessionClient.sessionPath(projectId, sessionId);

    const request = {
        session: sessionPath,
        queryParams: {
            contexts: [{
                name: `projects/${projectId}/agent/sessions/${sessionId}/contexts/userId`,
                lifespanCount: 2,
                parameters: {
                    uid: uid,
                }
            }]
        },
        queryInput: {
            text: {
                text: text,
                languageCode: 'en-US',
            },
        },
    };
    sessionClient.detectIntent(request).then((response) => {
        const result = response[0].queryResult.fulfillmentText;
    });
}

Данный контекст действительно работает.

Мое текущее решение для вставки данных в firebase с использованием обещания (в облачных функциях firebase), но оно кажется очень медленным (ожидание ответа в течение 20 секунд):

sessionClient.detectIntent(request).then((response) => {
    const result = response[0].queryResult.fulfillmentText;
    return admin.database().ref('message').push({
        fromUid: '<bots id>',
        toUid: uid,
        text: result
    }).catch((error) => {
        console.log(error);
    });
});

1 Ответ

0 голосов
/ 07 февраля 2019

Потратив несколько часов на эту проблему, я все же обнаружил, что ошибка была в полезной нагрузке (с параметром) из моей облачной функции Firebase, которая запускает диалог.Благодаря @matthewayne ответу здесь , я должен использовать jsonToStructProto ( файл ) для преобразования параметра в другой формат (протоструктура).

новыйзапрос выглядит как

const request = {
    session: sessionPath,
    queryParams: {
        contexts: [{
                name: `projects/${projectId}/agent/sessions/${sessionId}/contexts/testId`,
                lifespanCount: 2,
                parameters: structjson.jsonToStructProto({foo: 'bar'}),
            }
        ]
    },
    queryInput: {
        text: {
            text: text,
            // The language used by the client (en-US)
            languageCode: 'de-DE',
        },
    },
};

Теперь можно получить параметр в консоли диалогового потока:

#testId.foo

или при выполнении:

agent.contexts['testId'].parameters

...